import assert from 'node:assert/strict'; import { test } from 'node:test'; import { isSnoozeActive, nextTimeAtHour, SNOOZE_INDEFINITE } from './snooze'; test('isSnoozeActive: future instant is active, past/zero is not', () => { const now = 1_000_000; assert.equal(isSnoozeActive(now + 1, now), true); assert.equal(isSnoozeActive(now, now), false); assert.equal(isSnoozeActive(now - 1, now), false); assert.equal(isSnoozeActive(0, now), false); }); test('isSnoozeActive: SNOOZE_INDEFINITE stays active far into the future', () => { const farFuture = Date.UTC(2100, 0, 1); assert.equal(isSnoozeActive(SNOOZE_INDEFINITE, farFuture), true); }); test('nextTimeAtHour: picks today when the hour is still ahead', () => { const now = new Date(2026, 0, 5, 6, 30).getTime(); // 06:30 local const target = nextTimeAtHour(8, now); const d = new Date(target); assert.equal(d.getHours(), 8); assert.equal(d.getMinutes(), 0); assert.equal(d.getDate(), 5); // still today assert.ok(target > now); }); test('nextTimeAtHour: rolls to tomorrow when the hour has passed', () => { const now = new Date(2026, 0, 5, 9, 0).getTime(); // 09:00 local, past 08:00 const target = nextTimeAtHour(8, now); const d = new Date(target); assert.equal(d.getHours(), 8); assert.equal(d.getDate(), 6); // tomorrow }); test('nextTimeAtHour: exactly at the hour rolls to tomorrow (soonest future)', () => { const now = new Date(2026, 0, 5, 8, 0).getTime(); // exactly 08:00 const target = nextTimeAtHour(8, now); assert.equal(new Date(target).getDate(), 6); });