"""Тесты сезонности «яичек»: Пасха, окно события и переопределение дат.""" from __future__ import annotations from datetime import date from common.config import Settings from common.eggs import egg_event_period, is_egg_event_active, orthodox_easter def _settings(**env: str) -> Settings: return Settings(_env_file=None, **{"BOT_TOKEN": "1:a", **env}) def test_orthodox_easter_known_dates() -> None: assert orthodox_easter(2024) == date(2024, 5, 5) assert orthodox_easter(2025) == date(2025, 4, 20) assert orthodox_easter(2026) == date(2026, 4, 12) assert orthodox_easter(2027) == date(2027, 5, 2) def test_default_period_is_april_first_to_easter() -> None: settings = _settings() assert egg_event_period(settings, date(2026, 2, 1)) == (date(2026, 4, 1), date(2026, 4, 12)) def test_event_boundaries() -> None: settings = _settings() assert not is_egg_event_active(settings, date(2026, 3, 31)) assert is_egg_event_active(settings, date(2026, 4, 1)) assert is_egg_event_active(settings, date(2026, 4, 12)) assert not is_egg_event_active(settings, date(2026, 4, 13)) def test_event_dates_can_be_overridden() -> None: settings = _settings(EGG_EVENT_START="2026-04-05", EGG_EVENT_END="2026-04-10") assert egg_event_period(settings, date(2026, 4, 1)) == (date(2026, 4, 5), date(2026, 4, 10)) assert not is_egg_event_active(settings, date(2026, 4, 4)) assert is_egg_event_active(settings, date(2026, 4, 6)) assert not is_egg_event_active(settings, date(2026, 4, 11)) def test_empty_dates_mean_auto() -> None: settings = _settings(EGG_EVENT_START="", EGG_EVENT_END="") assert settings.egg_event_start is None assert settings.egg_event_end is None assert is_egg_event_active(settings, date(2026, 4, 2))