70 lines
2.3 KiB
TypeScript
70 lines
2.3 KiB
TypeScript
|
|
/**
|
||
|
|
* Tests for the quick-range preset + window-shift helpers (Grafana-style).
|
||
|
|
*/
|
||
|
|
|
||
|
|
import { describe, it, expect } from 'vitest'
|
||
|
|
import { TIME_PRESETS, presetRange, shiftRange } from './mapUtils'
|
||
|
|
|
||
|
|
describe('TIME_PRESETS', () => {
|
||
|
|
it('exposes the 7 expected quick ranges in order', () => {
|
||
|
|
expect(TIME_PRESETS.map((p) => p.value)).toEqual([
|
||
|
|
'24h',
|
||
|
|
'1w',
|
||
|
|
'2w',
|
||
|
|
'1mo',
|
||
|
|
'6mo',
|
||
|
|
'1y',
|
||
|
|
'5y',
|
||
|
|
])
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
describe('presetRange', () => {
|
||
|
|
const now = new Date('2026-06-13T12:00:00Z')
|
||
|
|
|
||
|
|
it('ends at now and spans the given duration (24h)', () => {
|
||
|
|
const { start, end } = presetRange(24 * 3_600_000, now)
|
||
|
|
expect(end).toBe('2026-06-13T12:00:00Z')
|
||
|
|
expect(start).toBe('2026-06-12T12:00:00Z')
|
||
|
|
})
|
||
|
|
|
||
|
|
it('spans a week', () => {
|
||
|
|
const { start, end } = presetRange(7 * 24 * 3_600_000, now)
|
||
|
|
expect(end).toBe('2026-06-13T12:00:00Z')
|
||
|
|
expect(start).toBe('2026-06-06T12:00:00Z')
|
||
|
|
})
|
||
|
|
|
||
|
|
it('emits second-precision ISO with no milliseconds', () => {
|
||
|
|
const { start, end } = presetRange(3_600_000, now)
|
||
|
|
expect(start).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/)
|
||
|
|
expect(end).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/)
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
describe('shiftRange', () => {
|
||
|
|
it('moves a 24h window back by 24h when direction = -1', () => {
|
||
|
|
const { start, end } = shiftRange('2026-06-12T12:00:00Z', '2026-06-13T12:00:00Z', -1)
|
||
|
|
expect(start).toBe('2026-06-11T12:00:00Z')
|
||
|
|
expect(end).toBe('2026-06-12T12:00:00Z')
|
||
|
|
})
|
||
|
|
|
||
|
|
it('moves a 24h window forward by 24h when direction = +1', () => {
|
||
|
|
const { start, end } = shiftRange('2026-06-12T12:00:00Z', '2026-06-13T12:00:00Z', 1)
|
||
|
|
expect(start).toBe('2026-06-13T12:00:00Z')
|
||
|
|
expect(end).toBe('2026-06-14T12:00:00Z')
|
||
|
|
})
|
||
|
|
|
||
|
|
it('shifts by the window OWN span (a 1-week window moves a week)', () => {
|
||
|
|
const { start, end } = shiftRange('2026-06-06T12:00:00Z', '2026-06-13T12:00:00Z', -1)
|
||
|
|
expect(start).toBe('2026-05-30T12:00:00Z')
|
||
|
|
expect(end).toBe('2026-06-06T12:00:00Z')
|
||
|
|
})
|
||
|
|
|
||
|
|
it('is reversible: shift back then forward returns to the original window', () => {
|
||
|
|
const orig = { start: '2026-06-06T12:00:00Z', end: '2026-06-13T12:00:00Z' }
|
||
|
|
const back = shiftRange(orig.start, orig.end, -1)
|
||
|
|
const fwd = shiftRange(back.start, back.end, 1)
|
||
|
|
expect(fwd).toEqual(orig)
|
||
|
|
})
|
||
|
|
})
|