Files
malio-layer-ui/app/components/malio/date/composables/dateFormat.test.ts
T
tristan 28705c8285
Release / release (push) Successful in 1m18s
fix: date year picker (#84)
| Numéro du ticket | Titre du ticket |
|------------------|-----------------|
|                  |                 |

## Description de la PR

## Modification du .env

## Check list

- [ ] Pas de régression
- [ ] TU/TI/TF rédigée
- [ ] TU/TI/TF OK
- [ ] CHANGELOG modifié

---------

Co-authored-by: admin malio <malio@yuno.malio.fr>
Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
Co-authored-by: matthieu <matthieu@yuno.malio.fr>
Reviewed-on: #84
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
2026-06-22 09:29:59 +00:00

95 lines
3.7 KiB
TypeScript

import {describe, expect, it} from 'vitest'
import {formatIsoToDisplay, isDateInRange, isMonthInRange, isValidIso, isYearInRange, 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)
})
})
describe('isMonthInRange', () => {
it('returns true when no bounds are given', () => {
expect(isMonthInRange(2026, 4)).toBe(true)
})
it('respects the min bound by month (inclusive)', () => {
expect(isMonthInRange(2026, 4, '2026-05-10')).toBe(true) // mai chevauche
expect(isMonthInRange(2026, 3, '2026-05-10')).toBe(false) // avril < mai
})
it('respects the max bound by month (inclusive)', () => {
expect(isMonthInRange(2026, 4, undefined, '2026-05-31')).toBe(true)
expect(isMonthInRange(2026, 5, undefined, '2026-05-31')).toBe(false) // juin > mai
})
it('disables months in years outside the range', () => {
expect(isMonthInRange(2025, 11, '2026-05-10')).toBe(false)
expect(isMonthInRange(2027, 0, undefined, '2026-05-31')).toBe(false)
})
})
describe('isYearInRange', () => {
it('returns true when no bounds are given', () => {
expect(isYearInRange(2026)).toBe(true)
})
it('respects the min bound by year (inclusive)', () => {
expect(isYearInRange(2026, '2026-05-10')).toBe(true)
expect(isYearInRange(2025, '2026-05-10')).toBe(false)
})
it('respects the max bound by year (inclusive)', () => {
expect(isYearInRange(2026, undefined, '2026-05-31')).toBe(true)
expect(isYearInRange(2027, undefined, '2026-05-31')).toBe(false)
})
})
})