import assert from "node:assert/strict"; import test from "node:test"; import { DECLARED_PERIOD_RANGES, declaredClockRange, declaredClockRangeFromProfile, declaredWindowProbeClocks, matchingDeclaredPeriod, } from "../src/lib/declared-birth-window.ts"; test("evening probes stay inside the declared range and are not the midpoint", () => { const range = DECLARED_PERIOD_RANGES.evening; const clocks = declaredWindowProbeClocks(range.startTime, range.endTime); assert.deepEqual(clocks, ["18:00", "19:40", "21:19", "22:59"]); assert.equal(clocks.includes("20:29"), false); assert.equal(clocks.includes("20:30"), false); assert.equal(clocks.includes("12:00"), false); assert.equal(clocks.includes("00:00"), false); }); test("unknown-day probes keep midnight as a sample, not as a birth minute", () => { const range = declaredClockRange({ source: "unknown" }); assert.ok(range); const clocks = declaredWindowProbeClocks(range.startTime, range.endTime); assert.equal(clocks[0], "00:00"); assert.equal(clocks.at(-1), "23:59"); assert.equal(clocks.length, 4); }); test("period_only without a period cannot invent a clock range", () => { assert.equal(declaredClockRange({ source: "period_only" }), null); assert.deepEqual( declaredClockRange({ source: "period_only", period: "evening" }), DECLARED_PERIOD_RANGES.evening, ); }); test("a custom start and end clock beats a leftover afternoon bucket", () => { assert.deepEqual( declaredClockRange({ source: "period_only", period: "afternoon", startTime: "14:30", endTime: "15:00", }), { label: "14:30—15:00", startTime: "14:30", endTime: "15:00" }, ); assert.equal(matchingDeclaredPeriod("14:30", "15:00"), null); assert.equal(matchingDeclaredPeriod("12:00", "17:59"), "afternoon"); assert.equal( declaredClockRange({ source: "period_only", startTime: "14:30", endTime: "14:30", }), null, ); assert.deepEqual( declaredClockRange({ source: "period_only", startTime: "23:00", endTime: "03:59", }), { label: "23:00—03:59", startTime: "23:00", endTime: "03:59" }, ); }); test("profile readers prefer declared window clocks over the period bucket", () => { assert.deepEqual( declaredClockRangeFromProfile({ birth_time_source: "period_only", birth_time_period: "afternoon", declared_window_start: "14:30", declared_window_end: "15:00", }), { label: "14:30—15:00", startTime: "14:30", endTime: "15:00" }, ); assert.deepEqual( declaredClockRangeFromProfile({ birthTimeSource: "period_only", birthTimePeriod: "evening", }), DECLARED_PERIOD_RANGES.evening, ); });