Removes || true from the ruff and pytest steps (job names unchanged so branch protection contexts still match), adds [tool.ruff] config (E4/E7/E9/F/I, line-length 120), applies ruff autofixes, and rewrites tests that had drifted from the current calendar/auth/main APIs — failures the soft gates had been hiding.
74 lines
2.4 KiB
Python
74 lines
2.4 KiB
Python
"""Tests for the date-window filter in main.py."""
|
|
|
|
from datetime import date
|
|
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 == []
|