Début de journée indépendant de l'ordre des créneaux types
ci-cd / build-backend (push) Successful in 33s
ci-cd / build-frontend (push) Successful in 19s
ci-cd / deploy (push) Successful in 13s

La « journée de festival » commence désormais au début du plus long creux
laissé par les créneaux types sur 24 h (l'heure où le dernier se termine),
et non plus au début de celui de plus petit `order` : un créneau type
d'ordre 0 déplacé à 21:00 faisait commencer chaque journée des grilles à
21:00, jusqu'à 03:00 le lendemain. Même règle côté backend
(validation.engine.day_boundary, réutilisée par la génération de créneaux)
et frontend (dayBoundaryFromDayParts).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AdamThomas
2026-10-05 20:48:14 +02:00
co-authored by Claude Opus 5.5
parent ee1f6ed72e
commit f671bb85bf
6 changed files with 170 additions and 25 deletions
+34
View File
@@ -275,3 +275,37 @@ def test_only_warnings_is_not_blocking():
violations = validate(data)
assert _codes(violations) == [ViolationCode.OUTSIDE_AVAILABILITY]
assert has_blocking(violations) is False
# --- Début de « journée de festival » (day_boundary) ------------------------
def test_day_boundary_starts_after_last_day_part_ends():
from app.validation.engine import day_boundary
parts = (
DayPartWindow("MATIN", dt.time(8, 0), dt.time(13, 0), 0),
DayPartWindow("APRES_MIDI", dt.time(13, 0), dt.time(19, 0), 1),
DayPartWindow("SOIREE", dt.time(19, 0), dt.time(2, 0), 2),
)
assert day_boundary(parts) == dt.time(2, 0)
def test_day_boundary_ignores_order_out_of_step_with_hours():
"""Un créneau type d'ordre 0 déplacé à 21 h ne fait plus commencer la
journée à 21 h : seul compte le creux entre la fin du dernier et le
début du premier."""
from app.validation.engine import day_boundary
parts = (
DayPartWindow("SOIREE", dt.time(21, 0), dt.time(3, 0), 0),
DayPartWindow("JOUR", dt.time(10, 0), dt.time(21, 0), 1),
)
assert day_boundary(parts) == dt.time(3, 0)
def test_day_boundary_full_coverage_falls_back_to_first_by_order():
from app.validation.engine import day_boundary
assert day_boundary(DAY_PARTS) == dt.time(6, 0)
assert day_boundary(()) == dt.time(0, 0)