AtAnyRate/tests/test_filter.py
ilia c8a82e264c Add tests, geo search, noise filtering, sports scoring, and dedup improvements.
Tests cover providers, dedup, Telegram, scoring, main runner, and Airbnb stubs.
Ticketmaster and SeatGeek use configurable lat/lon/radius (Thornhill default).
Pipeline filters noise listings, merges same-day sports duplicates, optional
MIN_ALERT_SCORE, and Telegram severity summary.

Made-with: Cursor
2026-04-04 15:25:35 -04:00

74 lines
2.4 KiB
Python

"""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 == []