DispelEvilBot/tests/test_eggs.py

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))