import json from pathlib import Path from fastapi.testclient import TestClient from app.main import app client = TestClient(app) VALID_LOG = json.load(open(Path(__file__).parent / "fixtures" / "canon_log_valid.json")) ROLE_ENDPOINTS = [ "/dm/narrate", "/dm/adjudicate", "/dm/improvise", "/npc/speak", "/party/banter", ] def test_health_ok(): assert client.get("/health").json() == {"status": "ok"} def test_every_role_endpoint_accepts_a_valid_canon_log(): for path in ROLE_ENDPOINTS: r = client.post(path, json={"canon_log": VALID_LOG}) assert r.status_code == 200, f"{path} rejected a valid log: {r.text}" def test_every_role_endpoint_rejects_an_invalid_canon_log(): bad = json.loads(json.dumps(VALID_LOG)) bad["player"]["luck"] = 5 # ยง7 leak for path in ROLE_ENDPOINTS: r = client.post(path, json={"canon_log": bad}) assert r.status_code == 422, f"{path} accepted an invalid log" assert "canon_log_errors" in r.json()["detail"] def test_missing_canon_log_is_a_422(): r = client.post("/dm/narrate", json={}) assert r.status_code == 422