From f5d887638464bc464fb9809c470f7ed3c2fc89fb Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 26 Dec 2025 10:22:04 +0100 Subject: [PATCH] test: expand compaction retry coverage --- src/agents/pi-embedded-subscribe.test.ts | 76 ++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/src/agents/pi-embedded-subscribe.test.ts b/src/agents/pi-embedded-subscribe.test.ts index 9162cab46..f624466d0 100644 --- a/src/agents/pi-embedded-subscribe.test.ts +++ b/src/agents/pi-embedded-subscribe.test.ts @@ -148,4 +148,80 @@ describe("subscribeEmbeddedPiSession", () => { await waitPromise; expect(resolved).toBe(true); }); + + it("resolves after compaction ends without retry", async () => { + const listeners: Array<(evt: any) => void> = []; + const session = { + subscribe: (listener: (evt: any) => void) => { + listeners.push(listener); + return () => {}; + }, + } as any; + + const subscription = subscribeEmbeddedPiSession({ + session, + runId: "run-2", + }); + + for (const listener of listeners) { + listener({ type: "auto_compaction_start" }); + } + + let resolved = false; + const waitPromise = subscription.waitForCompactionRetry().then(() => { + resolved = true; + }); + + await Promise.resolve(); + expect(resolved).toBe(false); + + for (const listener of listeners) { + listener({ type: "auto_compaction_end", willRetry: false }); + } + + await waitPromise; + expect(resolved).toBe(true); + }); + + it("waits for multiple compaction retries before resolving", async () => { + const listeners: Array<(evt: any) => void> = []; + const session = { + subscribe: (listener: (evt: any) => void) => { + listeners.push(listener); + return () => {}; + }, + } as any; + + const subscription = subscribeEmbeddedPiSession({ + session, + runId: "run-3", + }); + + for (const listener of listeners) { + listener({ type: "auto_compaction_end", willRetry: true }); + listener({ type: "auto_compaction_end", willRetry: true }); + } + + let resolved = false; + const waitPromise = subscription.waitForCompactionRetry().then(() => { + resolved = true; + }); + + await Promise.resolve(); + expect(resolved).toBe(false); + + for (const listener of listeners) { + listener({ type: "agent_end" }); + } + + await Promise.resolve(); + expect(resolved).toBe(false); + + for (const listener of listeners) { + listener({ type: "agent_end" }); + } + + await waitPromise; + expect(resolved).toBe(true); + }); });