import assert from 'node:assert/strict' import test from 'node:test' import { isCalendarDate, isStatisticsDate, readStatisticsRange } from './statistics-range' const fallback = { from: '2026-09-01', to: '2026-09-07' } const now = Date.parse('2026-09-23T12:00:00Z') const read = (raw: string) => readStatisticsRange(new URLSearchParams(raw), fallback, now) test('календарные даты проверяются без нормализации несуществующего дня', () => { for (const date of ['2024-02-29', '2000-02-29', '2026-12-31']) assert.equal(isCalendarDate(date), true) for (const date of ['2026-02-29', '1900-02-29', '2026-04-31', '2026-13-01', '0000-01-01']) assert.equal(isCalendarDate(date), false) assert.equal(isStatisticsDate('2026-02-30T12:00:00Z'), false) assert.equal(isStatisticsDate('2026-09-01T24:00:00Z'), false) assert.equal(isStatisticsDate('2026-09-01T12:00:00'), false) }) test('пустая ссылка использует пресет, повреждённая не принимается молча', () => { assert.deepEqual(read(''), { range: fallback, error: null }) for (const raw of ['from=', 'to=2026-09-01', 'from=bad&to=bad', 'from=2026-09-01&from=2026-09-02&to=2026-09-03', 'from=2026-09-03&to=2026-09-01', 'from=2027-01-01&to=2027-01-02']) assert.ok(read(raw).error, raw) }) test('границы сравниваются по времени, date-only конец включён как в API', () => { assert.equal(read('from=2026-09-01&to=2026-09-01').error, null) const params = new URLSearchParams({ from: '2026-09-01T12:00:00+07:00', to: '2026-09-01T06:00:00Z' }) assert.equal(readStatisticsRange(params, fallback, now).error, null) params.set('to', '2026-09-01T04:00:00Z') assert.ok(readStatisticsRange(params, fallback, now).error) })