52 lines
1.7 KiB
TypeScript
52 lines
1.7 KiB
TypeScript
|
|
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/<id> 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/<id>/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);
|
||
|
|
});
|
||
|
|
});
|