Add multi-league foundation
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user