test: guard browser agent contract mock calls

This commit is contained in:
Peter Steinberger
2026-05-12 01:56:24 +01:00
parent e07e6c77da
commit 4bde5b6dfa

View File

@@ -41,6 +41,26 @@ function expectRecordFields(value: unknown, expected: Record<string, unknown>):
}
}
type MockWithCalls = {
mock: { calls: unknown[][] };
};
function mockFirstArg(
mock: MockWithCalls,
callIndex: number,
label: string,
): Record<string, unknown> {
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<string, unknown>;
}
async function postActAndReadError(base: string, body?: unknown): Promise<ActErrorHttpResponse> {
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",