From 699f848fc5bef39c96fc953acc7c3499232d67db Mon Sep 17 00:00:00 2001 From: William Valentin Date: Mon, 16 Feb 2026 21:59:12 -0800 Subject: [PATCH] test(companion): cover waitForIdle pre-aborted signal --- docs/plans/state.json | 11 +++++++++++ src/companion/runtimeClient.test.ts | 16 ++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/docs/plans/state.json b/docs/plans/state.json index 3845dd7..7d5dff1 100644 --- a/docs/plans/state.json +++ b/docs/plans/state.json @@ -1001,6 +1001,17 @@ ], "test_status": "pnpm test:run src/companion/runtimeClient.test.ts src/companion/platformClients.test.ts src/companion/heartbeatLoop.test.ts src/companion/platformClients.integration.test.ts + pnpm typecheck passing" }, + "companion-runtime-wait-for-idle-preaborted-signal-coverage": { + "status": "completed", + "date": "2026-02-17", + "updated": "2026-02-17", + "summary": "Added regression coverage for `waitForIdle()` with pre-aborted signals to ensure immediate, deterministic cancellation behavior when pending work exists.", + "files_modified": [ + "src/companion/runtimeClient.test.ts", + "docs/plans/state.json" + ], + "test_status": "pnpm test:run src/companion/runtimeClient.test.ts src/companion/platformClients.test.ts src/companion/heartbeatLoop.test.ts src/companion/platformClients.integration.test.ts + pnpm typecheck passing" + }, "browser-tools-activation-clarity": { "status": "completed", "date": "2026-02-17", diff --git a/src/companion/runtimeClient.test.ts b/src/companion/runtimeClient.test.ts index 15f9111..1dd01c4 100644 --- a/src/companion/runtimeClient.test.ts +++ b/src/companion/runtimeClient.test.ts @@ -790,6 +790,22 @@ describe('CompanionRuntimeClient', () => { await pendingWait; }); + it('waitForIdle rejects immediately when signal is already aborted', async () => { + const client = new CompanionRuntimeClient({ + url: 'ws://127.0.0.1:1', + }); + const pendingWait = client.waitForEvent('agent.stream', { timeoutMs: 10_000 }).catch(() => undefined); + const controller = new AbortController(); + controller.abort(); + + await expect( + client.waitForIdle({ timeoutMs: 10_000, signal: controller.signal }), + ).rejects.toThrow('Aborted while waiting for runtime idle state'); + + client.clearEventSubscriptions(); + await pendingWait; + }); + it('connects and performs node registration + capability discovery', async () => { if (!LISTEN_ALLOWED) { return;