"""Tests for the SeatGeek provider.""" from datetime import date import pytest from src.providers.seatgeek import SeatGeekProvider, MIN_SCORE_THRESHOLD from tests.conftest import SEATGEEK_RESPONSE class TestSeatGeekProvider: def test_name(self): provider = SeatGeekProvider(client_id="test-id") assert provider.name == "seatgeek" def test_fetch_skips_when_no_client_id(self): provider = SeatGeekProvider(client_id="") assert provider.fetch() == [] def test_fetch_filters_by_score_threshold(self, httpx_mock): httpx_mock.add_response(json=SEATGEEK_RESPONSE) provider = SeatGeekProvider(client_id="test-id") events = provider.fetch() assert len(events) == 2 names = {e.name for e in events} assert "Local Open Mic" not in names def test_fetch_normalizes_fields(self, httpx_mock): httpx_mock.add_response(json=SEATGEEK_RESPONSE) provider = SeatGeekProvider(client_id="test-id") events = provider.fetch() drake = next(e for e in events if "Drake" in e.name) assert drake.event_date == date(2026, 5, 15) assert drake.venue == "Budweiser Stage" assert drake.source == "seatgeek" assert "seatgeek.com" in drake.url def test_fetch_handles_api_error(self, httpx_mock): httpx_mock.add_response(status_code=500) provider = SeatGeekProvider(client_id="test-id") assert provider.fetch() == [] def test_fetch_handles_empty_events(self, httpx_mock): httpx_mock.add_response(json={"events": []}) provider = SeatGeekProvider(client_id="test-id") assert provider.fetch() == [] def test_fetch_handles_null_score(self, httpx_mock): response = { "events": [ { "title": "Event with null score", "datetime_local": "2026-05-10T19:00:00", "venue": {"name": "Some Venue"}, "url": "https://example.com", "score": None, }, ] } httpx_mock.add_response(json=response) provider = SeatGeekProvider(client_id="test-id") events = provider.fetch() assert events == [] def test_extract_date_iso_format(self): item = {"datetime_local": "2026-05-10T19:30:00"} assert SeatGeekProvider._extract_date(item) == date(2026, 5, 10) def test_extract_date_utc_fallback(self): item = {"datetime_utc": "2026-05-10T23:30:00"} assert SeatGeekProvider._extract_date(item) == date(2026, 5, 10) def test_extract_date_missing(self): assert SeatGeekProvider._extract_date({}) is None def test_extract_date_invalid(self): item = {"datetime_local": "not-a-date"} assert SeatGeekProvider._extract_date(item) is None