46 lines
1.6 KiB
TypeScript
46 lines
1.6 KiB
TypeScript
import { afterEach, describe, expect, it } from 'vitest'
|
|
|
|
import {
|
|
setReservationTimeZoneProvider,
|
|
} from '@/config/reservationConfig'
|
|
import {
|
|
formatReservationDateRange,
|
|
formatReservationDateTime,
|
|
} from '@/utils/reservationFormat'
|
|
|
|
describe('reservationFormat', () => {
|
|
afterEach(() => {
|
|
setReservationTimeZoneProvider(null)
|
|
})
|
|
|
|
it('formats UTC API timestamps in the default hotel time zone', () => {
|
|
expect(formatReservationDateTime('2026-07-09T05:56:56Z')).toBe('2026-07-09 12:56:56')
|
|
})
|
|
|
|
it('formats timestamps in the selected hotel time zone', () => {
|
|
setReservationTimeZoneProvider(() => 'Asia/Tokyo')
|
|
|
|
expect(formatReservationDateTime('2026-07-09T05:56:56Z')).toBe('2026-07-09 14:56:56')
|
|
})
|
|
|
|
it('honors offsets from source timestamps before converting to hotel time', () => {
|
|
expect(formatReservationDateTime('2026-07-08T09:18:00+08:00')).toBe('2026-07-08 08:18:00')
|
|
})
|
|
|
|
it('falls back to the default hotel time zone when the selected hotel timezone is invalid', () => {
|
|
setReservationTimeZoneProvider(() => 'Invalid/Timezone')
|
|
|
|
expect(formatReservationDateTime('2026-07-09T05:56:56Z')).toBe('2026-07-09 12:56:56')
|
|
})
|
|
|
|
it('falls back safely for empty or invalid timestamps', () => {
|
|
expect(formatReservationDateTime(null)).toBe('-')
|
|
expect(formatReservationDateTime(undefined)).toBe('-')
|
|
expect(formatReservationDateTime('not-a-date')).toBe('not-a-date')
|
|
})
|
|
|
|
it('keeps hotel business date ranges as local dates without timezone conversion', () => {
|
|
expect(formatReservationDateRange('2026-07-09', '2026-07-10')).toBe('2026-07-09 / 2026-07-10')
|
|
})
|
|
})
|