From 9b52daf59546849fdc4e6b15d4c4feaab3f4d36e Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 12 May 2026 20:47:24 +0100 Subject: [PATCH] test: dedupe diffs browser mock reads --- extensions/diffs/src/browser.test.ts | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/extensions/diffs/src/browser.test.ts b/extensions/diffs/src/browser.test.ts index d49a7b5d4a6..a4183ac21b8 100644 --- a/extensions/diffs/src/browser.test.ts +++ b/extensions/diffs/src/browser.test.ts @@ -22,6 +22,17 @@ vi.mock("playwright-core", () => ({ }, })); +function firstMockCall( + mock: { mock: { calls: Array } }, + label: string, +): readonly unknown[] { + const call = mock.mock.calls[0]; + if (!call) { + throw new Error(`expected ${label} call`); + } + return call; +} + afterAll(() => { vi.doUnmock("playwright-core"); vi.resetModules(); @@ -128,7 +139,9 @@ describe("PlaywrightDiffScreenshotter", () => { expect(launchMock).toHaveBeenCalledTimes(1); expect(pages).toHaveLength(1); expect(pages[0]?.pdf).toHaveBeenCalledTimes(1); - const pdfCall = pages[0]?.pdf.mock.calls.at(0)?.[0] as Record | undefined; + const pdfCall = firstMockCall(pages[0]?.pdf, "PDF render")[0] as + | Record + | undefined; if (!pdfCall) { throw new Error("expected PDF render call"); } @@ -404,9 +417,12 @@ describe("diffs plugin registration", () => { registerDiffsPlugin(api as unknown as OpenClawPluginApi); expect(on).toHaveBeenCalledTimes(1); - expect(on.mock.calls.at(0)?.[0]).toBe("before_prompt_build"); - const beforePromptBuild = on.mock.calls.at(0)?.[1]; - const promptResult = await beforePromptBuild?.({}, {}); + const [hookName, beforePromptBuild] = firstMockCall(on, "plugin hook registration"); + expect(hookName).toBe("before_prompt_build"); + if (typeof beforePromptBuild !== "function") { + throw new Error("expected before_prompt_build callback"); + } + const promptResult = await beforePromptBuild({}, {}); expect(promptResult?.prependSystemContext).toBe( [ "When you need to show edits as a real diff, prefer the `diffs` tool instead of writing a manual summary.",