Files
gh-christianlouis-leagueledger/tests/unit/test_league_context.py
T
Christian Krakau-Louis 15e1dc227b Add multi-league foundation
2026-05-22 20:47:28 +02:00

72 lines
2.7 KiB
Python

#!/usr/bin/env python3
import pytest
from datetime import datetime
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from app.league_context import get_default_league, parse_league_id, qr_code_league_id, resolve_selected_league
from app.models import Base, Event, League, QRCode, QRSet, Team
@pytest.fixture()
def db_session():
engine = create_engine("sqlite:///:memory:")
Base.metadata.create_all(bind=engine)
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
db = TestingSessionLocal()
try:
yield db
finally:
db.close()
def test_get_default_league_creates_compatible_default(db_session):
league = get_default_league(db_session)
assert league.name == "Default League"
assert league.slug == "default"
assert league.is_active is True
def test_resolve_selected_league_uses_active_requested_league(db_session):
get_default_league(db_session)
requested = League(name="Rover Pub League", slug="rover-pub", is_active=True)
inactive = League(name="Archived Pub League", slug="archived-pub", is_active=False)
db_session.add_all([requested, inactive])
db_session.commit()
assert resolve_selected_league(db_session, requested.id).id == requested.id
assert resolve_selected_league(db_session, inactive.id).slug == "default"
assert resolve_selected_league(db_session, 9999).slug == "default"
def test_parse_league_id_handles_invalid_values():
assert parse_league_id("42") == 42
assert parse_league_id("") is None
assert parse_league_id(None) is None
assert parse_league_id("not-a-number") is None
def test_qr_code_league_id_prefers_direct_then_set_then_event(db_session):
direct = League(name="Direct League", slug="direct", is_active=True)
via_set = League(name="Set League", slug="set", is_active=True)
via_event = League(name="Event League", slug="event", is_active=True)
db_session.add_all([direct, via_set, via_event])
db_session.commit()
qr_set = QRSet(name="Weekly Set", league_id=via_set.id)
event = Event(name="Quiz Night", league_id=via_event.id, event_date=datetime(2026, 5, 22))
team = Team(name="Quiz Team", league_id=direct.id)
db_session.add_all([qr_set, event, team])
db_session.commit()
direct_qr = QRCode(code="direct-code", points=10, league_id=direct.id)
set_qr = QRCode(code="set-code", points=10, qr_set_id=qr_set.id)
event_qr = QRCode(code="event-code", points=10, event_id=event.id)
db_session.add_all([direct_qr, set_qr, event_qr])
db_session.commit()
assert qr_code_league_id(direct_qr) == direct.id
assert qr_code_league_id(set_qr) == via_set.id
assert qr_code_league_id(event_qr) == via_event.id