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);