From a765668e6344bdf6f7de2ae43999700864a54a9c Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 12 May 2026 10:00:29 +0100 Subject: [PATCH] test: guard extension one-hit mock calls --- extensions/canvas/src/cli.test.ts | 2 +- extensions/canvas/src/tool.test.ts | 2 +- .../app-server/schema-normalization-runtime-contract.test.ts | 2 +- extensions/codex/src/app-server/user-input-bridge.test.ts | 2 +- extensions/device-pair/index.test.ts | 2 +- extensions/feishu/src/bot.broadcast.test.ts | 2 +- extensions/feishu/src/bot.test.ts | 2 +- extensions/feishu/src/card-ux-launcher.test.ts | 2 +- extensions/feishu/src/setup-surface.test.ts | 2 +- extensions/feishu/src/test-support/lifecycle-test-support.ts | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/extensions/canvas/src/cli.test.ts b/extensions/canvas/src/cli.test.ts index 06284d8f7e0..a368aae444c 100644 --- a/extensions/canvas/src/cli.test.ts +++ b/extensions/canvas/src/cli.test.ts @@ -87,7 +87,7 @@ describe("canvas CLI", () => { expect(writtenFile.filePath).toMatch(/openclaw-canvas-snapshot-.*\.png$/); expect(writtenFile.base64).toBe("aGk="); expect(runtime.log).toHaveBeenCalledTimes(1); - const mediaMessage = runtime.log.mock.calls[0]?.[0]; + const mediaMessage = runtime.log.mock.calls.at(0)?.[0]; expect(mediaMessage?.startsWith("MEDIA:")).toBe(true); expect(mediaMessage?.endsWith(".png")).toBe(true); }); diff --git a/extensions/canvas/src/tool.test.ts b/extensions/canvas/src/tool.test.ts index f66e34c9e81..29b0bd2dff7 100644 --- a/extensions/canvas/src/tool.test.ts +++ b/extensions/canvas/src/tool.test.ts @@ -83,7 +83,7 @@ describe("Canvas tool", () => { await tool.execute("tool-call-1", { action: "snapshot" }); expect(mocks.imageResultFromFile).toHaveBeenCalledTimes(1); - const imageResultParams = mocks.imageResultFromFile.mock.calls[0]?.[0] as + const imageResultParams = mocks.imageResultFromFile.mock.calls.at(0)?.[0] as | { label?: string; path?: string; diff --git a/extensions/codex/src/app-server/schema-normalization-runtime-contract.test.ts b/extensions/codex/src/app-server/schema-normalization-runtime-contract.test.ts index fa590391c58..18deeb3ab63 100644 --- a/extensions/codex/src/app-server/schema-normalization-runtime-contract.test.ts +++ b/extensions/codex/src/app-server/schema-normalization-runtime-contract.test.ts @@ -120,7 +120,7 @@ describe("Codex app-server dynamic tool schema boundary contract", () => { }); expect(request).toHaveBeenCalledTimes(1); - const [method, payload] = request.mock.calls[0] ?? []; + const [method, payload] = request.mock.calls.at(0) ?? []; if (method !== "thread/start") { throw new Error(`expected thread/start request, got ${method}`); } diff --git a/extensions/codex/src/app-server/user-input-bridge.test.ts b/extensions/codex/src/app-server/user-input-bridge.test.ts index 13718e3ffea..5cfb28af883 100644 --- a/extensions/codex/src/app-server/user-input-bridge.test.ts +++ b/extensions/codex/src/app-server/user-input-bridge.test.ts @@ -15,7 +15,7 @@ function expectFirstBlockReplyText(params: EmbeddedRunAttemptParams): string { if (onBlockReply === undefined) { throw new Error("Expected onBlockReply callback"); } - const payload = vi.mocked(onBlockReply).mock.calls[0]?.[0]; + const payload = vi.mocked(onBlockReply).mock.calls.at(0)?.[0]; if (typeof payload?.text !== "string") { throw new Error("Expected first block reply text"); } diff --git a/extensions/device-pair/index.test.ts b/extensions/device-pair/index.test.ts index e7709c387bb..1b20e89e984 100644 --- a/extensions/device-pair/index.test.ts +++ b/extensions/device-pair/index.test.ts @@ -484,7 +484,7 @@ describe("device-pair /pair qr", () => { const text = requireText(result); expect(sendMessage).toHaveBeenCalledTimes(1); - const [target, caption, opts] = sendMessage.mock.calls[0] as [ + const [target, caption, opts] = sendMessage.mock.calls.at(0) as [ string, string, { diff --git a/extensions/feishu/src/bot.broadcast.test.ts b/extensions/feishu/src/bot.broadcast.test.ts index 098daca13ef..0c8555d2f4d 100644 --- a/extensions/feishu/src/bot.broadcast.test.ts +++ b/extensions/feishu/src/bot.broadcast.test.ts @@ -301,7 +301,7 @@ describe("broadcast dispatch", () => { }, ]); expect(mockCreateFeishuReplyDispatcher).toHaveBeenCalledTimes(1); - const dispatcherParams = mockCreateFeishuReplyDispatcher.mock.calls[0]?.[0] as + const dispatcherParams = mockCreateFeishuReplyDispatcher.mock.calls.at(0)?.[0] as | { agentId?: string } | undefined; expect(dispatcherParams?.agentId).toBe("main"); diff --git a/extensions/feishu/src/bot.test.ts b/extensions/feishu/src/bot.test.ts index e65f55d0260..4475c7b46d6 100644 --- a/extensions/feishu/src/bot.test.ts +++ b/extensions/feishu/src/bot.test.ts @@ -973,7 +973,7 @@ describe("handleFeishuMessage command authorization", () => { await dispatchMessage({ cfg, event }); const after = Date.now(); - const call = mockFinalizeInboundContext.mock.calls[0]?.[0] as { Timestamp: number }; + const call = mockFinalizeInboundContext.mock.calls.at(0)?.[0] as { Timestamp: number }; expect(call.Timestamp).toBeGreaterThanOrEqual(before); expect(call.Timestamp).toBeLessThanOrEqual(after); }); diff --git a/extensions/feishu/src/card-ux-launcher.test.ts b/extensions/feishu/src/card-ux-launcher.test.ts index 2782766aded..9b13ea3aeb1 100644 --- a/extensions/feishu/src/card-ux-launcher.test.ts +++ b/extensions/feishu/src/card-ux-launcher.test.ts @@ -77,7 +77,7 @@ describe("feishu quick-action launcher", () => { expect(handled).toBe(true); expect(sendCardFeishuMock).toHaveBeenCalledTimes(1); - const sendArgs = sendCardFeishuMock.mock.calls[0]?.[0] as + const sendArgs = sendCardFeishuMock.mock.calls.at(0)?.[0] as | { accountId?: string; card?: unknown; cfg?: ClawdbotConfig; to?: string } | undefined; expect(Object.keys(sendArgs ?? {}).toSorted()).toEqual(["accountId", "card", "cfg", "to"]); diff --git a/extensions/feishu/src/setup-surface.test.ts b/extensions/feishu/src/setup-surface.test.ts index 31ed3fb97de..0cc2d9b087b 100644 --- a/extensions/feishu/src/setup-surface.test.ts +++ b/extensions/feishu/src/setup-surface.test.ts @@ -161,7 +161,7 @@ describe("feishu setup wizard", () => { expect(initAppRegistrationMock).toHaveBeenCalledWith("lark"); expect(beginAppRegistrationMock).toHaveBeenCalledWith("lark"); - const [pollOptions] = pollAppRegistrationMock.mock.calls[0] ?? []; + const [pollOptions] = pollAppRegistrationMock.mock.calls.at(0) ?? []; expect(pollOptions?.deviceCode).toBe("device-code"); expect(pollOptions?.initialDomain).toBe("lark"); expect(pollOptions?.tp).toBe("ob_cli_app"); diff --git a/extensions/feishu/src/test-support/lifecycle-test-support.ts b/extensions/feishu/src/test-support/lifecycle-test-support.ts index 76ff156c414..5b71ccfd88d 100644 --- a/extensions/feishu/src/test-support/lifecycle-test-support.ts +++ b/extensions/feishu/src/test-support/lifecycle-test-support.ts @@ -442,7 +442,7 @@ export async function setupFeishuLifecycleHandler(params: { }); const handlers: Record Promise> = {}; - for (const [key, value] of Object.entries(register.mock.calls[0]?.[0] ?? {})) { + for (const [key, value] of Object.entries(register.mock.calls.at(0)?.[0] ?? {})) { handlers[key] = value as (data: unknown) => Promise; } const handler = handlers[params.handlerKey];