mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-18 13:54:47 +00:00
test: tighten browser playwright tab assertions
This commit is contained in:
@@ -17,6 +17,17 @@ function page(targetId: string, url = `https://${targetId.toLowerCase()}.example
|
||||
};
|
||||
}
|
||||
|
||||
async function expectBlockedCdpEndpoint(promise: Promise<unknown>) {
|
||||
try {
|
||||
await promise;
|
||||
} catch (error) {
|
||||
expect((error as { name?: unknown }).name).toBe("BrowserCdpEndpointBlockedError");
|
||||
expect((error as { status?: unknown }).status).toBe(400);
|
||||
return;
|
||||
}
|
||||
throw new Error("expected blocked browser CDP endpoint");
|
||||
}
|
||||
|
||||
describe("browser remote profile tab ops via Playwright", () => {
|
||||
it("uses Playwright tab operations when available", async () => {
|
||||
const listPagesViaPlaywright = vi.fn(async () => [
|
||||
@@ -81,17 +92,16 @@ describe("browser remote profile tab ops via Playwright", () => {
|
||||
expect(tabs.map((tab) => tab.suggestedTargetId)).toEqual(["t1", "t2"]);
|
||||
|
||||
const labeled = await remote.labelTab("t2", "docs");
|
||||
expect(labeled).toMatchObject({
|
||||
targetId: "B",
|
||||
suggestedTargetId: "docs",
|
||||
tabId: "t2",
|
||||
label: "docs",
|
||||
});
|
||||
expect(labeled.targetId).toBe("B");
|
||||
expect(labeled.suggestedTargetId).toBe("docs");
|
||||
expect(labeled.tabId).toBe("t2");
|
||||
expect(labeled.label).toBe("docs");
|
||||
|
||||
await remote.focusTab("docs");
|
||||
expect(focusPageByTargetIdViaPlaywright).toHaveBeenCalledWith(
|
||||
expect.objectContaining({ targetId: "B" }),
|
||||
);
|
||||
const focusCall = (focusPageByTargetIdViaPlaywright.mock.calls as unknown[][])[0]?.[0] as
|
||||
| { targetId?: unknown }
|
||||
| undefined;
|
||||
expect(focusCall?.targetId).toBe("B");
|
||||
});
|
||||
|
||||
it("transfers stable aliases across a high-confidence target replacement", async () => {
|
||||
@@ -105,24 +115,30 @@ describe("browser remote profile tab ops via Playwright", () => {
|
||||
const { state, remote } = deps.createRemoteRouteHarness();
|
||||
|
||||
const first = await remote.listTabs();
|
||||
expect(first).toMatchObject([{ targetId: "A", tabId: "t1", suggestedTargetId: "t1" }]);
|
||||
expect(first).toHaveLength(1);
|
||||
expect(first[0]?.targetId).toBe("A");
|
||||
expect(first[0]?.tabId).toBe("t1");
|
||||
expect(first[0]?.suggestedTargetId).toBe("t1");
|
||||
const labeled = await remote.labelTab("t1", "form");
|
||||
expect(labeled).toMatchObject({ targetId: "A", tabId: "t1", label: "form" });
|
||||
expect(labeled.targetId).toBe("A");
|
||||
expect(labeled.tabId).toBe("t1");
|
||||
expect(labeled.label).toBe("form");
|
||||
state.profiles.get("remote")!.lastTargetId = "A";
|
||||
|
||||
currentPages = [page("B", "https://app.example/submitted")];
|
||||
|
||||
const afterSwap = await remote.listTabs();
|
||||
expect(afterSwap).toMatchObject([
|
||||
{ targetId: "B", tabId: "t1", suggestedTargetId: "form", label: "form" },
|
||||
]);
|
||||
expect(afterSwap).toHaveLength(1);
|
||||
expect(afterSwap[0]?.targetId).toBe("B");
|
||||
expect(afterSwap[0]?.tabId).toBe("t1");
|
||||
expect(afterSwap[0]?.suggestedTargetId).toBe("form");
|
||||
expect(afterSwap[0]?.label).toBe("form");
|
||||
expect(state.profiles.get("remote")?.lastTargetId).toBe("B");
|
||||
await expect(remote.ensureTabAvailable("A")).rejects.toThrow(/tab not found/i);
|
||||
await expect(remote.ensureTabAvailable("form")).resolves.toMatchObject({
|
||||
targetId: "B",
|
||||
tabId: "t1",
|
||||
label: "form",
|
||||
});
|
||||
const formTab = await remote.ensureTabAvailable("form");
|
||||
expect(formTab.targetId).toBe("B");
|
||||
expect(formTab.tabId).toBe("t1");
|
||||
expect(formTab.label).toBe("form");
|
||||
});
|
||||
|
||||
it("does not transfer aliases when target replacement is ambiguous", async () => {
|
||||
@@ -265,18 +281,9 @@ describe("browser remote profile tab ops via Playwright", () => {
|
||||
const ctx = deps.createBrowserRouteContext({ getState: () => state });
|
||||
const remote = ctx.forProfile("remote");
|
||||
|
||||
await expect(remote.listTabs()).rejects.toMatchObject({
|
||||
name: "BrowserCdpEndpointBlockedError",
|
||||
status: 400,
|
||||
});
|
||||
await expect(remote.focusTab("T1")).rejects.toMatchObject({
|
||||
name: "BrowserCdpEndpointBlockedError",
|
||||
status: 400,
|
||||
});
|
||||
await expect(remote.closeTab("T1")).rejects.toMatchObject({
|
||||
name: "BrowserCdpEndpointBlockedError",
|
||||
status: 400,
|
||||
});
|
||||
await expectBlockedCdpEndpoint(remote.listTabs());
|
||||
await expectBlockedCdpEndpoint(remote.focusTab("T1"));
|
||||
await expectBlockedCdpEndpoint(remote.closeTab("T1"));
|
||||
expect(listPagesViaPlaywright).not.toHaveBeenCalled();
|
||||
expect(focusPageByTargetIdViaPlaywright).not.toHaveBeenCalled();
|
||||
expect(closePageByTargetIdViaPlaywright).not.toHaveBeenCalled();
|
||||
|
||||
Reference in New Issue
Block a user