| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- """确定性节日日期兜底测试。"""
- 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()
|