From da7624e32e65676413ff01ee40e585c9a4b57790 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 11 May 2026 02:20:44 +0100 Subject: [PATCH] test: tighten browser playwright tab assertions --- ....remote-profile-tab-ops.playwright.test.ts | 69 ++++++++++--------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/extensions/browser/src/browser/server-context.remote-profile-tab-ops.playwright.test.ts b/extensions/browser/src/browser/server-context.remote-profile-tab-ops.playwright.test.ts index 5ae4f3bbf9e..97c5ff961f1 100644 --- a/extensions/browser/src/browser/server-context.remote-profile-tab-ops.playwright.test.ts +++ b/extensions/browser/src/browser/server-context.remote-profile-tab-ops.playwright.test.ts @@ -17,6 +17,17 @@ function page(targetId: string, url = `https://${targetId.toLowerCase()}.example }; } +async function expectBlockedCdpEndpoint(promise: Promise) { + 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();