feat(random): multi-theme groundwork, locked reroll export parity, duplicate export fix, expanded diagnostics and test coverage

This commit is contained in:
matt 2025-09-25 15:14:15 -07:00
parent a029d430c5
commit 73685f22c8
39 changed files with 2671 additions and 271 deletions

View file

@ -0,0 +1,43 @@
import os
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_reroll_idempotency_and_progression(client: TestClient):
# Initial build
base_seed = 2024
r1 = client.post("/api/random_full_build", json={"seed": base_seed})
assert r1.status_code == 200, r1.text
d1 = r1.json()
deck1 = d1.get("decklist")
assert isinstance(deck1, list) and deck1
# Rebuild with the same seed should produce identical result
r_same = client.post("/api/random_full_build", json={"seed": base_seed})
assert r_same.status_code == 200, r_same.text
deck_same = r_same.json().get("decklist")
assert deck_same == deck1
# Reroll (seed+1) should typically change the result
r2 = client.post("/api/random_reroll", json={"seed": base_seed})
assert r2.status_code == 200, r2.text
d2 = r2.json()
assert d2.get("seed") == base_seed + 1
deck2 = d2.get("decklist")
# It is acceptable that a small dataset could still coincide, but in practice should differ
assert deck2 != deck1 or d2.get("commander") != d1.get("commander")