71 lines
2.7 KiB
TypeScript
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"]));
|
|
});
|
|
});
|