Skip to content

Commit a3c05e4

Browse files
committed
Fix issue where poster halls weren't normalized into exhibit hall on break type events
1 parent e0b8342 commit a3c05e4

2 files changed

Lines changed: 50 additions & 0 deletions

File tree

src/models/europython.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,14 @@ class EuroPythonScheduleBreak(BaseModel):
409409
rooms: list[Room]
410410
start: datetime
411411

412+
@field_validator("rooms", mode="before")
413+
@classmethod
414+
def normalize_poster_rooms(cls, value):
415+
return [
416+
"Exhibit Hall" if isinstance(v, str) and "Poster Hall" in v else v
417+
for v in value
418+
]
419+
412420

413421
class DaySchedule(BaseModel):
414422
rooms: list[Room]
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from datetime import datetime
2+
3+
import pytest
4+
5+
from src.misc import Room
6+
from src.models.europython import EuroPythonScheduleBreak, EuroPythonSession
7+
8+
POSTER_HALLS = ["Poster Hall A", "Poster Hall B", "Poster Hall C"]
9+
10+
11+
def _session(room: str) -> EuroPythonSession:
12+
return EuroPythonSession.model_validate(
13+
{
14+
"code": "TEST",
15+
"title": "Test",
16+
"speakers": [],
17+
"session_type": "Talk",
18+
"slug": "test",
19+
"answers": [],
20+
"slot_count": 1,
21+
"room": room,
22+
}
23+
)
24+
25+
26+
def _break(rooms: list[str]) -> EuroPythonScheduleBreak:
27+
return EuroPythonScheduleBreak(
28+
title="Break",
29+
duration=30,
30+
rooms=rooms,
31+
start=datetime(2026, 7, 14, 10, 0),
32+
)
33+
34+
35+
@pytest.mark.parametrize("poster_hall", POSTER_HALLS)
36+
def test_session_poster_hall_becomes_exhibit_hall(poster_hall: str) -> None:
37+
assert _session(poster_hall).room == "Exhibit Hall"
38+
39+
40+
def test_break_poster_halls_become_exhibit_hall() -> None:
41+
brk = _break(POSTER_HALLS)
42+
assert all(r == Room.exhibit_hall for r in brk.rooms)

0 commit comments

Comments
 (0)