144 lines
4.0 KiB
TypeScript
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('')
|
|
})
|
|
})
|
|
})
|