From 5940d0d4b152e8fb7afad0e220e97b71ebd2aba4 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 12 May 2026 12:55:50 +0100 Subject: [PATCH] test: dedupe codex approval gateway mock calls --- .../src/app-server/approval-bridge.test.ts | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/extensions/codex/src/app-server/approval-bridge.test.ts b/extensions/codex/src/app-server/approval-bridge.test.ts index 9efcffac8d4..b4f9d9506e0 100644 --- a/extensions/codex/src/app-server/approval-bridge.test.ts +++ b/extensions/codex/src/app-server/approval-bridge.test.ts @@ -21,13 +21,17 @@ function requireRecord(value: unknown, label: string): Record { function gatewayRequestPayload(callIndex = 0) { return requireRecord( - mockCallGatewayTool.mock.calls[callIndex]?.[2], + mockCallGatewayTool.mock.calls.at(callIndex)?.[2], `gateway request payload ${callIndex + 1}`, ); } function gatewayCallOptions(callIndex = 0) { - return mockCallGatewayTool.mock.calls[callIndex]?.[3]; + return mockCallGatewayTool.mock.calls.at(callIndex)?.[3]; +} + +function gatewayCallMethod(callIndex = 0) { + return mockCallGatewayTool.mock.calls.at(callIndex)?.[0]; } function findApprovalEvent( @@ -98,8 +102,8 @@ describe("Codex app-server approval bridge", () => { "plugin.approval.request", "plugin.approval.waitDecision", ]); - expect(mockCallGatewayTool.mock.calls[0]?.[0]).toBe("plugin.approval.request"); - expect(typeof mockCallGatewayTool.mock.calls[0]?.[1]).toBe("object"); + expect(gatewayCallMethod()).toBe("plugin.approval.request"); + expect(typeof mockCallGatewayTool.mock.calls.at(0)?.[1]).toBe("object"); const requestPayload = gatewayRequestPayload(); expect(requestPayload.pluginId).toBe("openclaw-codex-app-server"); expect(requestPayload.title).toBe("Codex app-server command approval"); @@ -168,8 +172,7 @@ describe("Codex app-server approval bridge", () => { }); expect(result).toEqual({ decision: "acceptForSession" }); - const [, , requestPayload] = mockCallGatewayTool.mock.calls[0] ?? []; - const description = (requestPayload as { description: string }).description; + const description = String(gatewayRequestPayload().description); expect(description).toContain("Command: npm install"); expect(description).toContain("Additional permissions: network, fileSystem"); expect(description).toContain("High-risk targets: network access, filesystem root"); @@ -207,8 +210,7 @@ describe("Codex app-server approval bridge", () => { turnId: "turn-1", }); - const [, , requestPayload] = mockCallGatewayTool.mock.calls[0] ?? []; - const description = (requestPayload as { description: string }).description; + const description = String(gatewayRequestPayload().description); expect(description).toContain("[preview truncated or unsafe content omitted]"); expect(description).toContain("Additional permissions: network, fileSystem"); expect(description).toContain("High-risk targets: network access, filesystem root"); @@ -261,8 +263,7 @@ describe("Codex app-server approval bridge", () => { turnId: "turn-1", }); - const [, , requestPayload] = mockCallGatewayTool.mock.calls[0] ?? []; - const description = (requestPayload as { description: string }).description; + const description = String(gatewayRequestPayload().description); expect(description).toContain( "printf '<\uff20U123> \uff3btrusted\uff3d\uff08https://evil\uff09 \uff20here'", ); @@ -372,8 +373,7 @@ describe("Codex app-server approval bridge", () => { turnId: "turn-1", }); - const [, , requestPayload] = mockCallGatewayTool.mock.calls[0] ?? []; - const description = (requestPayload as { description: string }).description; + const description = String(gatewayRequestPayload().description); expect(description).toContain("[preview truncated or unsafe content omitted]"); const omittedEvent = findApprovalEvent(params, {}); expect(omittedEvent.commandPreviewOmitted).toBe(true); @@ -610,8 +610,8 @@ describe("Codex app-server approval bridge", () => { }, scope: "turn", }); - expect(mockCallGatewayTool.mock.calls[0]?.[0]).toBe("plugin.approval.request"); - expect(typeof mockCallGatewayTool.mock.calls[0]?.[1]).toBe("object"); + expect(gatewayCallMethod()).toBe("plugin.approval.request"); + expect(typeof mockCallGatewayTool.mock.calls.at(0)?.[1]).toBe("object"); const requestPayload = gatewayRequestPayload(); expect(requestPayload.title).toBe("Codex app-server permission approval"); expect(requestPayload.toolName).toBe("codex_permission_approval"); @@ -715,8 +715,7 @@ describe("Codex app-server approval bridge", () => { }, scope: "turn", }); - const [, , requestPayload] = mockCallGatewayTool.mock.calls[0] ?? []; - const description = (requestPayload as { description: string }).description; + const description = String(gatewayRequestPayload().description); expect(description).toContain("Network enabled: true"); expect(description).toContain("File system read: ~/.ssh/id_rsa; write: /"); expect(description).toContain("entries: read /workspace/project, write /tmp/output (+1 more)"); @@ -747,8 +746,7 @@ describe("Codex app-server approval bridge", () => { turnId: "turn-1", }); - const [, , requestPayload] = mockCallGatewayTool.mock.calls[0] ?? []; - const description = (requestPayload as { description: string }).description; + const description = String(gatewayRequestPayload().description); expect(description).toContain("File system roots: ~; readPaths: ~/.ssh/id_rsa, ~/project"); expect(description).not.toContain("High-risk targets"); }); @@ -775,8 +773,7 @@ describe("Codex app-server approval bridge", () => { turnId: "turn-1", }); - const [, , requestPayload] = mockCallGatewayTool.mock.calls[0] ?? []; - const description = (requestPayload as { description: string }).description; + const description = String(gatewayRequestPayload().description); expect(description).toContain("example.com"); expect(description).toContain("safe .example.com"); expect(description).toContain("/tmp/project");