From 2c39165453e9aaa915e2ade919eea663fa134463 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 11 May 2026 02:38:22 +0100 Subject: [PATCH] test: tighten browser basic route assertions --- .../routes/basic.existing-session.test.ts | 89 ++++++++++--------- 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/extensions/browser/src/browser/routes/basic.existing-session.test.ts b/extensions/browser/src/browser/routes/basic.existing-session.test.ts index a955e4683a2..d1f2641b678 100644 --- a/extensions/browser/src/browser/routes/basic.existing-session.test.ts +++ b/extensions/browser/src/browser/routes/basic.existing-session.test.ts @@ -128,6 +128,13 @@ async function callStartRoute(params: { return { response, ensureBrowserAvailable }; } +function responseBodyRecord(response: { body: unknown }): Record { + if (!response.body || typeof response.body !== "object") { + throw new Error("expected JSON response body"); + } + return response.body as Record; +} + describe("basic browser routes", () => { it("reports Linux no-display headless fallback for local managed profiles", async () => { const originalPlatform = process.platform; @@ -143,11 +150,10 @@ describe("basic browser routes", () => { }); expect(response.statusCode).toBe(200); - expect(response.body).toMatchObject({ - profile: "openclaw", - headless: true, - headlessSource: "linux-display-fallback", - }); + const body = responseBodyRecord(response); + expect(body.profile).toBe("openclaw"); + expect(body.headless).toBe(true); + expect(body.headlessSource).toBe("linux-display-fallback"); } finally { Object.defineProperty(process, "platform", { value: originalPlatform }); if (originalDisplay === undefined) { @@ -186,13 +192,12 @@ describe("basic browser routes", () => { }); expect(response.statusCode).toBe(200); - expect(response.body).toMatchObject({ - profile: "openclaw", - pid: 222, - chosenBrowser: "chromium", - headless: true, - headlessSource: "request", - }); + const body = responseBodyRecord(response); + expect(body.profile).toBe("openclaw"); + expect(body.pid).toBe(222); + expect(body.chosenBrowser).toBe("chromium"); + expect(body.headless).toBe(true); + expect(body.headlessSource).toBe("request"); }); it("maps existing-session status failures to JSON browser errors", async () => { @@ -205,7 +210,7 @@ describe("basic browser routes", () => { }); expect(response.statusCode).toBe(409); - expect(response.body).toMatchObject({ error: "attach failed" }); + expect(responseBodyRecord(response).error).toBe("attach failed"); }); it("reports Chrome MCP transport without fake CDP fields", async () => { @@ -214,17 +219,18 @@ describe("basic browser routes", () => { }); expect(response.statusCode).toBe(200); - expect(response.body).toMatchObject({ - profile: "chrome-live", - driver: "existing-session", - transport: "chrome-mcp", - running: true, - cdpPort: null, - cdpUrl: null, - userDataDir: "/tmp/brave-profile", - executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser", - pid: 4321, - }); + const body = responseBodyRecord(response); + expect(body.profile).toBe("chrome-live"); + expect(body.driver).toBe("existing-session"); + expect(body.transport).toBe("chrome-mcp"); + expect(body.running).toBe(true); + expect(body.cdpPort).toBeNull(); + expect(body.cdpUrl).toBeNull(); + expect(body.userDataDir).toBe("/tmp/brave-profile"); + expect(body.executablePath).toBe( + "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser", + ); + expect(body.pid).toBe(4321); }); it("passes valid start headless override to local managed profiles", async () => { @@ -243,9 +249,9 @@ describe("basic browser routes", () => { }); expect(response.statusCode).toBe(400); - expect(response.body).toMatchObject({ - error: 'Invalid headless value. Use "true" or "false".', - }); + expect(responseBodyRecord(response).error).toBe( + 'Invalid headless value. Use "true" or "false".', + ); expect(ensureBrowserAvailable).not.toHaveBeenCalled(); }); @@ -264,10 +270,9 @@ describe("basic browser routes", () => { }); expect(response.statusCode).toBe(400); - expect(response.body).toMatchObject({ - error: - 'Headless start override is only supported for locally launched openclaw profiles. Profile "chrome-live" is attach-only, remote, or existing-session.', - }); + expect(responseBodyRecord(response).error).toBe( + 'Headless start override is only supported for locally launched openclaw profiles. Profile "chrome-live" is attach-only, remote, or existing-session.', + ); expect(ensureBrowserAvailable).not.toHaveBeenCalled(); }); @@ -280,13 +285,12 @@ describe("basic browser routes", () => { }); expect(response.statusCode).toBe(200); - expect(response.body).toMatchObject({ - profile: "chrome-live", - driver: "existing-session", - transport: "chrome-mcp", - running: true, - cdpReady: true, - }); + const body = responseBodyRecord(response); + expect(body.profile).toBe("chrome-live"); + expect(body.driver).toBe("existing-session"); + expect(body.transport).toBe("chrome-mcp"); + expect(body.running).toBe(true); + expect(body.cdpReady).toBe(true); }); it("probes Chrome MCP transport only once for status", async () => { @@ -304,10 +308,9 @@ describe("basic browser routes", () => { expect(isTransportAvailable).toHaveBeenCalledTimes(1); expect(isTransportAvailable).toHaveBeenCalledWith(5_000); expect(isHttpReachable).not.toHaveBeenCalled(); - expect(response.body).toMatchObject({ - cdpHttp: true, - cdpReady: true, - running: true, - }); + const body = responseBodyRecord(response); + expect(body.cdpHttp).toBe(true); + expect(body.cdpReady).toBe(true); + expect(body.running).toBe(true); }); });