52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
"""Тесты сезонности «яичек»: Пасха, окно события и переопределение дат."""
|
|
|
|
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))
|