mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-31 00:24:38 +00:00
test(frontend): cover local datetime parsing across timezones
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
import {
|
||||
formatDateTimeLocalInput,
|
||||
getBrowserTimeZone,
|
||||
parseDateTimeLocalInput
|
||||
} from '../format'
|
||||
|
||||
describe('formatDateTimeLocalInput', () => {
|
||||
it('round-trips a minute-precision local timestamp', () => {
|
||||
const timestamp = Math.floor(new Date(2026, 7, 30, 7, 24).getTime() / 1000)
|
||||
|
||||
expect(formatDateTimeLocalInput(timestamp)).toBe('2026-08-30T07:24')
|
||||
expect(parseDateTimeLocalInput('2026-08-30T07:24')).toBe(timestamp)
|
||||
})
|
||||
})
|
||||
|
||||
describe('parseDateTimeLocalInput', () => {
|
||||
it('uses local date components and rejects timezone-bearing values', () => {
|
||||
const expected = Math.floor(new Date(2026, 7, 30, 7, 24, 10).getTime() / 1000)
|
||||
|
||||
expect(parseDateTimeLocalInput('2026-08-30T07:24:10')).toBe(expected)
|
||||
expect(parseDateTimeLocalInput('2026-08-30T07:24:10+08:00')).toBeNull()
|
||||
expect(parseDateTimeLocalInput('2026-08-30T07:24:10Z')).toBeNull()
|
||||
})
|
||||
|
||||
it('rejects empty, malformed, and overflowing calendar values', () => {
|
||||
expect(parseDateTimeLocalInput('')).toBeNull()
|
||||
expect(parseDateTimeLocalInput('2026-08-30 07:24')).toBeNull()
|
||||
expect(parseDateTimeLocalInput('2026-02-30T07:24')).toBeNull()
|
||||
expect(parseDateTimeLocalInput('2026-08-30T24:00')).toBeNull()
|
||||
expect(parseDateTimeLocalInput('2026-08-30T07:60')).toBeNull()
|
||||
})
|
||||
|
||||
it('accepts optional seconds and fractional seconds', () => {
|
||||
const expected = Math.floor(new Date(2026, 7, 30, 7, 24, 10, 120).getTime() / 1000)
|
||||
|
||||
expect(parseDateTimeLocalInput('2026-08-30T07:24:10.12')).toBe(expected)
|
||||
})
|
||||
})
|
||||
|
||||
describe('getBrowserTimeZone', () => {
|
||||
it('returns a timezone identifier or the UTC fallback', () => {
|
||||
expect(getBrowserTimeZone()).toBeTruthy()
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user