Seed plugin `demo-ce-seed` :
- Nouveau descriptor dans registry (category visual).
- src/lib/plugins/seeds/demo-ce.ts : seedDemoCe() + archiveDemoCe().
Crée org « Comité ESA Kourou (démo) » approved=true + 2 CE_MANAGERs
+ 3 CE_MEMBERs (password "demo") + 2 carbets co-gérés
(OrganizationCarbetMembership) + 1 RentalProvider org-scoped +
4 items (hamac, moustiquaire, kayak, réchaud).
- Idempotent : check existence par slug/email avant create. Upsert
pour users.
- Disable : soft-archive carbets (status=ARCHIVED), delete
RentalProvider démo (best-effort si pas de booking), delete users
démo (cascade memberships) + delete org.
- Branchement hooks onEnable/onDisable dans plugins/hooks.ts.
Permet de visualiser le module CE end-to-end sans signup manuel :
admin active le plugin → l'org démo et son écosystème apparaissent
sur le site (badge « Géré par le CE Comité ESA Kourou (démo) » sur
les fiches carbet, items rental dans le catalogue /materiel).
ce-invites.ts refactor :
- Exporte hashToken (déjà sha256, désormais documenté).
- Extrait isInviteValid(row, now=Date) : helper pur testable. La
fonction getOrgInviteByToken le réutilise.
tests/lib/ce-invites.test.ts (9 cas) :
- hashToken : déterminisme, format sha256 64-hex, inputs différents,
pas de fuite du plain.
- isInviteValid : non consommé+non expiré → vrai ; consommé → faux ;
expiré → faux ; les 2 raisons → faux ; injection now pour tests
temporels.
Total tests : 83/83 ✓ (74 précédents + 9 nouveaux).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>