import assert from 'node:assert/strict' import { readFile } from 'node:fs/promises' import test from 'node:test' import ts from 'typescript' const source = await readFile(new URL('../src/utils/datetime.ts', import.meta.url), 'utf8') const { outputText } = ts.transpileModule(source, { compilerOptions: { target: ts.ScriptTarget.ES2022, module: ts.ModuleKind.ESNext } }) const { localDateTimeInput, collectedAtFromInput } = await import(`data:text/javascript;base64,${Buffer.from(outputText).toString('base64')}`) function timezone(t, zone) { const original = process.env.TZ process.env.TZ = zone t.after(() => { if (original === undefined) delete process.env.TZ; else process.env.TZ = original }) } test('Shanghai display uses local clock and unchanged input preserves microseconds', t => { timezone(t, 'Asia/Shanghai') const original = '2026-10-16T04:34:56.789123Z' const value = localDateTimeInput(original) assert.equal(value, '2026-10-16T12:34:56.789') assert.equal(collectedAtFromInput(value, original), original) const offsetOriginal = '2026-10-16T12:34:56.789123+08:00' assert.equal(collectedAtFromInput(value, offsetOriginal), offsetOriginal) }) test('zero milliseconds are normalized like datetime-local without losing server fractions', t => { timezone(t, 'Asia/Shanghai') const original = '2026-10-16T04:34:00.000123Z' assert.equal(localDateTimeInput(original), '2026-10-16T12:34') assert.equal(collectedAtFromInput('2026-10-16T12:34', original), original) assert.equal(localDateTimeInput('2026-10-16T04:34:56.010Z'), '2026-10-16T12:34:56.01') }) test('explicit local time changes convert to the correct UTC instant', t => { timezone(t, 'Asia/Shanghai') assert.equal(collectedAtFromInput('2026-10-16T12:35:56.789', '2026-10-16T04:34:56.789123Z'), '2026-10-16T04:35:56.789Z') assert.equal(collectedAtFromInput('2026-10-16T12:35'), '2026-10-16T04:35:00.000Z') }) test('negative UTC offsets preserve date boundaries', t => { timezone(t, 'America/Los_Angeles') const original = '2026-01-01T04:34:56.789123Z' assert.equal(localDateTimeInput(original), '2025-12-31T20:34:56.789') assert.equal(collectedAtFromInput(localDateTimeInput(original), original), original) }) test('unchanged repeated DST clock time keeps the original instant and precision', t => { timezone(t, 'America/New_York') const original = '2026-11-01T06:30:00.000123Z' assert.equal(localDateTimeInput(original), '2026-11-01T01:30') assert.equal(collectedAtFromInput('2026-11-01T01:30', original), original) }) test('UTC and invalid timestamps do not invent a collection time', t => { timezone(t, 'UTC') assert.equal(localDateTimeInput('2026-10-16T04:34:56.789Z'), '2026-10-16T04:34:56.789') assert.throws(() => localDateTimeInput('invalid')) assert.throws(() => collectedAtFromInput('')) })