"""确定性节日日期兜底测试。""" from __future__ import annotations import unittest from datetime import date from app.festival_demand.fixed_dates import ( detect_deterministic_active_festivals, is_deterministic_event, resolve_event_date, solar_term_date, ) from app.festival_demand.calendar import DEFAULT_FESTIVAL_EVENTS class FestivalFixedDatesTest(unittest.TestCase): def test_solar_term_liqiu_2026(self) -> None: self.assertEqual(solar_term_date(2026, "立秋"), date(2026, 8, 7)) def test_fixed_month_day(self) -> None: self.assertEqual(resolve_event_date(2026, "建党节"), date(2026, 7, 1)) self.assertEqual(resolve_event_date(2026, "918纪念日"), date(2026, 9, 18)) def test_liqiu_prewarm_detected_on_2026_08_03(self) -> None: allowed_kinds = {event.name: event.kind for event in DEFAULT_FESTIVAL_EVENTS} prewarm_by_name = {event.name: event.prewarm_days for event in DEFAULT_FESTIVAL_EVENTS} event_type_by_name = {event.name: event.event_type for event in DEFAULT_FESTIVAL_EVENTS} festivals = detect_deterministic_active_festivals( date(2026, 8, 3), allowed_kinds=allowed_kinds, prewarm_by_name=prewarm_by_name, event_type_by_name=event_type_by_name, ) names = {item["name"] for item in festivals} self.assertIn("立秋", names) liqiu = next(item for item in festivals if item["name"] == "立秋") self.assertEqual(liqiu["phase"], "prewarm") self.assertEqual(liqiu["days_to_festival"], 4) def test_lunar_festival_not_deterministic(self) -> None: self.assertFalse(is_deterministic_event("春节")) self.assertTrue(is_deterministic_event("立秋")) if __name__ == "__main__": unittest.main()