8ed6118b9a
Users pick a clock range instead of a coarse period plus notes, so rectification and window consult scan that range instead of a leftover afternoon bucket. Co-authored-by: Cursor <cursoragent@cursor.com>
88 lines
2.7 KiB
TypeScript
88 lines
2.7 KiB
TypeScript
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,
|
|
);
|
|
});
|