mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-18 20:34:45 +00:00
test: guard browser agent contract mock calls
This commit is contained in:
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user