import { describe, it, expect } from 'vitest' import { prepareDateForBackend, loadServerDate, addDaysLocal, getCurrentLocalYear, getCurrentLocalDate, getCurrentLocalTime } from './date-utils' const ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}$/ const ISO_DATETIME_REGEX = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/ const TIME_REGEX = /^\d{2}:\d{2}$/ describe('date-utils', () => { describe('prepareDateForBackend', () => { it('devuelve null si dateStr está vacío', () => { expect(prepareDateForBackend('')).toBeNull() }) it('devuelve ISO string con fecha y hora explícita', () => { const result = prepareDateForBackend('2024-06-15', '09:30') expect(result).toMatch(ISO_DATETIME_REGEX) }) it('el resultado es una fecha JavaScript válida', () => { const result = prepareDateForBackend('2024-06-15', '09:30') expect(new Date(result!).toString()).not.toBe('Invalid Date') }) it('usa 00:00 como hora por defecto', () => { const result = prepareDateForBackend('2024-06-15') expect(result).toMatch(ISO_DATETIME_REGEX) }) }) describe('loadServerDate', () => { it.each([ [null, ''], [undefined, ''], ['', ''], ])('devuelve string vacío para %s', (input, expected) => { expect(loadServerDate(input)).toBe(expected) }) it('convierte ISO UTC a formato YYYY-MM-DD', () => { const result = loadServerDate('2024-06-15T12:00:00.000Z') expect(result).toMatch(ISO_DATE_REGEX) }) it('retorna fecha plana sin modificarla', () => { expect(loadServerDate('2024-06-15')).toBe('2024-06-15') }) }) describe('addDaysLocal', () => { it('devuelve string vacío si dateStr está vacío', () => { expect(addDaysLocal('', 5)).toBe('') }) it.each([ ['2024-01-01', 1, '2024-01-02'], ['2024-01-31', 1, '2024-02-01'], ['2024-03-01', -1, '2024-02-29'], ])('suma %s + %s días = %s', (date, days, expected) => { expect(addDaysLocal(date, days)).toBe(expected) }) }) describe('getCurrentLocalYear', () => { it('devuelve 2 dígitos', () => { expect(getCurrentLocalYear()).toMatch(/^\d{2}$/) }) it('corresponde al año actual del sistema', () => { const expected = String(new Date().getFullYear()).slice(-2) expect(getCurrentLocalYear()).toBe(expected) }) }) describe('getCurrentLocalDate', () => { it('devuelve formato YYYY-MM-DD', () => { expect(getCurrentLocalDate()).toMatch(ISO_DATE_REGEX) }) }) describe('getCurrentLocalTime', () => { it('devuelve formato HH:MM', () => { expect(getCurrentLocalTime()).toMatch(TIME_REGEX) }) }) })