import { describe, expect, it } from 'vitest' import { formatDateFr, todayIso } from '../date' describe('todayIso', () => { it('formate la date locale en YYYY-MM-DD (zero-pad mois/jour)', () => { // 7 mars 2026 (heure locale) -> '2026-03-07'. expect(todayIso(new Date(2026, 2, 7, 10, 30))).toBe('2026-03-07') }) it('utilise les composantes LOCALES, pas UTC (pas de decalage de minuit)', () => { // 18 juin 2026 23:30 heure locale : la date locale reste le 18 meme si // toISOString() (UTC) basculerait au 19 selon le fuseau. expect(todayIso(new Date(2026, 5, 18, 23, 30))).toBe('2026-06-18') }) it('gere le dernier jour de l\'annee', () => { expect(todayIso(new Date(2026, 11, 31, 12, 0))).toBe('2026-12-31') }) }) describe('formatDateFr', () => { it('formate un datetime ISO avec offset en JJ-MM-AAAA', () => { expect(formatDateFr('2026-06-17T09:12:00+02:00')).toBe('17-06-2026') }) it('lit la date dans la CHAINE, sans decalage de fuseau (deterministe)', () => { // Minuit UTC : une lecture via new Date().getDate() basculerait au 4 dans un // fuseau negatif (ex. America). On lit la chaine -> reste le 05 partout. expect(formatDateFr('2026-01-05T00:00:00Z')).toBe('05-01-2026') // Idem juste avant minuit avec offset +02:00 : la date affichee est celle // portee par la chaine (17), pas le 16 d'un runtime UTC. expect(formatDateFr('2026-06-17T00:30:00+02:00')).toBe('17-06-2026') }) it('accepte une date nue YYYY-MM-DD', () => { expect(formatDateFr('2026-03-07')).toBe('07-03-2026') }) it('renvoie une chaine vide pour une valeur absente ou non ISO', () => { expect(formatDateFr(null)).toBe('') expect(formatDateFr(undefined)).toBe('') expect(formatDateFr('pas-une-date')).toBe('') }) })