feat: topics 헬퍼 (get_topics, update_topics)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
11
app.py
11
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", {})
|
||||
|
||||
|
||||
21
tests/e2e.py
21
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}")
|
||||
|
||||
Reference in New Issue
Block a user