Files
AtAnyRate/tests/providers/test_ticketmaster.py
T
ilia a08839961b Make CI ruff/pytest gates hard, fix stale tests
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.
2026-07-26 15:42:40 -04:00

104 lines
3.8 KiB
Python

"""Tests for the Ticketmaster provider."""
from datetime import date
from src.providers.ticketmaster import MAJOR_VENUES, TicketmasterProvider
from tests.conftest import TICKETMASTER_RESPONSE
class TestTicketmasterProvider:
def test_name(self):
provider = TicketmasterProvider(api_key="test-key")
assert provider.name == "ticketmaster"
def test_fetch_skips_when_no_api_key(self):
provider = TicketmasterProvider(api_key="")
assert provider.fetch() == []
def test_fetch_returns_only_major_venue_events(self, httpx_mock):
httpx_mock.add_response(json=TICKETMASTER_RESPONSE)
provider = TicketmasterProvider(api_key="test-key", lookahead_days=30)
events = provider.fetch()
venue_names = {e.venue.lower().strip() for e in events}
assert venue_names <= MAJOR_VENUES
assert len(events) == 2
def test_fetch_normalizes_fields(self, httpx_mock):
httpx_mock.add_response(json=TICKETMASTER_RESPONSE)
provider = TicketmasterProvider(api_key="test-key")
events = provider.fetch()
raptors = next(e for e in events if "Raptors" in e.name)
assert raptors.event_date == date(2026, 5, 10)
assert raptors.venue == "Scotiabank Arena"
assert raptors.source == "ticketmaster"
assert "ticketmaster.ca" in raptors.url
def test_fetch_handles_missing_venue(self, httpx_mock):
response = {
"_embedded": {
"events": [
{
"name": "Mystery Event",
"dates": {"start": {"localDate": "2026-05-10"}},
"url": "https://example.com",
"_embedded": {"venues": []},
}
]
}
}
httpx_mock.add_response(json=response)
provider = TicketmasterProvider(api_key="test-key")
events = provider.fetch()
assert events == []
def test_fetch_handles_missing_date(self, httpx_mock):
response = {
"_embedded": {
"events": [
{
"name": "Raptors Game",
"dates": {"start": {}},
"_embedded": {
"venues": [{"name": "Scotiabank Arena"}]
},
}
]
}
}
httpx_mock.add_response(json=response)
provider = TicketmasterProvider(api_key="test-key")
events = provider.fetch()
assert events == []
def test_fetch_handles_api_error(self, httpx_mock):
httpx_mock.add_response(status_code=500)
provider = TicketmasterProvider(api_key="test-key")
events = provider.fetch()
assert events == []
def test_fetch_handles_empty_response(self, httpx_mock):
httpx_mock.add_response(json={})
provider = TicketmasterProvider(api_key="test-key")
events = provider.fetch()
assert events == []
def test_is_major_venue_case_insensitive(self):
assert TicketmasterProvider._is_major_venue("SCOTIABANK ARENA")
assert TicketmasterProvider._is_major_venue("scotiabank arena")
assert TicketmasterProvider._is_major_venue(" Rogers Centre ")
assert not TicketmasterProvider._is_major_venue("Horseshoe Tavern")
def test_extract_date_valid(self):
item = {"dates": {"start": {"localDate": "2026-05-10"}}}
assert TicketmasterProvider._extract_date(item) == date(2026, 5, 10)
def test_extract_date_invalid_format(self):
item = {"dates": {"start": {"localDate": "not-a-date"}}}
assert TicketmasterProvider._extract_date(item) is None
def test_extract_date_missing(self):
assert TicketmasterProvider._extract_date({}) is None
assert TicketmasterProvider._extract_date({"dates": {}}) is None