opsdash-app/opsdash/test/dateTime.test.ts
2026-02-09 19:25:49 +07:00

84 lines
2.2 KiB
TypeScript

import { afterEach, describe, expect, it } from 'vitest'
import {
dateTimeConfig,
getFirstDayOfWeek,
getWeekNumber,
getUserLocale,
getUserTimeZone,
getWeekdayOrder,
setUserDateTimeConfig,
} from '../src/services/dateTime'
const originalConfig = {
locale: dateTimeConfig.locale,
timeZone: dateTimeConfig.timeZone,
firstDayOfWeek: dateTimeConfig.firstDayOfWeek,
}
const originalOc = (window as any).OC
afterEach(() => {
dateTimeConfig.locale = originalConfig.locale
dateTimeConfig.timeZone = originalConfig.timeZone
dateTimeConfig.firstDayOfWeek = originalConfig.firstDayOfWeek
if (typeof originalOc === 'undefined') {
delete (window as any).OC
} else {
;(window as any).OC = originalOc
}
})
describe('dateTime config', () => {
it('sets user date time config and normalizes first day', () => {
setUserDateTimeConfig({
locale: 'de',
timeZone: 'Europe/Berlin',
firstDayOfWeek: 8,
})
expect(getUserLocale()).toBe('de')
expect(getUserTimeZone()).toBe('Europe/Berlin')
expect(getFirstDayOfWeek()).toBe(1)
})
it('prefers canonical locale from OC', () => {
dateTimeConfig.locale = ''
;(window as any).OC = {
getCanonicalLocale: () => 'fr-CA',
getLocale: () => 'fr',
getLanguage: () => 'en',
}
expect(getUserLocale()).toBe('fr-CA')
})
it('uses OC first day of week when available', () => {
dateTimeConfig.firstDayOfWeek = undefined
;(window as any).OC = {
getFirstDayOfWeek: () => 6,
}
expect(getFirstDayOfWeek()).toBe(6)
})
it('orders weekdays from configured start', () => {
dateTimeConfig.firstDayOfWeek = 1
const order = getWeekdayOrder()
expect(order[0]).toBe('Mon')
expect(order[6]).toBe('Sun')
})
it('returns week 1 for the late-december week that belongs to next week-year', () => {
setUserDateTimeConfig({
locale: 'de-DE',
firstDayOfWeek: 1,
})
const dec22 = new Date(Date.UTC(2025, 11, 22))
const dec29 = new Date(Date.UTC(2025, 11, 29))
const jan5 = new Date(Date.UTC(2026, 0, 5))
expect(getWeekNumber(dec22)).toBe(52)
expect(getWeekNumber(dec29)).toBe(1)
expect(getWeekNumber(jan5)).toBe(2)
})
})