feat(ce): Sprint P — seed démo CE + tests invites #90

Merged
tarzzan merged 1 commit from feat/karbe-sprint-p into main 2026-06-03 03:13:45 +00:00
Owner

Sprint P — Seed démo CE + tests invites + cleanup helper

Petit sprint defensif qui closes les loose ends restantes du plan CE.

Seed plugin demo-ce-seed

Nouveau plugin (category visual) qui seed une organisation démo complète pour visualiser le module CE sans signup manuel.

  • seedDemoCe() crée :
    • Organisation « Comité ESA Kourou (démo) » approved=true, slug demo-comite-esa-kourou
    • 2 CE_MANAGERs + 3 CE_MEMBERs (password "demo")
    • 2 carbets co-gérés (Sinnamary + Kourou) avec OrganizationCarbetMembership
    • 1 RentalProvider org-scoped + 4 items (hamac, moustiquaire, kayak, réchaud)
  • archiveDemoCe() : soft-archive carbets (status=ARCHIVED), delete RentalProvider démo, delete users + org
  • Idempotent : check existence par slug/email avant create. Upsert pour users (re-enable propre)
  • Branchement hooks onEnable/onDisable dans plugins/hooks.ts

Usage : /admin/plugins → activer « Démo Comité d'Entreprise » → l'org démo et son écosystème apparaissent sur le site (badge « Géré par le CE … » sur fiches carbet, items dans /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 (simplification du code)

Tests vitest

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). Lint + typecheck + build ✓.

Test plan

  • Vitest 83/83 ✓
  • ADMIN → /admin/plugins → activer « Démo Comité d'Entreprise » → log seed terminé
  • Vérifier /carbets/demo-ce-karbe-sinnamary → fiche publique avec badge « Géré par le CE Comité ESA Kourou (démo) »
  • /materiel filtré par provider démo → 4 items visibles
  • Login demo-ce-mgr1@karbe.demo / mot de passe demo/espace-ce avec dashboard rempli
  • Désactiver le plugin → carbets archivés + users + org supprimés

🤖 Generated with Claude Code

## Sprint P — Seed démo CE + tests invites + cleanup helper Petit sprint defensif qui closes les loose ends restantes du plan CE. ### Seed plugin `demo-ce-seed` Nouveau plugin (category visual) qui seed une organisation démo complète pour visualiser le module CE sans signup manuel. - `seedDemoCe()` crée : - Organisation « Comité ESA Kourou (démo) » approved=true, slug `demo-comite-esa-kourou` - 2 CE_MANAGERs + 3 CE_MEMBERs (password "demo") - 2 carbets co-gérés (Sinnamary + Kourou) avec OrganizationCarbetMembership - 1 RentalProvider org-scoped + 4 items (hamac, moustiquaire, kayak, réchaud) - `archiveDemoCe()` : soft-archive carbets (status=ARCHIVED), delete RentalProvider démo, delete users + org - Idempotent : check existence par slug/email avant create. Upsert pour users (re-enable propre) - Branchement hooks onEnable/onDisable dans `plugins/hooks.ts` **Usage** : `/admin/plugins` → activer « Démo Comité d'Entreprise » → l'org démo et son écosystème apparaissent sur le site (badge « Géré par le CE … » sur fiches carbet, items dans `/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 (simplification du code) ### Tests vitest `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). Lint + typecheck + build ✓. ### Test plan - [x] Vitest 83/83 ✓ - [ ] ADMIN → `/admin/plugins` → activer « Démo Comité d'Entreprise » → log seed terminé - [ ] Vérifier `/carbets/demo-ce-karbe-sinnamary` → fiche publique avec badge « Géré par le CE Comité ESA Kourou (démo) » - [ ] `/materiel` filtré par provider démo → 4 items visibles - [ ] Login `demo-ce-mgr1@karbe.demo` / mot de passe `demo` → `/espace-ce` avec dashboard rempli - [ ] Désactiver le plugin → carbets archivés + users + org supprimés 🤖 Generated with [Claude Code](https://claude.com/claude-code)
tarzzan added 1 commit 2026-06-03 03:13:44 +00:00
feat(ce): Sprint P — seed démo CE + tests invites + cleanup helper
All checks were successful
CI / test (pull_request) Successful in 2m40s
18d19538d3
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>
tarzzan merged commit 9bdb3666a0 into main 2026-06-03 03:13:45 +00:00
tarzzan deleted branch feat/karbe-sprint-p 2026-06-03 03:13:50 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: tarzzan/karbe#90
No description provided.