113 lines
4.2 KiB
Python
113 lines
4.2 KiB
Python
|
|
"""
|
||
|
|
Shotgun-start for Cup-/lagformatet (migrasjon 088, ADR-096) -- samme
|
||
|
|
mønster som individuelle turneringers utslagsgrupper
|
||
|
|
(test_round_groups.py), men for session/match. Bruker: "Det må komme
|
||
|
|
frem om det er Shotgun eller løpende start... Sorteringen av
|
||
|
|
startlisten gjøres etter utslagsform."
|
||
|
|
"""
|
||
|
|
|
||
|
|
from app.routers.matches import MatchCreate, create_match, list_matches
|
||
|
|
from app.routers.tournaments import SessionUpdate, update_session
|
||
|
|
from app.auth import CurrentUser
|
||
|
|
|
||
|
|
import app.db as app_db
|
||
|
|
|
||
|
|
from tests.conftest import (
|
||
|
|
add_membership,
|
||
|
|
create_course,
|
||
|
|
create_org,
|
||
|
|
create_session,
|
||
|
|
create_team,
|
||
|
|
create_tournament,
|
||
|
|
create_user,
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
async def _setup(org_id):
|
||
|
|
owner_id = await create_user()
|
||
|
|
await add_membership(org_id, owner_id, role="owner")
|
||
|
|
tournament_id = await create_tournament(org_id, name="Cup-turnering")
|
||
|
|
course_id = await create_course(org_id, name="Cup Links")
|
||
|
|
session_id = await create_session(org_id, tournament_id, course_id, format="foursome")
|
||
|
|
team_a = await create_team(org_id, tournament_id, name="Team Nord")
|
||
|
|
team_b = await create_team(org_id, tournament_id, name="Team Sør")
|
||
|
|
return owner_id, tournament_id, session_id, team_a, team_b
|
||
|
|
|
||
|
|
|
||
|
|
async def test_shotgun_session_gives_all_matches_the_same_tee_time(pool):
|
||
|
|
org_id = await create_org()
|
||
|
|
owner_id, tournament_id, session_id, team_a, team_b = await _setup(org_id)
|
||
|
|
|
||
|
|
await update_session(
|
||
|
|
session_id,
|
||
|
|
SessionUpdate(scheduled_at="2026-08-19T08:00:00", tee_interval_minutes=10, start_mode="shotgun"),
|
||
|
|
organization_id=org_id,
|
||
|
|
)
|
||
|
|
|
||
|
|
m1 = (await create_match(
|
||
|
|
session_id, MatchCreate(sequence=1, team_a_id=team_a, team_b_id=team_b, start_hole=5),
|
||
|
|
organization_id=org_id,
|
||
|
|
)).id
|
||
|
|
m2 = (await create_match(
|
||
|
|
session_id, MatchCreate(sequence=2, team_a_id=team_a, team_b_id=team_b, start_hole=1),
|
||
|
|
organization_id=org_id,
|
||
|
|
)).id
|
||
|
|
|
||
|
|
user = CurrentUser(user_id=owner_id)
|
||
|
|
matches = await list_matches(session_id, organization_id=org_id, user=user)
|
||
|
|
# Begge matcher går ut kl 08:00, uansett sequence/intervall.
|
||
|
|
for m in matches:
|
||
|
|
assert m.tee_time is not None and m.tee_time.isoformat().startswith("2026-08-19T08:00:00")
|
||
|
|
# Vist sortert etter STARTHULL (1 før 5), ikke sequence (m1 før m2).
|
||
|
|
assert [m.start_hole for m in matches] == [1, 5]
|
||
|
|
assert [m.id for m in matches] == [m2, m1]
|
||
|
|
|
||
|
|
|
||
|
|
async def test_consecutive_session_still_sorts_by_sequence(pool):
|
||
|
|
org_id = await create_org()
|
||
|
|
owner_id, tournament_id, session_id, team_a, team_b = await _setup(org_id)
|
||
|
|
|
||
|
|
await update_session(
|
||
|
|
session_id,
|
||
|
|
SessionUpdate(scheduled_at="2026-08-19T08:00:00", tee_interval_minutes=10),
|
||
|
|
organization_id=org_id,
|
||
|
|
)
|
||
|
|
|
||
|
|
m1 = (await create_match(
|
||
|
|
session_id, MatchCreate(sequence=1, team_a_id=team_a, team_b_id=team_b),
|
||
|
|
organization_id=org_id,
|
||
|
|
)).id
|
||
|
|
m2 = (await create_match(
|
||
|
|
session_id, MatchCreate(sequence=2, team_a_id=team_a, team_b_id=team_b),
|
||
|
|
organization_id=org_id,
|
||
|
|
)).id
|
||
|
|
|
||
|
|
user = CurrentUser(user_id=owner_id)
|
||
|
|
matches = await list_matches(session_id, organization_id=org_id, user=user)
|
||
|
|
assert [m.id for m in matches] == [m1, m2]
|
||
|
|
assert matches[0].tee_time.isoformat().startswith("2026-08-19T08:00:00")
|
||
|
|
assert matches[1].tee_time.isoformat().startswith("2026-08-19T08:10:00")
|
||
|
|
|
||
|
|
|
||
|
|
async def test_match_tee_time_override_wins_even_in_shotgun_mode(pool):
|
||
|
|
org_id = await create_org()
|
||
|
|
owner_id, tournament_id, session_id, team_a, team_b = await _setup(org_id)
|
||
|
|
|
||
|
|
await update_session(
|
||
|
|
session_id,
|
||
|
|
SessionUpdate(scheduled_at="2026-08-19T08:00:00", start_mode="shotgun"),
|
||
|
|
organization_id=org_id,
|
||
|
|
)
|
||
|
|
match_id = (await create_match(
|
||
|
|
session_id, MatchCreate(sequence=1, team_a_id=team_a, team_b_id=team_b, start_hole=9),
|
||
|
|
organization_id=org_id,
|
||
|
|
)).id
|
||
|
|
async with app_db.org_connection(org_id) as conn:
|
||
|
|
await conn.execute(
|
||
|
|
"UPDATE match SET tee_time_override = '2026-08-19T09:30:00' WHERE id = $1", match_id
|
||
|
|
)
|
||
|
|
|
||
|
|
user = CurrentUser(user_id=owner_id)
|
||
|
|
matches = await list_matches(session_id, organization_id=org_id, user=user)
|
||
|
|
assert matches[0].tee_time.isoformat().startswith("2026-08-19T09:30:00")
|