Ajout de python -m app.bootstrap : instance vierge sans jeu de démo

Crée une édition + le premier compte coordination (mot de passe) + 3 créneaux
types par défaut, et affiche l'UUID à mettre dans VITE_EDITION_ID. Documenté
dans README (« Vraie instance, sans jeu de démo »).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017uUsRg7XzopkCPWimwg9ZM
This commit is contained in:
AdamThomas
2026-09-10 21:05:14 +02:00
co-authored by Claude Sonnet 5
parent 3bc0cb0770
commit 6c4297b5fc
4 changed files with 220 additions and 2 deletions
+66
View File
@@ -0,0 +1,66 @@
import argparse
import datetime as dt
import pytest
from sqlmodel import select
from app.bootstrap import run
from app.models import Account, DayPart, Edition, Role
def _args(**overrides) -> argparse.Namespace:
base = {
"name": "Festival 2027",
"start": "2027-07-01",
"end": "2027-07-04",
"email": "coord@monfestival.fr",
"password": "un-mot-de-passe-solide",
"year": None,
"no_day_parts": False,
"retention_days": None,
}
base.update(overrides)
return argparse.Namespace(**base)
def test_creates_edition_coordinator_and_default_day_parts(session):
edition = run(_args(), session)
reloaded = session.get(Edition, edition.id)
assert reloaded.name == "Festival 2027"
assert reloaded.year == 2027
assert reloaded.start_date == dt.date(2027, 7, 1)
account = session.exec(
select(Account).where(Account.edition_id == edition.id)
).one()
assert account.role is Role.COORDINATOR
assert account.auth_method == "password"
codes = [
d.code
for d in session.exec(
select(DayPart).where(DayPart.edition_id == edition.id)
)
]
assert set(codes) == {"MATIN", "APRES_MIDI", "SOIREE"}
def test_no_day_parts_flag(session):
edition = run(_args(no_day_parts=True), session)
assert (
session.exec(
select(DayPart).where(DayPart.edition_id == edition.id)
).all()
== []
)
def test_rejects_short_password(session):
with pytest.raises(SystemExit):
run(_args(password="court"), session)
def test_rejects_end_before_start(session):
with pytest.raises(SystemExit):
run(_args(start="2027-07-04", end="2027-07-01"), session)