"""Tests for the date-window filter in main.py.""" from datetime import date, timedelta from unittest.mock import patch from src.main import filter_by_window from src.models import NormalizedEvent def _make_event(event_date: date) -> NormalizedEvent: return NormalizedEvent( name="Test", event_date=event_date, venue="Venue", source="test", ) class TestFilterByWindow: @patch("src.main.date") def test_keeps_events_in_window(self, mock_date): mock_date.today.return_value = date(2026, 5, 1) mock_date.side_effect = lambda *args, **kwargs: date(*args, **kwargs) events = [ _make_event(date(2026, 5, 5)), _make_event(date(2026, 5, 15)), _make_event(date(2026, 5, 30)), ] result = filter_by_window(events, lookahead_days=30) assert len(result) == 3 @patch("src.main.date") def test_removes_past_events(self, mock_date): mock_date.today.return_value = date(2026, 5, 10) mock_date.side_effect = lambda *args, **kwargs: date(*args, **kwargs) events = [ _make_event(date(2026, 5, 1)), _make_event(date(2026, 5, 15)), ] result = filter_by_window(events, lookahead_days=30) assert len(result) == 1 assert result[0].event_date == date(2026, 5, 15) @patch("src.main.date") def test_removes_events_beyond_window(self, mock_date): mock_date.today.return_value = date(2026, 5, 1) mock_date.side_effect = lambda *args, **kwargs: date(*args, **kwargs) events = [ _make_event(date(2026, 5, 10)), _make_event(date(2026, 8, 1)), ] result = filter_by_window(events, lookahead_days=30) assert len(result) == 1 assert result[0].event_date == date(2026, 5, 10) @patch("src.main.date") def test_includes_boundary_dates(self, mock_date): mock_date.today.return_value = date(2026, 5, 1) mock_date.side_effect = lambda *args, **kwargs: date(*args, **kwargs) today = date(2026, 5, 1) cutoff = date(2026, 5, 31) events = [ _make_event(today), _make_event(cutoff), ] result = filter_by_window(events, lookahead_days=30) assert len(result) == 2 def test_empty_input(self): result = filter_by_window([], lookahead_days=30) assert result == []