Skip to content
File

Blob: tests/client/lib/site-publish-affordance.test.ts

typescript50 lines
1import { describe, expect, it } from "vitest";
2import { deriveSitePublishAffordance } from "@/client/lib/affordance/site-publish";
3import { getSitePublishingEntitlements } from "@/shared/entitlements";
4 
5const baseInput = {
6 entitlements: getSitePublishingEntitlements("owner"),
7 online: true,
8 pageKind: "doc" as const,
9};
10 
11describe("deriveSitePublishAffordance", () => {
12 it("owners get the management action enabled when online", () => {
13 const aff = deriveSitePublishAffordance(baseInput);
14 expect(aff.showPublishTab).toBe(true);
15 expect(aff.manageSite.kind).toBe("enabled");
16 });
17 
18 it("members can view publish status but not manage anything", () => {
19 const aff = deriveSitePublishAffordance({
20 ...baseInput,
21 entitlements: getSitePublishingEntitlements("member"),
22 });
23 expect(aff.showPublishTab).toBe(true);
24 expect(aff.manageSite.kind).toBe("hidden");
25 });
26 
27 it("guests and non-members do not see the Publish tab at all", () => {
28 for (const role of ["guest", "none"] as const) {
29 const aff = deriveSitePublishAffordance({
30 ...baseInput,
31 entitlements: getSitePublishingEntitlements(role),
32 });
33 expect(aff.showPublishTab).toBe(false);
34 expect(aff.manageSite.kind).toBe("hidden");
35 }
36 });
37 
38 it("hides the Publish tab on canvas pages", () => {
39 const aff = deriveSitePublishAffordance({ ...baseInput, pageKind: "canvas" });
40 expect(aff.showPublishTab).toBe(false);
41 expect(aff.manageSite.kind).toBe("enabled");
42 });
43 
44 it("falls back to a disabled offline state when the user is offline", () => {
45 const aff = deriveSitePublishAffordance({ ...baseInput, online: false });
46 expect(aff.showPublishTab).toBe(true);
47 expect(aff.manageSite.kind).toBe("disabled");
48 });
49});