File size: 2,234 Bytes
adb91eb | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | import { describe, it, expect } from 'vitest'
import { formatDateTimeSafe } from './format'
// A real, deterministic timestamp: 2023-11-14T22:13:20Z (epoch seconds 1700000000).
const REAL_SECONDS = 1_700_000_000
const REAL_ISO = '2023-11-14T22:13:20Z'
describe('formatDateTimeSafe', () => {
it('formats a valid epoch-seconds timestamp', () => {
const out = formatDateTimeSafe(REAL_SECONDS, 'en')
expect(out).toBeTruthy()
expect(out).toMatch(/2023/)
expect(out).not.toMatch(/1970|Invalid Date/)
})
it('formats a valid ISO timestamp', () => {
expect(formatDateTimeSafe(REAL_ISO, 'en')).toMatch(/2023/)
})
it('formats an ISO timestamp with an explicit timezone offset', () => {
expect(formatDateTimeSafe('2023-11-15T01:13:20+03:00', 'en')).toMatch(/2023/)
})
it('returns null for null', () => { expect(formatDateTimeSafe(null, 'en')).toBeNull() })
it('returns null for undefined', () => { expect(formatDateTimeSafe(undefined, 'en')).toBeNull() })
it('returns null for an empty string', () => { expect(formatDateTimeSafe('', 'en')).toBeNull() })
it('returns null for an invalid string', () => { expect(formatDateTimeSafe('not-a-date', 'en')).toBeNull() })
it('returns null for numeric zero', () => { expect(formatDateTimeSafe(0, 'en')).toBeNull() })
it('returns null for the 1970 epoch ISO', () => {
expect(formatDateTimeSafe('1970-01-01T00:00:00Z', 'en')).toBeNull()
})
it('returns null for a tiny placeholder epoch (e.g. 2)', () => {
expect(formatDateTimeSafe(2, 'en')).toBeNull()
})
it('returns null for a non-finite number', () => {
expect(formatDateTimeSafe(Number.NaN, 'en')).toBeNull()
expect(formatDateTimeSafe(Number.POSITIVE_INFINITY, 'en')).toBeNull()
})
it('renders a valid date in Arabic locale', () => {
const ar = formatDateTimeSafe(REAL_SECONDS, 'ar')
expect(ar).toBeTruthy()
expect(ar).not.toMatch(/1970|Invalid Date/)
// Arabic-Indic digits present (ar-SA formatting)
expect(ar).toMatch(/[٠-٩]/)
})
it('returns null in Arabic locale for an unavailable date (caller shows the AR fallback)', () => {
expect(formatDateTimeSafe(0, 'ar')).toBeNull()
expect(formatDateTimeSafe(null, 'ar')).toBeNull()
})
})
|