import {describe, expect, it} from 'vitest' import {formatIsoToDisplay, isDateInRange, isValidIso, parseDisplayToIso} from './dateFormat' describe('dateFormat', () => { describe('isValidIso', () => { it('accepts a real ISO date', () => { expect(isValidIso('2026-05-19')).toBe(true) }) it('rejects a malformed string', () => { expect(isValidIso('19/05/2026')).toBe(false) expect(isValidIso('2026-5-9')).toBe(false) expect(isValidIso('')).toBe(false) }) it('rejects an impossible date', () => { expect(isValidIso('2026-02-30')).toBe(false) expect(isValidIso('2026-13-01')).toBe(false) }) it('accepts Feb 29 on a leap year and rejects it otherwise', () => { expect(isValidIso('2024-02-29')).toBe(true) expect(isValidIso('2026-02-29')).toBe(false) }) }) describe('formatIsoToDisplay', () => { it('formats ISO to DD/MM/YYYY', () => { expect(formatIsoToDisplay('2026-05-19')).toBe('19/05/2026') }) it('returns empty string for null or invalid input', () => { expect(formatIsoToDisplay(null)).toBe('') expect(formatIsoToDisplay('nope')).toBe('') }) }) describe('parseDisplayToIso', () => { it('parses DD/MM/YYYY to ISO', () => { expect(parseDisplayToIso('19/05/2026')).toBe('2026-05-19') }) it('returns null for malformed or impossible input', () => { expect(parseDisplayToIso('2026-05-19')).toBeNull() expect(parseDisplayToIso('31/02/2026')).toBeNull() expect(parseDisplayToIso('')).toBeNull() }) }) describe('isDateInRange', () => { it('returns true when no bounds are given', () => { expect(isDateInRange('2026-05-19')).toBe(true) }) it('respects the min bound (inclusive)', () => { expect(isDateInRange('2026-05-19', '2026-05-19')).toBe(true) expect(isDateInRange('2026-05-18', '2026-05-19')).toBe(false) }) it('respects the max bound (inclusive)', () => { expect(isDateInRange('2026-05-19', undefined, '2026-05-19')).toBe(true) expect(isDateInRange('2026-05-20', undefined, '2026-05-19')).toBe(false) }) it('respects both bounds', () => { expect(isDateInRange('2026-05-15', '2026-05-10', '2026-05-20')).toBe(true) expect(isDateInRange('2026-05-25', '2026-05-10', '2026-05-20')).toBe(false) }) }) })