feat(api): add review day handling and dynamic campaign length

This commit is contained in:
Prad Nukala committed 2026-09-30 17:33:32 -04:00
1 parent 7e9ea8d7c2
commit 239c7013f8
9 files changed
+176 -32

No files matched your search

+16
View File
@@ -134,6 +134,8 @@ describe("the plan", () => {
expect(isRestDay(date)).toBe(false);
if (day.gate) expect(weekdayOf(date)).toBe(6);
if (day.topics) expect(weekdayOf(date)).toBeLessThan(6);
// Reviews run Mon/Tue and Thu/Fri; Wednesday and the weekend stay free.
if (day.review) expect([1, 2, 4, 5]).toContain(weekdayOf(date));
}
});
@@ -150,6 +152,20 @@ describe("the plan", () => {
expect(topicDate(999)).toBeUndefined();
});
test("a review is booked once, and no problem sits in two reviews", () => {
const issues = new Set<number>();
const problems = new Set<number>();
for (const day of Object.values(SCHEDULE)) {
if (!day.review) continue;
expect(issues.has(day.review.issue)).toBe(false);
issues.add(day.review.issue);
for (const lc of day.review.problems) {
expect(problems.has(lc)).toBe(false);
problems.add(lc);
}
}
});
test("every gate and set problem is reserved from the samplers", () => {
for (const day of Object.values(SCHEDULE)) {
for (const lc of [...(day.gate ?? []), ...(day.problems ?? [])]) {