mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 15:20:45 +00:00
170 lines
3.7 KiB
TypeScript
170 lines
3.7 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import {
|
|
callQaBrowserRequest,
|
|
qaBrowserAct,
|
|
qaBrowserOpenTab,
|
|
qaBrowserSnapshot,
|
|
waitForQaBrowserReady,
|
|
} from "./browser-runtime.js";
|
|
|
|
function createEnv() {
|
|
return {
|
|
gateway: {
|
|
call: vi.fn(async () => ({ ok: true })),
|
|
},
|
|
};
|
|
}
|
|
|
|
describe("browser-runtime", () => {
|
|
it("sends normalized browser.request payloads through the gateway", async () => {
|
|
const env = createEnv();
|
|
|
|
const result = await callQaBrowserRequest(env, {
|
|
method: "GET",
|
|
path: "/snapshot",
|
|
query: {
|
|
format: "ai",
|
|
targetId: "tab-1",
|
|
skip: undefined,
|
|
limit: 50,
|
|
},
|
|
timeoutMs: 12_345,
|
|
});
|
|
|
|
expect(result).toEqual({ ok: true });
|
|
expect(env.gateway.call).toHaveBeenCalledWith(
|
|
"browser.request",
|
|
{
|
|
method: "GET",
|
|
path: "/snapshot",
|
|
query: {
|
|
format: "ai",
|
|
targetId: "tab-1",
|
|
limit: "50",
|
|
},
|
|
body: undefined,
|
|
timeoutMs: 12_345,
|
|
},
|
|
{ timeoutMs: 12_345 },
|
|
);
|
|
});
|
|
|
|
it("opens tabs through the browser proxy", async () => {
|
|
const env = createEnv();
|
|
|
|
await qaBrowserOpenTab(env, {
|
|
url: "http://127.0.0.1:43124/control-ui/chat?session=test",
|
|
profile: "openclaw",
|
|
});
|
|
|
|
expect(env.gateway.call).toHaveBeenCalledWith(
|
|
"browser.request",
|
|
{
|
|
method: "POST",
|
|
path: "/tabs/open",
|
|
query: {
|
|
profile: "openclaw",
|
|
},
|
|
body: {
|
|
url: "http://127.0.0.1:43124/control-ui/chat?session=test",
|
|
},
|
|
timeoutMs: 20_000,
|
|
},
|
|
{ timeoutMs: 20_000 },
|
|
);
|
|
});
|
|
|
|
it("captures snapshots with query options", async () => {
|
|
const env = createEnv();
|
|
|
|
await qaBrowserSnapshot(env, {
|
|
targetId: "tab-1",
|
|
interactive: true,
|
|
labels: true,
|
|
maxChars: 4_000,
|
|
});
|
|
|
|
expect(env.gateway.call).toHaveBeenCalledWith(
|
|
"browser.request",
|
|
{
|
|
method: "GET",
|
|
path: "/snapshot",
|
|
query: {
|
|
targetId: "tab-1",
|
|
format: "ai",
|
|
interactive: "true",
|
|
labels: "true",
|
|
maxChars: "4000",
|
|
},
|
|
body: undefined,
|
|
timeoutMs: 20_000,
|
|
},
|
|
{ timeoutMs: 20_000 },
|
|
);
|
|
});
|
|
|
|
it("runs browser act requests through /act", async () => {
|
|
const env = createEnv();
|
|
|
|
await qaBrowserAct(env, {
|
|
profile: "openclaw",
|
|
request: {
|
|
kind: "type",
|
|
ref: "12",
|
|
text: "hello",
|
|
submit: true,
|
|
},
|
|
timeoutMs: 9_000,
|
|
});
|
|
|
|
expect(env.gateway.call).toHaveBeenCalledWith(
|
|
"browser.request",
|
|
{
|
|
method: "POST",
|
|
path: "/act",
|
|
query: {
|
|
profile: "openclaw",
|
|
},
|
|
body: {
|
|
kind: "type",
|
|
ref: "12",
|
|
text: "hello",
|
|
submit: true,
|
|
},
|
|
timeoutMs: 9_000,
|
|
},
|
|
{ timeoutMs: 9_000 },
|
|
);
|
|
});
|
|
|
|
it("waits until browser control reports a ready profile", async () => {
|
|
const env = createEnv();
|
|
env.gateway.call = vi
|
|
.fn()
|
|
.mockResolvedValueOnce({ enabled: true, running: false, cdpReady: false })
|
|
.mockResolvedValueOnce({ enabled: true, running: true, cdpReady: true });
|
|
|
|
const status = await waitForQaBrowserReady(env, {
|
|
profile: "user",
|
|
timeoutMs: 5_000,
|
|
intervalMs: 1,
|
|
});
|
|
|
|
expect(status).toEqual({ enabled: true, running: true, cdpReady: true });
|
|
expect(env.gateway.call).toHaveBeenNthCalledWith(
|
|
1,
|
|
"browser.request",
|
|
{
|
|
method: "GET",
|
|
path: "/",
|
|
query: {
|
|
profile: "user",
|
|
},
|
|
body: undefined,
|
|
timeoutMs: 5_000,
|
|
},
|
|
{ timeoutMs: 5_000 },
|
|
);
|
|
});
|
|
});
|