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()
  })
})