Checkpoint: Ajout du module Masse salariale SANTINOVA : tables de salariés, rémunérations et évolutions manuelles sécurisées par rôle administrateur ; import contrôlé des bulletins 2025 et janvier–août 2026 ; écran tableau 2025–2027 ; tests d'autorisations, d'agrégats et des quatre états UI ; documentation des sources et de la politique d'import.
This commit is contained in:
43
client/src/lib/masseSalariale.test.ts
Normal file
43
client/src/lib/masseSalariale.test.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { getMasseSalarialeUiState, getMasseSalarialeYearSummary } from './masseSalariale';
|
||||
|
||||
describe('getMasseSalarialeUiState', () => {
|
||||
it('distingue chargement, erreur, absence de données et affichage prêt', () => {
|
||||
expect(getMasseSalarialeUiState(true, false, 0)).toBe('loading');
|
||||
expect(getMasseSalarialeUiState(false, true, 0)).toBe('error');
|
||||
expect(getMasseSalarialeUiState(false, false, 0)).toBe('empty');
|
||||
expect(getMasseSalarialeUiState(false, false, 1)).toBe('ready');
|
||||
});
|
||||
});
|
||||
|
||||
describe('getMasseSalarialeYearSummary', () => {
|
||||
const rows = [
|
||||
{ annee: 2025, salaireAnnuelBrutAvecPrimesCents: 4_000_000, statut: 'annuel' },
|
||||
{ annee: 2025, salaireAnnuelBrutAvecPrimesCents: 5_500_000, statut: 'annuel' },
|
||||
{ annee: 2026, salaireAnnuelBrutAvecPrimesCents: 2_000_000, statut: 'cumul_provisoire' },
|
||||
];
|
||||
|
||||
it('calcule le total et le statut annuel pour un exercice clôturé', () => {
|
||||
expect(getMasseSalarialeYearSummary(rows, 2025)).toEqual({
|
||||
salaryCount: 2,
|
||||
annualGrossWithBonusesCents: 9_500_000,
|
||||
status: 'annuel',
|
||||
});
|
||||
});
|
||||
|
||||
it('préserve le statut provisoire pour une année en cours', () => {
|
||||
expect(getMasseSalarialeYearSummary(rows, 2026)).toMatchObject({
|
||||
salaryCount: 1,
|
||||
annualGrossWithBonusesCents: 2_000_000,
|
||||
status: 'cumul_provisoire',
|
||||
});
|
||||
});
|
||||
|
||||
it('retourne null et non zéro pour une année sans rémunération importée', () => {
|
||||
expect(getMasseSalarialeYearSummary(rows, 2027)).toEqual({
|
||||
salaryCount: 0,
|
||||
annualGrossWithBonusesCents: null,
|
||||
status: 'empty',
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user