mirror of
https://github.com/mwisnowski/mtg_python_deckbuilder.git
synced 2025-12-16 15:40:12 +01:00
Some checks failed
Editorial Lint / lint-editorial (push) Has been cancelled
- document random theme exclusions, perf guard tooling, and roadmap completion - tighten random reroll UX: strict theme persistence, throttle handling, export parity, diagnostics updates - add regression coverage for telemetry counters, multi-theme flows, and locked rerolls; refresh README and notes Tests: pytest -q (fast random + telemetry suites)
112 lines
No EOL
4 KiB
Python
112 lines
No EOL
4 KiB
Python
import os
|
|
import json
|
|
|
|
import pytest
|
|
|
|
from fastapi.testclient import TestClient
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def client():
|
|
# Ensure flags and frozen dataset
|
|
os.environ["RANDOM_MODES"] = "1"
|
|
os.environ["RANDOM_UI"] = "1"
|
|
os.environ["CSV_FILES_DIR"] = os.path.join("csv_files", "testdata")
|
|
|
|
from web.app import app
|
|
|
|
with TestClient(app) as c:
|
|
yield c
|
|
|
|
|
|
def test_api_random_reroll_increments_seed(client: TestClient):
|
|
r1 = client.post("/api/random_full_build", json={"seed": 123})
|
|
assert r1.status_code == 200, r1.text
|
|
data1 = r1.json()
|
|
assert data1.get("seed") == 123
|
|
|
|
r2 = client.post("/api/random_reroll", json={"seed": 123})
|
|
assert r2.status_code == 200, r2.text
|
|
data2 = r2.json()
|
|
assert data2.get("seed") == 124
|
|
assert data2.get("permalink")
|
|
|
|
|
|
def test_api_random_reroll_auto_fill_metadata(client: TestClient):
|
|
r1 = client.post("/api/random_full_build", json={"seed": 555, "primary_theme": "Aggro"})
|
|
assert r1.status_code == 200, r1.text
|
|
|
|
r2 = client.post(
|
|
"/api/random_reroll",
|
|
json={"seed": 555, "primary_theme": "Aggro", "auto_fill_enabled": True},
|
|
)
|
|
assert r2.status_code == 200, r2.text
|
|
data = r2.json()
|
|
assert data.get("auto_fill_enabled") is True
|
|
assert data.get("auto_fill_secondary_enabled") is True
|
|
assert data.get("auto_fill_tertiary_enabled") is True
|
|
assert data.get("auto_fill_applied") in (True, False)
|
|
assert isinstance(data.get("auto_filled_themes"), list)
|
|
assert data.get("requested_themes", {}).get("auto_fill_enabled") is True
|
|
assert data.get("requested_themes", {}).get("auto_fill_secondary_enabled") is True
|
|
assert data.get("requested_themes", {}).get("auto_fill_tertiary_enabled") is True
|
|
assert "display_themes" in data
|
|
|
|
|
|
def test_api_random_reroll_secondary_only_auto_fill(client: TestClient):
|
|
r1 = client.post(
|
|
"/api/random_reroll",
|
|
json={
|
|
"seed": 777,
|
|
"primary_theme": "Aggro",
|
|
"auto_fill_secondary_enabled": True,
|
|
"auto_fill_tertiary_enabled": False,
|
|
},
|
|
)
|
|
assert r1.status_code == 200, r1.text
|
|
data = r1.json()
|
|
assert data.get("auto_fill_enabled") is True
|
|
assert data.get("auto_fill_secondary_enabled") is True
|
|
assert data.get("auto_fill_tertiary_enabled") is False
|
|
assert data.get("auto_fill_applied") in (True, False)
|
|
assert isinstance(data.get("auto_filled_themes"), list)
|
|
requested = data.get("requested_themes", {})
|
|
assert requested.get("auto_fill_enabled") is True
|
|
assert requested.get("auto_fill_secondary_enabled") is True
|
|
assert requested.get("auto_fill_tertiary_enabled") is False
|
|
|
|
|
|
def test_api_random_reroll_tertiary_requires_secondary(client: TestClient):
|
|
r1 = client.post(
|
|
"/api/random_reroll",
|
|
json={
|
|
"seed": 778,
|
|
"primary_theme": "Aggro",
|
|
"auto_fill_secondary_enabled": False,
|
|
"auto_fill_tertiary_enabled": True,
|
|
},
|
|
)
|
|
assert r1.status_code == 200, r1.text
|
|
data = r1.json()
|
|
assert data.get("auto_fill_enabled") is True
|
|
assert data.get("auto_fill_secondary_enabled") is True
|
|
assert data.get("auto_fill_tertiary_enabled") is True
|
|
assert data.get("auto_fill_applied") in (True, False)
|
|
assert isinstance(data.get("auto_filled_themes"), list)
|
|
requested = data.get("requested_themes", {})
|
|
assert requested.get("auto_fill_enabled") is True
|
|
assert requested.get("auto_fill_secondary_enabled") is True
|
|
assert requested.get("auto_fill_tertiary_enabled") is True
|
|
|
|
|
|
def test_hx_random_reroll_returns_html(client: TestClient):
|
|
headers = {"HX-Request": "true", "Content-Type": "application/json"}
|
|
r = client.post("/hx/random_reroll", content=json.dumps({"seed": 42}), headers=headers)
|
|
assert r.status_code == 200, r.text
|
|
# Accept either HTML fragment or JSON fallback
|
|
content_type = r.headers.get("content-type", "")
|
|
if "text/html" in content_type:
|
|
assert "Seed:" in r.text
|
|
else:
|
|
j = r.json()
|
|
assert j.get("seed") in (42, 43) # depends on increment policy |