import { describe, it, expect } from 'vitest' import { formatDateForDisplay, formatDateForInput, parseInputDate, isValidDate, getDayName, getMonthName, } from '@/utils/dates' describe('dates.ts utilities', () => { describe('formatDateForDisplay', () => { it('formats ISO string to Swedish display format', () => { const result = formatDateForDisplay('2026-06-15') expect(result).toBe('15 juni 2026') }) it('formats Date object to Swedish display format', () => { const date = new Date('2026-06-15T00:00:00Z') const result = formatDateForDisplay(date) expect(result).toBe('15 juni 2026') }) it('handles January correctly', () => { const result = formatDateForDisplay('2026-01-01') expect(result).toBe('1 januari 2026') }) it('handles December correctly', () => { const result = formatDateForDisplay('2026-12-25') expect(result).toBe('25 december 2026') }) it('returns empty string for invalid date', () => { const result = formatDateForDisplay('invalid') expect(result).toBe('') }) }) describe('formatDateForInput', () => { it('formats ISO string to input format', () => { const result = formatDateForInput('2026-06-15') expect(result).toBe('2026-06-15') }) it('formats Date object to input format', () => { const date = new Date('2026-06-15T00:00:00Z') const result = formatDateForInput(date) expect(result).toBe('2026-06-15') }) it('pads month and day with zeros', () => { const result = formatDateForInput('2026-01-05') expect(result).toBe('2026-01-05') }) it('returns empty string for invalid date', () => { const result = formatDateForInput('invalid') expect(result).toBe('') }) }) describe('parseInputDate', () => { it('parses ISO date string to Date object', () => { const result = parseInputDate('2026-06-15') expect(result).toBeInstanceOf(Date) expect(result.toISOString()).toContain('2026-06-15') }) it('creates valid Date for valid input', () => { const result = parseInputDate('2026-06-15') expect(isValidDate(result)).toBe(true) }) }) describe('isValidDate', () => { it('returns true for valid Date object', () => { const date = new Date('2026-06-15') expect(isValidDate(date)).toBe(true) }) it('returns false for invalid Date', () => { const date = new Date('invalid') expect(isValidDate(date)).toBe(false) }) it('returns false for non-Date values', () => { expect(isValidDate('2026-06-15')).toBe(false) expect(isValidDate(20260615)).toBe(false) expect(isValidDate(null)).toBe(false) expect(isValidDate(undefined)).toBe(false) }) }) describe('getDayName', () => { it('returns Swedish day name', () => { const date = new Date('2026-06-15T00:00:00Z') // Monday const result = getDayName(date) expect(result.toLowerCase()).toBe('måndag') }) it('returns empty string for invalid date', () => { const result = getDayName(new Date('invalid')) expect(result).toBe('') }) }) describe('getMonthName', () => { it('returns Swedish month name', () => { const date = new Date('2026-06-15T00:00:00Z') const result = getMonthName(date) expect(result).toBe('juni') }) it('returns correct month names for all months', () => { const monthNames = [ 'januari', 'februari', 'mars', 'april', 'maj', 'juni', 'juli', 'augusti', 'september', 'oktober', 'november', 'december', ] monthNames.forEach((monthName, index) => { const date = new Date(`2026-${String(index + 1).padStart(2, '0')}-15T00:00:00Z`) const result = getMonthName(date) expect(result).toBe(monthName) }) }) it('returns empty string for invalid date', () => { const result = getMonthName(new Date('invalid')) expect(result).toBe('') }) }) })