import { expect, test } from "bun:test"; import { runInNewContext } from "node:vm"; const script = await Bun.file(new URL("../public/js/kepr.js", import.meta.url)).text(); const navbar = script.slice( script.indexOf("async function navbarLogin()"), script.indexOf("// Signed in, a repo page"), ); test("navbar offers admin and protected log out only after confirming a live session", async () => { for (const [cookie, status, logout] of [ ["", 200, false], ["kepr_editor=1", 401, false], ["kepr_editor=1", 200, true], ] as const) { const nodes: Record[] = []; let replacement: unknown; const token = { name: "form", value: "session-form-token" }; const document = { cookie, querySelector: () => ({ replaceWith: (node: unknown) => { replacement = node; }, }), createElement: (tag: string) => { const node: Record = { tag, addEventListener: () => {}, append: (...children: unknown[]) => { node.children = children; }, }; nodes.push(node); return node; }, }; await runInNewContext(`${navbar}\nnavbarLogin()`, { document, fetch: async () => ({ ok: status === 200, text: async () => "admin page" }), DOMParser: class { parseFromString() { return { querySelector: () => token }; } }, console, }); expect(Boolean(replacement)).toBe(logout); if (logout) { expect(nodes[0]?.method).toBe("post"); expect(nodes[0]?.action).toBe("/admin/sign-out"); expect(nodes[0]?.children).toEqual([token, nodes[1]]); expect(nodes[1]?.textContent).toBe("log out"); expect(nodes.find((node) => node.tag === "a")?.href).toBe("/admin"); expect(nodes.find((node) => node.tag === "a")?.textContent).toBe("admin"); } } });