diff --git a/app.py b/app.py index 4c5a7f1..61dc913 100644 --- a/app.py +++ b/app.py @@ -134,6 +134,17 @@ def can_accept_votes(data): return s.get("current_stage") == "vote" and s.get("voting_open", False) +def get_topics(): + return load_data().get("topics", {}).get("categories", []) + + +def update_topics(categories): + def _fn(data): + data.setdefault("topics", {}) + data["topics"]["categories"] = categories + update_data(_fn) + + def get_tie_breaks(): return load_data().get("tie_breaks", {}) diff --git a/tests/e2e.py b/tests/e2e.py index adb84b4..d77b59b 100644 --- a/tests/e2e.py +++ b/tests/e2e.py @@ -258,6 +258,26 @@ def t_stage_helpers(): pass +def t_topics_helpers(): + from app import get_topics, update_topics, load_data, save_data, _empty_state + save_data(_empty_state()) + + assert get_topics() == [] + + sample = [ + {"id": "T1", "title": "테스트", "tagline": "tl", "tone": "tn", + "items": [f"item{i}" for i in range(10)]} + ] + update_topics(sample) + assert get_topics() == sample + + # atomic 갱신 확인 + sample2 = [{"id": "T1", "title": "교체", "tagline": "tl", "tone": "tn", + "items": [f"x{i}" for i in range(10)]}] + update_topics(sample2) + assert get_topics() == sample2 + + if __name__ == "__main__": print(f"# E2E (data={TEST_DATA})\n") test("hackathon.json 로드 (34명, 7팀)", t_load) @@ -275,6 +295,7 @@ if __name__ == "__main__": test("empty_state 신규 키", t_empty_state_has_topics_and_stage) test("load_data nested 키 backfill", t_load_data_backfills_nested_settings) test("stage 헬퍼", t_stage_helpers) + test("topics 헬퍼", t_topics_helpers) fails = sum(1 for r, _ in results if r == FAIL) print(f"\n# {len(results)} 중 통과 {len(results) - fails}, 실패 {fails}")