Files
F-r-ldraledigplannerare/frontend/tests/unit/utils/dates.test.ts
T
2026-06-01 16:48:21 +02:00

144 lines
4.0 KiB
TypeScript

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('')
})
})
})