diff --git a/src/agents/openai-ws-stream.test.ts b/src/agents/openai-ws-stream.test.ts index b90caff3e74..91d59977392 100644 --- a/src/agents/openai-ws-stream.test.ts +++ b/src/agents/openai-ws-stream.test.ts @@ -29,6 +29,16 @@ import type { InputItem, ResponseCreateEvent } from "./openai-ws-types.js"; import { log } from "./pi-embedded-runner/logger.js"; import { SYSTEM_PROMPT_CACHE_BOUNDARY } from "./system-prompt-cache-boundary.js"; +function countMatching(items: readonly T[], predicate: (item: T) => boolean) { + let count = 0; + for (const item of items) { + if (predicate(item)) { + count += 1; + } + } + return count; +} + // ───────────────────────────────────────────────────────────────────────────── // Mock OpenAIWebSocketManager // ───────────────────────────────────────────────────────────────────────────── @@ -2751,7 +2761,7 @@ describe("createOpenAIWebSocketStreamFn", () => { expect(streamSimpleCalls.length).toBeGreaterThanOrEqual(1); expect(manager.closeCallCount).toBeGreaterThanOrEqual(1); - expect(events.filter((event) => event.type === "start")).toHaveLength(1); + expect(countMatching(events, (event) => event.type === "start")).toBe(1); expect(events.some((event) => event.type === "error")).toBe(false); const doneEvent = events.find((event) => event.type === "done"); expect(doneEvent?.message?.content?.[0]?.text).toBe("http fallback response"); @@ -2785,7 +2795,7 @@ describe("createOpenAIWebSocketStreamFn", () => { expect(streamSimpleCalls.length).toBeGreaterThanOrEqual(1); expect(manager.closeCallCount).toBeGreaterThanOrEqual(1); - expect(events.filter((event) => event.type === "start")).toHaveLength(1); + expect(countMatching(events, (event) => event.type === "start")).toBe(1); expect(events.some((event) => event.type === "error")).toBe(false); const doneEvent = events.find((event) => event.type === "done"); expect(doneEvent?.message?.content?.[0]?.text).toBe("http fallback response"); @@ -2820,7 +2830,7 @@ describe("createOpenAIWebSocketStreamFn", () => { expect(streamSimpleCalls).toHaveLength(0); expect(firstManager.closeCallCount).toBeGreaterThanOrEqual(1); - expect(events.filter((event) => event.type === "start")).toHaveLength(1); + expect(countMatching(events, (event) => event.type === "start")).toBe(1); const doneEvent = events.find((event) => event.type === "done"); expect(doneEvent?.message?.content?.[0]?.text).toBe("retry succeeded"); }); diff --git a/src/logging/diagnostic.test.ts b/src/logging/diagnostic.test.ts index 8fbf42f4c7d..a3f29555935 100644 --- a/src/logging/diagnostic.test.ts +++ b/src/logging/diagnostic.test.ts @@ -52,6 +52,16 @@ function flushDiagnosticEvents() { return new Promise((resolve) => setImmediate(resolve)); } +function countMatching(items: readonly T[], predicate: (item: T) => boolean) { + let count = 0; + for (const item of items) { + if (predicate(item)) { + count += 1; + } + } + return count; +} + describe("diagnostic session state pruning", () => { beforeEach(() => { vi.useFakeTimers(); @@ -691,7 +701,7 @@ describe("stuck session diagnostics threshold", () => { markDiagnosticEmbeddedRunStarted({ sessionId: "s1", sessionKey: "main" }); vi.advanceTimersByTime(16_000); - expect(events.filter((event) => event.type === "session.long_running")).toHaveLength(1); + expect(countMatching(events, (event) => event.type === "session.long_running")).toBe(1); vi.advanceTimersByTime(28_000); emitDiagnosticEvent({ @@ -702,7 +712,7 @@ describe("stuck session diagnostics threshold", () => { }); vi.advanceTimersByTime(2_000); - expect(events.filter((event) => event.type === "session.long_running")).toHaveLength(1); + expect(countMatching(events, (event) => event.type === "session.long_running")).toBe(1); } finally { unsubscribe(); } @@ -1038,14 +1048,14 @@ describe("stuck session diagnostics threshold", () => { vi.advanceTimersByTime(30_000); vi.advanceTimersByTime(90_000); - expect(events.filter((event) => event === "diagnostic.liveness.warning")).toHaveLength(1); + expect(countMatching(events, (event) => event === "diagnostic.liveness.warning")).toBe(1); vi.advanceTimersByTime(30_000); } finally { unsubscribe(); } - expect(events.filter((event) => event === "diagnostic.liveness.warning")).toHaveLength(2); + expect(countMatching(events, (event) => event === "diagnostic.liveness.warning")).toBe(2); }); it("does not start the heartbeat when diagnostics are disabled by config", () => {