Sortir la démonstration du chemin d'installation
Une instance neuve passait par le seed pour être utilisable. Or le seed installe une fiction : « Maison Rivage », des salariés inventés, quatre semaines de planning, des absences. Sur une instance de travail, ces noms se confondent avec de vrais salariés dans l'annuaire et au registre du personnel. Le trou qu'il bouchait était réel : après les migrations, une instance avait le schéma et rien à quoi l'accrocher. Aucun type d'absence, donc aucune demande saisissable. Aucune étiquette, donc aucun créneau nommé. Aucune convention, donc un moteur de règles muet qui laisse passer une semaine de soixante heures sans rien dire. L'écran d'installation pose donc désormais les référentiels : les douze étiquettes, cinq types d'absence, la convention d'amorce IDCC 1517 avec l'origine de chacun de ses paramètres, les durées de conservation et les jours fériés des deux prochaines années. Ce ne sont pas des exemples mais des minima, tous modifiables ensuite depuis les réglages. Trois choses restent délibérément absentes. Aucun dimanche du maire : la liste vient d'un arrêté municipal, et en inventer rendrait opposable un quota que personne n'a accordé. Aucun code Silae sur les types d'absence : la correspondance appartient au dossier du client. Aucun salarié, aucun créneau, aucune absence. Le seed devient `prisma/seed-demo.ts`, réservé au harnais Playwright. `db:seed` disparaît au profit de `db:seed:demo` : il n'y a plus rien à semer pour démarrer, et un nom qui le dit vaut mieux qu'un commentaire qui l'explique. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0a916ff73e
commit
a0524c56d7
7 files changed
+239
-18
No files matched your search
@@ -122,6 +122,37 @@ describeIfDb('première installation', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('pose les référentiels sans lesquels rien ne s’accroche', async () => {
|
||||
// Une instance installée doit être utilisable, pas seulement peuplée d'un
|
||||
// compte. Sans type d'absence aucune demande n'est saisissable ; sans
|
||||
// convention, le moteur de règles laisse passer une semaine de soixante
|
||||
// heures sans rien dire.
|
||||
await installThenRollback(form(), async (tx, instance) => {
|
||||
const where = { accountId: instance.accountId };
|
||||
|
||||
expect(await tx.label.count({ where })).toBeGreaterThan(0);
|
||||
expect(await tx.absenceType.count({ where })).toBeGreaterThan(0);
|
||||
expect(await tx.collectiveAgreement.count({ where })).toBe(1);
|
||||
expect(await tx.retentionPolicy.count({ where })).toBeGreaterThan(0);
|
||||
expect(await tx.holiday.count({ where })).toBeGreaterThan(0);
|
||||
|
||||
// Aucune donnée d'exemple en revanche : le propriétaire est le seul
|
||||
// salarié, et il n'a ni planning ni absence.
|
||||
expect(await tx.membership.count({ where })).toBe(1);
|
||||
expect(await tx.shift.count({ where })).toBe(0);
|
||||
expect(await tx.timeOff.count({ where })).toBe(0);
|
||||
|
||||
// Le dimanche du maire s'autorise par arrêté municipal : en poser un
|
||||
// rendrait opposable un quota que personne n'a accordé.
|
||||
expect(await tx.authorisedSunday.count({ where })).toBe(0);
|
||||
|
||||
// Le code Silae d'un type d'absence appartient au dossier du client :
|
||||
// l'inventer imputerait des congés à la rubrique d'un autre cabinet.
|
||||
const types = await tx.absenceType.findMany({ where });
|
||||
expect(types.every((type) => type.silaeCode === null)).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
it('rattache le propriétaire à tous les établissements', async () => {
|
||||
await installThenRollback(form(), async (tx, instance) => {
|
||||
const membership = await tx.membership.findUniqueOrThrow({
|
||||
|
||||
Reference in new issue
Block a user