fix(browser): cover cdp attach fallbacks
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { describe, expect, test } from "bun:test";
|
||||
import { pickElectronTarget } from "@oh-my-pi/pi-coding-agent/tools/browser/attach";
|
||||
import { normalizeConnectedCdpUrl } from "@oh-my-pi/pi-coding-agent/tools/browser/registry";
|
||||
import type { Browser, Page, Target } from "puppeteer-core";
|
||||
|
||||
interface FakePageOptions {
|
||||
@@ -36,4 +37,33 @@ describe("pickElectronTarget", () => {
|
||||
await expect(pickElectronTarget(browser, "google")).resolves.toBe(page);
|
||||
expect(pagesCalled).toBe(false);
|
||||
});
|
||||
|
||||
test("falls back to browser.pages when discovered targets have no usable page", async () => {
|
||||
const page = fakePage({ url: "https://example.com/", title: "Example" });
|
||||
const browser = {
|
||||
targets: () => [fakeTarget("browser", null), fakeTarget("service_worker", null)],
|
||||
pages: async () => [page],
|
||||
} as unknown as Browser;
|
||||
|
||||
await expect(pickElectronTarget(browser)).resolves.toBe(page);
|
||||
});
|
||||
|
||||
test("reports available pages when the matcher misses", async () => {
|
||||
const page = fakePage({ url: "https://example.com/", title: "Example" });
|
||||
const browser = {
|
||||
targets: () => [fakeTarget("page", page)],
|
||||
pages: async () => [],
|
||||
} as unknown as Browser;
|
||||
|
||||
await expect(pickElectronTarget(browser, "missing")).rejects.toThrow(
|
||||
'No page target matched "missing". Available pages:\n- Example https://example.com/',
|
||||
);
|
||||
});
|
||||
|
||||
test("rejects websocket cdp_url values with an actionable diagnostic", () => {
|
||||
expect(() => normalizeConnectedCdpUrl("ws://127.0.0.1:9222/devtools/browser/id")).toThrow(
|
||||
"browser app.cdp_url must be the HTTP CDP discovery endpoint",
|
||||
);
|
||||
expect(normalizeConnectedCdpUrl("http://127.0.0.1:9222/")).toBe("http://127.0.0.1:9222");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user