diff --git a/src/agents/bash-tools.process.supervisor.test.ts b/src/agents/bash-tools.process.supervisor.test.ts index 76bd5343d6f..ea725c22a60 100644 --- a/src/agents/bash-tools.process.supervisor.test.ts +++ b/src/agents/bash-tools.process.supervisor.test.ts @@ -38,15 +38,37 @@ function createBackgroundSession(id: string, pid?: number) { }); } +function requireRecord(value: unknown, label: string): Record { + if (!value || typeof value !== "object") { + throw new Error(`expected ${label}`); + } + return value as Record; +} + function expectSessionState(sessionId: string, expected: { exited?: boolean }) { - expect(getSession(sessionId)).toMatchObject(expected); + const session = requireRecord(getSession(sessionId), sessionId); + if ("exited" in expected) { + expect(session.exited).toBe(expected.exited); + } } function expectFinishedSessionState( sessionId: string, expected: { status?: string; exitSignal?: string | null }, ) { - expect(getFinishedSession(sessionId)).toMatchObject(expected); + const session = requireRecord(getFinishedSession(sessionId), sessionId); + if ("status" in expected) { + expect(session.status).toBe(expected.status); + } + if ("exitSignal" in expected) { + expect(session.exitSignal).toBe(expected.exitSignal); + } +} + +function expectTextContent(value: unknown, text: string) { + const content = requireRecord(value, "tool content"); + expect(content.type).toBe("text"); + expect(content.text).toBe(text); } describe("process tool supervisor cancellation", () => { @@ -85,10 +107,7 @@ describe("process tool supervisor cancellation", () => { expect(supervisorMock.cancel).toHaveBeenCalledWith("sess", "manual-cancel"); expectSessionState("sess", { exited: false }); - expect(result.content[0]).toMatchObject({ - type: "text", - text: "Termination requested for session sess.", - }); + expectTextContent(result.content[0], "Termination requested for session sess."); }); it("remove drops running session immediately when cancellation is requested", async () => { @@ -107,10 +126,7 @@ describe("process tool supervisor cancellation", () => { expect(supervisorMock.cancel).toHaveBeenCalledWith("sess", "manual-cancel"); expect(getSession("sess")).toBeUndefined(); expect(getFinishedSession("sess")).toBeUndefined(); - expect(result.content[0]).toMatchObject({ - type: "text", - text: "Removed session sess (termination requested).", - }); + expectTextContent(result.content[0], "Removed session sess (termination requested)."); }); it("falls back to process-tree kill when supervisor record is missing", async () => { @@ -126,10 +142,7 @@ describe("process tool supervisor cancellation", () => { expect(killProcessTreeMock).toHaveBeenCalledWith(4242); expect(getSession("sess-fallback")).toBeUndefined(); expectFinishedSessionState("sess-fallback", { status: "failed", exitSignal: "SIGKILL" }); - expect(result.content[0]).toMatchObject({ - type: "text", - text: "Killed session sess-fallback.", - }); + expectTextContent(result.content[0], "Killed session sess-fallback."); }); it("fails remove when no supervisor record and no pid is available", async () => { @@ -144,10 +157,10 @@ describe("process tool supervisor cancellation", () => { expect(killProcessTreeMock).not.toHaveBeenCalled(); expectSessionState("sess-no-pid", { exited: false }); - expect(result.details).toMatchObject({ status: "failed" }); - expect(result.content[0]).toMatchObject({ - type: "text", - text: "Unable to remove session sess-no-pid: no active supervisor run or process id.", - }); + expect(requireRecord(result.details, "result details").status).toBe("failed"); + expectTextContent( + result.content[0], + "Unable to remove session sess-no-pid: no active supervisor run or process id.", + ); }); });