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:
co-authored by
Claude Sonnet 5
parent
3bc0cb0770
commit
6c4297b5fc
@@ -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)
|
||||
Reference in New Issue
Block a user