From cce9a9ef2abdc55be6ef9b649c5436aa4252ef1c Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 12 May 2026 10:10:50 +0100 Subject: [PATCH] test: guard mixed extension mock calls --- extensions/mattermost/src/mattermost/client.retry.test.ts | 2 +- extensions/mattermost/src/mattermost/monitor-websocket.test.ts | 2 +- extensions/mattermost/src/setup.test.ts | 2 +- extensions/memory-core/src/dreaming.test.ts | 2 +- extensions/memory-core/src/memory/manager-search.test.ts | 2 +- extensions/memory-lancedb/index.test.ts | 2 +- extensions/memory-wiki/index.test.ts | 2 +- extensions/nextcloud-talk/src/send.cfg-threading.test.ts | 2 +- extensions/ollama/src/stream-runtime.test.ts | 2 +- extensions/ollama/src/wsl2-crash-loop-check.test.ts | 2 +- extensions/openrouter/index.test.ts | 2 +- extensions/openrouter/media-understanding-provider.test.ts | 2 +- extensions/qa-lab/src/suite-runtime-flow.test.ts | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/extensions/mattermost/src/mattermost/client.retry.test.ts b/extensions/mattermost/src/mattermost/client.retry.test.ts index d8324f3491f..142f4487b7e 100644 --- a/extensions/mattermost/src/mattermost/client.retry.test.ts +++ b/extensions/mattermost/src/mattermost/client.retry.test.ts @@ -93,7 +93,7 @@ describe("createMattermostDirectChannelWithRetry", () => { expect(result.id).toBe("dm-channel-456"); expect(mockFetch).toHaveBeenCalledTimes(2); expect(onRetry).toHaveBeenCalledTimes(1); - const retryCall = onRetry.mock.calls[0]; + const retryCall = onRetry.mock.calls.at(0); expect(retryCall?.[0]).toBe(1); expect(retryCall?.[1]).toBeGreaterThanOrEqual(10); expect(retryCall?.[1]).toBeLessThanOrEqual(20); diff --git a/extensions/mattermost/src/mattermost/monitor-websocket.test.ts b/extensions/mattermost/src/mattermost/monitor-websocket.test.ts index ace9f97f7b2..53e0558d472 100644 --- a/extensions/mattermost/src/mattermost/monitor-websocket.test.ts +++ b/extensions/mattermost/src/mattermost/monitor-websocket.test.ts @@ -236,7 +236,7 @@ describe("mattermost websocket monitor", () => { post_id: "post-1", emoji_name: "thumbsup", }); - const payload = onReaction.mock.calls[0]?.[0]; + const payload = onReaction.mock.calls.at(0)?.[0]; expect(payload).toEqual({ event: "reaction_added", data: { reaction }, diff --git a/extensions/mattermost/src/setup.test.ts b/extensions/mattermost/src/setup.test.ts index cb7e179a459..2b4082a817a 100644 --- a/extensions/mattermost/src/setup.test.ts +++ b/extensions/mattermost/src/setup.test.ts @@ -246,7 +246,7 @@ describe("mattermost setup", () => { } expect(registerHttpRoute).toHaveBeenCalledTimes(1); - const [route] = registerHttpRoute.mock.calls[0] ?? []; + const [route] = registerHttpRoute.mock.calls.at(0) ?? []; expect(route?.path).toBe("/api/channels/mattermost/command"); expect(route?.auth).toBe("plugin"); expect(typeof route?.handler).toBe("function"); diff --git a/extensions/memory-core/src/dreaming.test.ts b/extensions/memory-core/src/dreaming.test.ts index e5eee00c959..7bbc65968f4 100644 --- a/extensions/memory-core/src/dreaming.test.ts +++ b/extensions/memory-core/src/dreaming.test.ts @@ -2249,7 +2249,7 @@ describe("short-term dreaming trigger", () => { const dreamsText = await fs.readFile(path.join(workspaceDir, "DREAMS.md"), "utf-8"); expect(dreamsText).toContain("A diary entry."); }); - expect(subagent.run.mock.calls[0]?.[0]?.model).toBe("anthropic/claude-sonnet-4-6"); + expect(subagent.run.mock.calls.at(0)?.[0]?.model).toBe("anthropic/claude-sonnet-4-6"); }); it("skips dreaming promotion cleanly when limit is zero", async () => { diff --git a/extensions/memory-core/src/memory/manager-search.test.ts b/extensions/memory-core/src/memory/manager-search.test.ts index 4360f97b946..3cfa5efb914 100644 --- a/extensions/memory-core/src/memory/manager-search.test.ts +++ b/extensions/memory-core/src/memory/manager-search.test.ts @@ -411,7 +411,7 @@ describe("searchKeyword FTS MATCH fallback", () => { }); expect(warnSpy).toHaveBeenCalledTimes(1); - const [warning] = warnSpy.mock.calls[0] ?? []; + const [warning] = warnSpy.mock.calls.at(0) ?? []; expect(typeof warning).toBe("string"); expect( (warning as string | undefined)?.startsWith( diff --git a/extensions/memory-lancedb/index.test.ts b/extensions/memory-lancedb/index.test.ts index 780d1b4a5bf..707f5a1bcd4 100644 --- a/extensions/memory-lancedb/index.test.ts +++ b/extensions/memory-lancedb/index.test.ts @@ -448,7 +448,7 @@ describe("memory plugin e2e", () => { expect(providerOptions.provider).toBe("openai"); expect(providerOptions.fallback).toBe("none"); expect(providerOptions.model).toBe("text-embedding-3-small"); - expect(createProvider.mock.calls[0][0]).not.toHaveProperty("remote"); + expect(createProvider.mock.calls.at(0)?.[0]).not.toHaveProperty("remote"); expect(embedQuery).toHaveBeenCalledWith("project memory"); } finally { vi.doUnmock("openclaw/plugin-sdk/memory-core-host-engine-embeddings"); diff --git a/extensions/memory-wiki/index.test.ts b/extensions/memory-wiki/index.test.ts index c8d54d93587..d8592ae2c8f 100644 --- a/extensions/memory-wiki/index.test.ts +++ b/extensions/memory-wiki/index.test.ts @@ -49,7 +49,7 @@ describe("memory-wiki plugin", () => { "wiki_get", ]); expect(registerCli).toHaveBeenCalledTimes(1); - expect(registerCli.mock.calls[0]?.[1]).toStrictEqual({ + expect(registerCli.mock.calls.at(0)?.[1]).toStrictEqual({ descriptors: [ { name: "wiki", diff --git a/extensions/nextcloud-talk/src/send.cfg-threading.test.ts b/extensions/nextcloud-talk/src/send.cfg-threading.test.ts index 0c41c7efe46..65a4ca038dc 100644 --- a/extensions/nextcloud-talk/src/send.cfg-threading.test.ts +++ b/extensions/nextcloud-talk/src/send.cfg-threading.test.ts @@ -270,7 +270,7 @@ describe("nextcloud-talk send cfg threading", () => { accountId: "work", }); expect(result?.receipt.platformMessageIds).toEqual(["22346"]); - const mediaSendCall = fetchMock.mock.calls[1]; + const mediaSendCall = fetchMock.mock.calls.at(1); expect(mediaSendCall?.[0]).toBe( "https://nextcloud.example.com/ocs/v2.php/apps/spreed/api/v1/bot/abc123/message", ); diff --git a/extensions/ollama/src/stream-runtime.test.ts b/extensions/ollama/src/stream-runtime.test.ts index c58474bb9e4..920ce386c04 100644 --- a/extensions/ollama/src/stream-runtime.test.ts +++ b/extensions/ollama/src/stream-runtime.test.ts @@ -1205,7 +1205,7 @@ function createControlledNdjsonFetch(): { } function getGuardedFetchCall(fetchMock: typeof fetchWithSsrFGuardMock): GuardedFetchCall { - return (fetchMock.mock.calls[0]?.[0] as GuardedFetchCall | undefined) ?? { url: "" }; + return (fetchMock.mock.calls.at(0)?.[0] as GuardedFetchCall | undefined) ?? { url: "" }; } async function createOllamaTestStream(params: { diff --git a/extensions/ollama/src/wsl2-crash-loop-check.test.ts b/extensions/ollama/src/wsl2-crash-loop-check.test.ts index 78ebc7b6562..02d8a41116f 100644 --- a/extensions/ollama/src/wsl2-crash-loop-check.test.ts +++ b/extensions/ollama/src/wsl2-crash-loop-check.test.ts @@ -119,7 +119,7 @@ describe("wsl2 crash-loop check", () => { await checkWsl2CrashLoopRisk(logger); expect(logger.warn).toHaveBeenCalledTimes(1); - const message = String(logger.warn.mock.calls[0]?.[0]); + const message = String(logger.warn.mock.calls.at(0)?.[0]); expect(message).toContain("WSL2 crash-loop risk"); expect(message).toContain("sudo systemctl disable ollama"); expect(message).toContain("autoMemoryReclaim=disabled"); diff --git a/extensions/openrouter/index.test.ts b/extensions/openrouter/index.test.ts index 350af53205f..f3fcc8e3f96 100644 --- a/extensions/openrouter/index.test.ts +++ b/extensions/openrouter/index.test.ts @@ -224,7 +224,7 @@ describe("openrouter provider hooks", () => { ); expect(baseStreamFn).toHaveBeenCalledOnce(); - const firstCall = baseStreamFn.mock.calls[0]; + const firstCall = baseStreamFn.mock.calls.at(0); const firstModel = firstCall?.[0]; const compat = (firstModel as { compat?: { openRouterRouting?: { order?: unknown } } }).compat; expect(compat?.openRouterRouting?.order).toEqual(["moonshot"]); diff --git a/extensions/openrouter/media-understanding-provider.test.ts b/extensions/openrouter/media-understanding-provider.test.ts index 91b382f28d2..4463f6cbaa5 100644 --- a/extensions/openrouter/media-understanding-provider.test.ts +++ b/extensions/openrouter/media-understanding-provider.test.ts @@ -90,7 +90,7 @@ describe("openrouter media understanding provider", () => { }, }), ); - const headers = postJsonRequestMock.mock.calls[0]?.[0]?.headers as Headers; + const headers = postJsonRequestMock.mock.calls.at(0)?.[0]?.headers as Headers; expect(headers.get("authorization")).toBe("Bearer sk-openrouter"); expect(headers.get("http-referer")).toBe("https://openclaw.ai"); expect(headers.get("x-openrouter-title")).toBe("OpenClaw"); diff --git a/extensions/qa-lab/src/suite-runtime-flow.test.ts b/extensions/qa-lab/src/suite-runtime-flow.test.ts index c4275659789..3b44a92fce9 100644 --- a/extensions/qa-lab/src/suite-runtime-flow.test.ts +++ b/extensions/qa-lab/src/suite-runtime-flow.test.ts @@ -227,7 +227,7 @@ describe("qa suite runtime flow", () => { expect(result).toEqual({ api: "ok" }); expect(createQaScenarioRuntimeApi).toHaveBeenCalledTimes(1); - const call = createQaScenarioRuntimeApi.mock.calls[0]?.[0] as { + const call = createQaScenarioRuntimeApi.mock.calls.at(0)?.[0] as { env: typeof env; scenario: typeof scenario; deps: {