From 3b75bdbe3e549145ca68816681aaab0065ea9b26 Mon Sep 17 00:00:00 2001
From: Nessar
Date: Mon, 19 Oct 2026 09:52:03 +0200
Subject: [PATCH] test(planning): hold the worker until the preparation cancel
arrives
The worker reads its queue only between event-loop turns, so the
calendar preparation could finish before the cancel sent on its second
progress update arrived, and the test received a complete plan. Use the
real-worker harness hold already applied to the checkpoint cancellation
test, and cancel on the first preparation update so the hold is released.
Co-Authored-By: Claude Sonnet 5.5
---
src/app/services/leave-planner.worker.spec.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/app/services/leave-planner.worker.spec.ts b/src/app/services/leave-planner.worker.spec.ts
index 61a2423..36f1e81 100644
--- a/src/app/services/leave-planner.worker.spec.ts
+++ b/src/app/services/leave-planner.worker.spec.ts
@@ -587,8 +587,8 @@ parentPort.on('message', (data) => globalThis.self.onmessage({ data }));
);
it('stops during calendar preparation without a plan or an obligation conflict', async () => {
+ holdForCancelAtStage = 'preparation';
const stages: string[] = [];
- let preparationUpdates = 0;
const calculation = createPlanningCalculation({
horizon: { start: '2024-01-01', end: '2027-01-01' },
balances: [],
@@ -596,7 +596,7 @@ parentPort.on('message', (data) => globalThis.self.onmessage({ data }));
declaredDays: [{ date: '2024-01-02', type: 'other' }],
progress: (stage) => {
stages.push(stage);
- if (stage === 'preparation' && ++preparationUpdates === 2) calculation.cancel();
+ if (stage === 'preparation') calculation.cancel();
},
});
const outcome = await calculation.outcome;
@@ -606,7 +606,7 @@ parentPort.on('message', (data) => globalThis.self.onmessage({ data }));
});
if (outcome.kind !== 'PlanningIncomplete') return;
expect(outcome.incumbent).toBeUndefined();
- expect(preparationUpdates).toBeGreaterThanOrEqual(2);
+ expect(stages).toContain('preparation');
expect(stages).not.toContain('obligations');
expect(await calculation.explanationError).toBeUndefined();
expect(heartbeats).toBeGreaterThan(0);