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