import { describe, expect, it } from "vitest"; import type { SessionId } from "@shared/ids"; import { EMPTY_ROUTE, parseRoute, serializeRoute } from "./routing"; describe("routing.parseRoute", () => { it("returns the empty route for an empty hash", () => { expect(parseRoute("")).toEqual(EMPTY_ROUTE); expect(parseRoute("#")).toEqual(EMPTY_ROUTE); expect(parseRoute("#/")).toEqual(EMPTY_ROUTE); }); it("parses #/s/ as review mode for that session", () => { const route = parseRoute("#/s/sess_abc"); expect(route.sessionId).toBe("sess_abc"); expect(route.mode).toBe("review"); }); it("parses #/s//forms/demo as forms mode", () => { const route = parseRoute("#/s/sess_xyz/forms/demo"); expect(route.sessionId).toBe("sess_xyz"); expect(route.mode).toBe("forms"); }); it("treats legacy #/forms/demo as the empty route (session must be chosen first)", () => { expect(parseRoute("#/forms/demo")).toEqual(EMPTY_ROUTE); }); it("trims trailing slashes", () => { expect(parseRoute("#/s/sess_abc/")).toMatchObject({ sessionId: "sess_abc" }); }); }); describe("routing.serializeRoute", () => { it("returns empty string for the empty route", () => { expect(serializeRoute(EMPTY_ROUTE)).toBe(""); }); it("round-trips review mode", () => { const route = { sessionId: "sess_abc" as SessionId, mode: "review" as const }; expect(serializeRoute(route)).toBe("#/s/sess_abc"); expect(parseRoute(serializeRoute(route))).toEqual(route); }); it("round-trips forms mode", () => { const route = { sessionId: "sess_xyz" as SessionId, mode: "forms" as const }; expect(serializeRoute(route)).toBe("#/s/sess_xyz/forms/demo"); expect(parseRoute(serializeRoute(route))).toEqual(route); }); });