Files
benevoles/backend/tests/test_solver_loader.py
T
AdamThomasandClaude Opus 5.5 a6e7b6e7fb Créneaux de nuit rattachés à leur journée de festival
Un créneau saisi « 00:00–01:00 » sur la carte du samedi était enregistré
le samedi à 00:00 (nuit de vendredi à samedi), donc affiché la veille dans
la grille des besoins. Une heure de début avant le début de journée
(premier créneau type) désigne désormais la nuit qui suit : dimanche
00:00, à la suite de la soirée du samedi.

Même « journée de festival » partout (validation/engine.py:day_boundary,
festival_day ; miroir front lib/planning.ts:festivalDay) : écran Postes &
créneaux, feuilles de poste (une seule page pour une soirée qui passe
minuit) et chaînage du solveur (00h–01h enchaîne 23h–00h).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 18:47:06 +02:00

28 lines
1.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Construction du `SolverInput` depuis la base (`app/solver/loader.py`)."""
from app.solver.loader import build_solver_input
from tests.factories import dt_at, make_position, make_shift
def test_predecessor_is_found_across_midnight_within_the_festival_day(edition, session):
# Début de journée = 06:00 (fixture) : 23h–00h le 9 puis 00h–01h le 10
# appartiennent à la même soirée — le second enchaîne le premier.
bar = make_position(session, edition, name="Bar")
before = make_shift(session, edition, bar, start=dt_at(9, 23), end=dt_at(10, 0))
after = make_shift(session, edition, bar, start=dt_at(10, 0), end=dt_at(10, 1))
data = build_solver_input(session=session, edition=edition)
by_id = {s.id: s for s in data.shifts}
assert by_id[str(after.id)].predecessor_shift_ids == frozenset({str(before.id)})
def test_no_predecessor_across_the_festival_day_boundary(edition, session):
# 05h–06h le 10 clôt la journée du 9 ; 06h–07h le 10 ouvre la suivante.
bar = make_position(session, edition, name="Bar")
make_shift(session, edition, bar, start=dt_at(10, 5), end=dt_at(10, 6))
morning = make_shift(session, edition, bar, start=dt_at(10, 6), end=dt_at(10, 7))
data = build_solver_input(session=session, edition=edition)
by_id = {s.id: s for s in data.shifts}
assert not by_id[str(morning.id)].predecessor_shift_ids