diff --git a/src/browser/routes/agent.shared.test.ts b/src/browser/routes/agent.shared.test.ts new file mode 100644 index 00000000000..4a43ba56891 --- /dev/null +++ b/src/browser/routes/agent.shared.test.ts @@ -0,0 +1,39 @@ +import { describe, expect, it } from "vitest"; +import { readBody, resolveTargetIdFromBody, resolveTargetIdFromQuery } from "./agent.shared.js"; +import type { BrowserRequest } from "./types.js"; + +function requestWithBody(body: unknown): BrowserRequest { + return { + params: {}, + query: {}, + body, + }; +} + +describe("browser route shared helpers", () => { + describe("readBody", () => { + it("returns object bodies", () => { + expect(readBody(requestWithBody({ one: 1 }))).toEqual({ one: 1 }); + }); + + it("normalizes non-object bodies to empty object", () => { + expect(readBody(requestWithBody(null))).toEqual({}); + expect(readBody(requestWithBody("text"))).toEqual({}); + expect(readBody(requestWithBody(["x"]))).toEqual({}); + }); + }); + + describe("target id parsing", () => { + it("extracts and trims targetId from body", () => { + expect(resolveTargetIdFromBody({ targetId: " tab-1 " })).toBe("tab-1"); + expect(resolveTargetIdFromBody({ targetId: " " })).toBeUndefined(); + expect(resolveTargetIdFromBody({ targetId: 123 })).toBeUndefined(); + }); + + it("extracts and trims targetId from query", () => { + expect(resolveTargetIdFromQuery({ targetId: " tab-2 " })).toBe("tab-2"); + expect(resolveTargetIdFromQuery({ targetId: "" })).toBeUndefined(); + expect(resolveTargetIdFromQuery({ targetId: false })).toBeUndefined(); + }); + }); +}); diff --git a/src/browser/routes/agent.storage.test.ts b/src/browser/routes/agent.storage.test.ts new file mode 100644 index 00000000000..0990a160f4f --- /dev/null +++ b/src/browser/routes/agent.storage.test.ts @@ -0,0 +1,40 @@ +import { describe, expect, it } from "vitest"; +import { parseStorageKind, parseStorageMutationRequest } from "./agent.storage.js"; + +describe("browser storage route parsing", () => { + describe("parseStorageKind", () => { + it("accepts local and session", () => { + expect(parseStorageKind("local")).toBe("local"); + expect(parseStorageKind("session")).toBe("session"); + }); + + it("rejects unsupported values", () => { + expect(parseStorageKind("cookie")).toBeNull(); + expect(parseStorageKind("")).toBeNull(); + }); + }); + + describe("parseStorageMutationRequest", () => { + it("returns parsed kind and trimmed target id", () => { + expect( + parseStorageMutationRequest("local", { + targetId: " page-1 ", + }), + ).toEqual({ + kind: "local", + targetId: "page-1", + }); + }); + + it("returns null kind and undefined target id for invalid values", () => { + expect( + parseStorageMutationRequest("invalid", { + targetId: " ", + }), + ).toEqual({ + kind: null, + targetId: undefined, + }); + }); + }); +});