Files
homarr/scripts/release-v2-qa/permissions.spec.ts
T

71 lines
2.7 KiB
TypeScript

import { readFile } from "node:fs/promises";
import { resolve } from "node:path";
import { describe, expect, it } from "vitest";
import {
getReleaseV2QaExpectedBoardAccess,
releaseV2QaPacketBoardAccess,
validateReleaseV2QaPacketBoardAccess,
} from "./permissions.mts";
interface CoverageManifest {
boards: { id: string }[];
packets: { id: string; boards: string[]; personas: string[] }[];
personas: string[];
}
const coverageManifest = JSON.parse(
await readFile(resolve(import.meta.dirname, "../../qa/release-v2/coverage-manifest.json"), "utf8"),
) as CoverageManifest;
describe("release-v2 QA packet board access", () => {
it("covers every assigned packet persona and board combination", () => {
expect(validateReleaseV2QaPacketBoardAccess(coverageManifest, releaseV2QaPacketBoardAccess)).toEqual([]);
expect(Object.keys(releaseV2QaPacketBoardAccess)).toHaveLength(45);
});
it("grants mutation access to specialized packet owners without unrelated boards", () => {
const access = getReleaseV2QaExpectedBoardAccess(releaseV2QaPacketBoardAccess);
expect(access["Casey Chaos"]).toEqual({
"qa-custom-widget-assistant": "full",
"qa-dense-collisions": "modify",
"qa-download-upload": "full",
"qa-grid-24": "full",
"qa-widgets-12": "modify",
});
expect(access["Morgan Mobile"]).toEqual({
"qa-layout-boundaries": "modify",
"qa-widgets-01": "modify",
});
expect(access["Brooke Minimalist"]).toEqual({
"qa-icons-bookmarks": "modify",
"qa-widgets-01": "modify",
});
expect(access["Cora Creator"]).toEqual({
"qa-custom-widget-assistant": "modify",
"qa-widgets-02": "modify",
"qa-widgets-03": "modify",
"qa-widgets-12": "modify",
});
expect(access["Ash Assistant"]).toEqual({
"qa-custom-widget-assistant": "modify",
"qa-widgets-12": "modify",
});
});
it("preserves owner, editor, viewer, outsider, and administrator invariants", () => {
const access = getReleaseV2QaExpectedBoardAccess(releaseV2QaPacketBoardAccess);
expect(Object.values(access["Avery Admin"] ?? {})).not.toContain("none");
expect(Object.values(access["Avery Admin"] ?? {})).not.toContain("view");
expect(Object.values(access["Avery Admin"] ?? {})).not.toContain("modify");
expect(access["Rowan Owner"]?.["qa-permissions-public"]).toBe("full");
expect(access["Eden Editor"]?.["qa-permissions-public"]).toBe("modify");
expect(Object.values(access["Vivian Viewer"] ?? {})).toEqual(expect.arrayContaining(["view"]));
expect(new Set(Object.values(access["Vivian Viewer"] ?? {}))).toEqual(new Set(["view"]));
expect(new Set(Object.values(access["Nolan Outsider"] ?? {}))).toEqual(new Set(["none"]));
});
});