feat(api): validate canon log at every role endpoint (422 on invalid)
This commit is contained in:
38
api/tests/test_endpoints.py
Normal file
38
api/tests/test_endpoints.py
Normal file
@@ -0,0 +1,38 @@
|
||||
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
|
||||
Reference in New Issue
Block a user