Files
planflow/tests/unit/absence-colors.test.ts
T
MichaelandClaude Opus 5 804e14bf04 Étoffer le référentiel des types d'absence
Cinq types d'amorce ne tiennent pas un registre. Un commerce de détail
rencontre un accident de trajet, une mise à pied, un congé pour examen, une
visite médicale — et faute de type, ces absences se saisissent en « congé sans
solde », ce qui fausse à la fois le décompte et la paie.

Vingt-quatre types désormais, relevés sur le sélecteur du produit audité et
recoupés avec les rubriques du dossier de paie. Les drapeaux sont des valeurs
d'amorce, modifiables depuis les réglages : la nature Sécurité sociale ne se
discute pas, mais l'acquisition de congés pendant une absence dépend de la
convention.

« Repos hebdomadaire » figure au sélecteur audité et pas ici. C'est un repos
légal, porté par le modèle `Rest`, pas une absence qui se demande — en faire un
type d'absence laisserait un manager refuser une obligation.

Les familles de couleur passent de cinq à neuf, et deviennent une liste fermée
avec ses libellés. Le champ des réglages était libre : une clé fautive s'y
enregistrait sans bruit et la grille affichait un gris inexplicable. Quatre
familles s'ajoutent — famille, formation, jour férié, sanction. Une sanction se
distingue d'une absence ordinaire : elle est subie, elle se conteste, elle ne se
lit pas comme un congé.

La couleur groupe, le libellé précise. Donner sa teinte à chacun des
vingt-quatre types rendrait la grille illisible bien avant la fin de la liste.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 13:45:53 +02:00

29 lines
969 B
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { describe, expect, it } from 'vitest';
import {
ABSENCE_COLOR_KEYS,
ABSENCE_COLORS,
isAbsenceColorKey,
} from '@/domain/absences/colors';
describe('familles de couleur des absences', () => {
it('n’a pas deux fois la même clé', () => {
expect(new Set(ABSENCE_COLOR_KEYS).size).toBe(ABSENCE_COLOR_KEYS.length);
});
it('donne un libellé à chaque famille', () => {
for (const color of ABSENCE_COLORS) {
expect(color.label, `libellé manquant pour ${color.key}`).toBeTruthy();
}
});
it('refuse une clé hors liste', () => {
// La grille se replie alors sur le gris. Le contrôle sert à empêcher qu'une
// clé fautive s'enregistre en base : elle y resterait invisible jusqu'à ce
// qu'un planning affiche une barre grise sans qu'on sache pourquoi.
expect(isAbsenceColorKey('neutral')).toBe(false);
expect(isAbsenceColorKey('')).toBe(false);
expect(isAbsenceColorKey('cp')).toBe(true);
});
});