import { http, HttpResponse } from "msw"; import { server } from "../test/msw"; import { createSession, listSessions, prewarmRuntime } from "./sessions"; import { renameSession, setSessionGroup, archiveSession, unarchiveSession, deleteSession, getSessionDocuments, } from "./sessions"; test("createSession POSTs only {question} and returns the id", async () => { let body: unknown = null; server.use( http.post("http://localhost:8787/sessions", async ({ request }) => { body = await request.json(); return HttpResponse.json({ id: "s1" }); }), ); expect(await createSession({ question: "q" })).toEqual({ id: "s1" }); expect(body).toEqual({ question: "q" }); }); test.each([202, 204])("prewarmRuntime accepts a body-less %s response", async (status) => { let called = false; server.use( http.post("http://localhost:8787/runtime/prewarm", () => { called = true; return new HttpResponse(null, { status }); }), ); await expect(prewarmRuntime()).resolves.toBeUndefined(); expect(called).toBe(true); }); test("listSessions GETs the array", async () => { server.use(http.get("http://localhost:8787/sessions", () => HttpResponse.json([{ id: "s1", status: "open", question: "q", summary: null, created_at: "t", updated_at: null, author: null }]))); const rows = await listSessions(); expect(rows[0].id).toBe("s1"); }); test("renameSession POSTs {name}", async () => { let body: unknown = null; server.use(http.post("http://localhost:8787/sessions/s1/rename", async ({ request }) => { body = await request.json(); return new HttpResponse(null, { status: 204 }); })); await renameSession("s1", "Nome"); expect(body).toEqual({ name: "Nome" }); }); test("setSessionGroup POSTs {group}", async () => { let body: unknown = null; server.use(http.post("http://localhost:8787/sessions/s1/group", async ({ request }) => { body = await request.json(); return new HttpResponse(null, { status: 204 }); })); await setSessionGroup("s1", "G"); expect(body).toEqual({ group: "G" }); }); test("archive / unarchive / delete hit the right verbs+paths", async () => { const hits: string[] = []; server.use( http.post("http://localhost:8787/sessions/s1/archive", () => { hits.push("archive"); return new HttpResponse(null, { status: 204 }); }), http.post("http://localhost:8787/sessions/s1/unarchive", () => { hits.push("unarchive"); return new HttpResponse(null, { status: 204 }); }), http.delete("http://localhost:8787/sessions/s1", () => { hits.push("delete"); return new HttpResponse(null, { status: 204 }); }), ); await archiveSession("s1"); await unarchiveSession("s1"); await deleteSession("s1"); expect(hits).toEqual(["archive", "unarchive", "delete"]); }); test("getSessionDocuments GETs the array", async () => { server.use(http.get("http://localhost:8787/sessions/s1/documents", () => HttpResponse.json([{ phase: "—", key: "question", title: "t", format: "text", content: "q" }]), )); const docs = await getSessionDocuments("s1"); expect(docs[0].key).toBe("question"); });