"""Fabriques d'objets du domaine pour les tests (écriture directe en base).""" import datetime as dt from app.models import ( Artist, Position, PositionCategory, Shift, Volunteer, ) def make_position(session, edition, *, name="Bar", category=PositionCategory.BAR): position = Position(edition_id=edition.id, name=name, category=category) session.add(position) session.commit() session.refresh(position) return position def make_artist( session, edition, *, name="Chilla", performance_date=dt.date(2026, 7, 10), start_time=dt.time(20, 0), end_time=dt.time(21, 0), ): artist = Artist( edition_id=edition.id, name=name, performance_date=performance_date, start_time=start_time, end_time=end_time, ) session.add(artist) session.commit() session.refresh(artist) return artist def make_shift( session, edition, position, *, start, end, min_staff=1, ideal_staff=2 ): shift = Shift( edition_id=edition.id, position_id=position.id, starts_at=start, ends_at=end, min_staff=min_staff, ideal_staff=ideal_staff, ) session.add(shift) session.commit() session.refresh(shift) return shift def make_volunteer( session, edition, *, first_name="Alex", last_name="Martin", email=None ): volunteer = Volunteer( edition_id=edition.id, first_name=first_name, last_name=last_name, email=email, ) session.add(volunteer) session.commit() session.refresh(volunteer) return volunteer def dt_at(day: int, hour: int, minute: int = 0) -> dt.datetime: return dt.datetime(2026, 7, day, hour, minute)