Files
itinova-budget-si/client/src/lib/masseSalariale.test.ts

44 lines
1.6 KiB
TypeScript

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',
});
});
});