session-route.test.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { describe, expect, test } from "bun:test"
  2. import { ServerConnection } from "@/context/server"
  3. import { legacySessionHref, requireServerKey, rootSession, sessionHref } from "./session-route"
  4. describe("session routes", () => {
  5. test("builds and decodes a server-keyed session route", () => {
  6. const server = ServerConnection.Key.make("https://example.com:4096")
  7. const href = sessionHref(server, "session-1")
  8. expect(href).toBe("/server/aHR0cHM6Ly9leGFtcGxlLmNvbTo0MDk2/session/session-1")
  9. expect(requireServerKey(href.split("/")[2])).toBe(server)
  10. })
  11. test("rejects malformed server keys", () => {
  12. expect(() => requireServerKey("not-base64")).toThrow("Invalid server route")
  13. })
  14. test("builds the legacy directory-keyed route", () => {
  15. expect(legacySessionHref("/Users/example/project", "session-1")).toBe(
  16. "/L1VzZXJzL2V4YW1wbGUvcHJvamVjdA/session/session-1",
  17. )
  18. })
  19. test("resolves the root session", async () => {
  20. const sessions: Record<string, { id: string; parentID?: string }> = {
  21. child: { id: "child", parentID: "parent" },
  22. parent: { id: "parent", parentID: "root" },
  23. root: { id: "root" },
  24. }
  25. expect(
  26. await rootSession(sessions.child, async (id) => {
  27. const session = sessions[id]
  28. if (!session) throw new Error(`Missing session: ${id}`)
  29. return session
  30. }),
  31. ).toBe(sessions.root)
  32. })
  33. test("rejects a parent cycle", async () => {
  34. const sessions: Record<string, { id: string; parentID?: string }> = {
  35. child: { id: "child", parentID: "parent" },
  36. parent: { id: "parent", parentID: "child" },
  37. }
  38. expect(rootSession(sessions.child, async (id) => sessions[id]!)).rejects.toThrow("Session parent cycle: child")
  39. })
  40. })