From 4bde5b6dfaf1b03320c8efe63a58a14536d31baa Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 12 May 2026 01:56:24 +0100 Subject: [PATCH] test: guard browser agent contract mock calls --- .../server.agent-contract-core.test.ts | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/extensions/browser/src/browser/server.agent-contract-core.test.ts b/extensions/browser/src/browser/server.agent-contract-core.test.ts index eb21988b995..bbf67508694 100644 --- a/extensions/browser/src/browser/server.agent-contract-core.test.ts +++ b/extensions/browser/src/browser/server.agent-contract-core.test.ts @@ -41,6 +41,26 @@ function expectRecordFields(value: unknown, expected: Record): } } +type MockWithCalls = { + mock: { calls: unknown[][] }; +}; + +function mockFirstArg( + mock: MockWithCalls, + callIndex: number, + label: string, +): Record { + const call = mock.mock.calls[callIndex]; + if (!call) { + throw new Error(`expected ${label} call ${callIndex}`); + } + const value = call[0]; + if (!value || typeof value !== "object" || Array.isArray(value)) { + throw new Error(`expected ${label} call ${callIndex} argument`); + } + return value as Record; +} + async function postActAndReadError(base: string, body?: unknown): Promise { const realFetch = getBrowserTestFetch(); const response = await realFetch(`${base}/act`, { @@ -345,7 +365,7 @@ describe("browser control server", () => { }); expect(nav.ok).toBe(true); expect(typeof nav.targetId).toBe("string"); - const [navigateArgs] = pwMocks.navigateViaPlaywright.mock.calls[0] ?? []; + const navigateArgs = mockFirstArg(pwMocks.navigateViaPlaywright, 0, "navigate"); expectRecordFields(navigateArgs, { cdpUrl: state.cdpBaseUrl, targetId: "abcd1234", @@ -362,7 +382,7 @@ describe("browser control server", () => { modifiers: ["Shift"], }); expect(click.ok).toBe(true); - const [clickArgs] = pwMocks.clickViaPlaywright.mock.calls[0] ?? []; + const clickArgs = mockFirstArg(pwMocks.clickViaPlaywright, 0, "click"); expectRecordFields(clickArgs, { cdpUrl: state.cdpBaseUrl, targetId: "abcd1234", @@ -382,7 +402,7 @@ describe("browser control server", () => { }); expect(clickSelector.status).toBe(200); expect(((await clickSelector.json()) as { ok?: boolean }).ok).toBe(true); - const [clickSelectorArgs] = pwMocks.clickViaPlaywright.mock.calls[1] ?? []; + const clickSelectorArgs = mockFirstArg(pwMocks.clickViaPlaywright, 1, "click"); expectRecordFields(clickSelectorArgs, { cdpUrl: state.cdpBaseUrl, targetId: "abcd1234", @@ -403,7 +423,7 @@ describe("browser control server", () => { }); expect(clickCoords.ok).toBe(true); expect(clickCoords.url).toBe("https://example.com"); - const [clickCoordsArgs] = pwMocks.clickCoordsViaPlaywright.mock.calls[0] ?? []; + const clickCoordsArgs = mockFirstArg(pwMocks.clickCoordsViaPlaywright, 0, "click coords"); expectRecordFields(clickCoordsArgs, { cdpUrl: state.cdpBaseUrl, targetId: "abcd1234", @@ -423,7 +443,7 @@ describe("browser control server", () => { text: "", }); expect(type.ok).toBe(true); - const [typeArgs] = pwMocks.typeViaPlaywright.mock.calls[0] ?? []; + const typeArgs = mockFirstArg(pwMocks.typeViaPlaywright, 0, "type"); expectRecordFields(typeArgs, { cdpUrl: state.cdpBaseUrl, targetId: "abcd1234", @@ -441,7 +461,7 @@ describe("browser control server", () => { key: "Enter", }); expect(press.ok).toBe(true); - const [pressArgs] = pwMocks.pressKeyViaPlaywright.mock.calls[0] ?? []; + const pressArgs = mockFirstArg(pwMocks.pressKeyViaPlaywright, 0, "press"); expectRecordFields(pressArgs, { cdpUrl: state.cdpBaseUrl, targetId: "abcd1234", @@ -457,7 +477,7 @@ describe("browser control server", () => { ref: "2", }); expect(hover.ok).toBe(true); - const [hoverArgs] = pwMocks.hoverViaPlaywright.mock.calls[0] ?? []; + const hoverArgs = mockFirstArg(pwMocks.hoverViaPlaywright, 0, "hover"); expectRecordFields(hoverArgs, { cdpUrl: state.cdpBaseUrl, targetId: "abcd1234", @@ -470,7 +490,7 @@ describe("browser control server", () => { ref: "2", }); expect(scroll.ok).toBe(true); - const [scrollArgs] = pwMocks.scrollIntoViewViaPlaywright.mock.calls[0] ?? []; + const scrollArgs = mockFirstArg(pwMocks.scrollIntoViewViaPlaywright, 0, "scroll"); expectRecordFields(scrollArgs, { cdpUrl: state.cdpBaseUrl, targetId: "abcd1234", @@ -484,7 +504,7 @@ describe("browser control server", () => { endRef: "4", }); expect(drag.ok).toBe(true); - const [dragArgs] = pwMocks.dragViaPlaywright.mock.calls[0] ?? []; + const dragArgs = mockFirstArg(pwMocks.dragViaPlaywright, 0, "drag"); expectRecordFields(dragArgs, { cdpUrl: state.cdpBaseUrl, targetId: "abcd1234",