38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from 'vitest'
|
|
import { format } from 'date-fns'
|
|
import { parseDateFilterInput, toDateFilterTimestamp } from './filterDates'
|
|
|
|
describe('filterDates', () => {
|
|
afterEach(() => {
|
|
vi.useRealTimers()
|
|
})
|
|
|
|
it('parses absolute ISO dates', () => {
|
|
const parsed = parseDateFilterInput('2026-04-01')
|
|
expect(parsed && format(parsed, 'yyyy-MM-dd')).toBe('2026-04-01')
|
|
})
|
|
|
|
it('parses numeric relative day phrases', () => {
|
|
const reference = new Date('2026-04-07T12:00:00Z')
|
|
const parsed = parseDateFilterInput('10 days ago', reference)
|
|
expect(parsed && format(parsed, 'yyyy-MM-dd')).toBe('2026-03-28')
|
|
})
|
|
|
|
it('parses word-based relative week phrases', () => {
|
|
const reference = new Date('2026-04-07T12:00:00Z')
|
|
const parsed = parseDateFilterInput('one week ago', reference)
|
|
expect(parsed && format(parsed, 'yyyy-MM-dd')).toBe('2026-03-31')
|
|
})
|
|
|
|
it('returns null for unsupported date phrases', () => {
|
|
expect(parseDateFilterInput('eventually')).toBeNull()
|
|
})
|
|
|
|
it('converts parsed filter values into timestamps', () => {
|
|
const reference = new Date('2026-04-07T12:00:00Z')
|
|
const timestamp = toDateFilterTimestamp('yesterday', reference)
|
|
expect(timestamp).not.toBeNull()
|
|
expect(format(new Date(timestamp!), 'yyyy-MM-dd')).toBe('2026-04-06')
|
|
})
|
|
})
|