import { describe, expect, test } from "bun:test"; import { canEdit, canManage, canRead, getAccessLevel, } from "../../src/lib/access.ts"; const OWNER_DID = "did:plc:owner"; const OTHER_DID = "did:plc:other"; const publicWiki = { did: OWNER_DID, visibility: "public" }; const privateWiki = { did: OWNER_DID, visibility: "private" }; describe("getAccessLevel", () => { // Owner test("owner of public wiki → admin", () => { expect(getAccessLevel(publicWiki, OWNER_DID, null)).toBe("admin"); }); test("owner of private wiki → admin", () => { expect(getAccessLevel(privateWiki, OWNER_DID, null)).toBe("admin"); }); test("owner with admin membership → admin", () => { expect(getAccessLevel(publicWiki, OWNER_DID, "admin")).toBe("admin"); }); test("owner with viewer membership → admin (owner trumps)", () => { expect(getAccessLevel(privateWiki, OWNER_DID, "viewer")).toBe("admin"); }); // Public wiki, non-owner test("public wiki, anonymous → read", () => { expect(getAccessLevel(publicWiki, null, null)).toBe("read"); }); test("public wiki, logged in no membership → read", () => { expect(getAccessLevel(publicWiki, OTHER_DID, null)).toBe("read"); }); test("public wiki, admin member → admin", () => { expect(getAccessLevel(publicWiki, OTHER_DID, "admin")).toBe("admin"); }); test("public wiki, contributor member → edit", () => { expect(getAccessLevel(publicWiki, OTHER_DID, "contributor")).toBe("edit"); }); test("public wiki, viewer member → read", () => { expect(getAccessLevel(publicWiki, OTHER_DID, "viewer")).toBe("read"); }); // Private wiki, non-owner test("private wiki, anonymous → none", () => { expect(getAccessLevel(privateWiki, null, null)).toBe("none"); }); test("private wiki, logged in no membership → none", () => { expect(getAccessLevel(privateWiki, OTHER_DID, null)).toBe("none"); }); test("private wiki, admin member → admin", () => { expect(getAccessLevel(privateWiki, OTHER_DID, "admin")).toBe("admin"); }); test("private wiki, contributor member → edit", () => { expect(getAccessLevel(privateWiki, OTHER_DID, "contributor")).toBe("edit"); }); test("private wiki, viewer member → read", () => { expect(getAccessLevel(privateWiki, OTHER_DID, "viewer")).toBe("read"); }); }); describe("canRead", () => { test("admin → true", () => expect(canRead("admin")).toBe(true)); test("edit → true", () => expect(canRead("edit")).toBe(true)); test("read → true", () => expect(canRead("read")).toBe(true)); test("none → false", () => expect(canRead("none")).toBe(false)); }); describe("canEdit", () => { test("admin → true", () => expect(canEdit("admin")).toBe(true)); test("edit → true", () => expect(canEdit("edit")).toBe(true)); test("read → false", () => expect(canEdit("read")).toBe(false)); test("none → false", () => expect(canEdit("none")).toBe(false)); }); describe("canManage", () => { test("admin → true", () => expect(canManage("admin")).toBe(true)); test("edit → false", () => expect(canManage("edit")).toBe(false)); test("read → false", () => expect(canManage("read")).toBe(false)); test("none → false", () => expect(canManage("none")).toBe(false)); });