36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
import { readFileSync } from "node:fs";
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
describe("ACL management contract", () => {
|
|
it("uses normalized ACL persistence and the permissions.manage guard", () => {
|
|
const wrapper = readFileSync("src/actions/permissions.ts", "utf8");
|
|
const service = readFileSync(
|
|
"src/features/housekeeping/domains/system/services/mutations.ts",
|
|
"utf8",
|
|
);
|
|
expect(wrapper).toContain("PERMS.PERMISSIONS_MANAGE");
|
|
expect(wrapper).toContain("adminAction");
|
|
expect(wrapper).toContain("access.permissions.update");
|
|
expect(wrapper).toContain("access.permissions.repair");
|
|
expect(service).toContain('import "server-only"');
|
|
expect(service).toContain("AclModelPermission");
|
|
expect(service).not.toContain(
|
|
"export const systemProductionMutationAdapter",
|
|
);
|
|
expect(service).not.toContain("legacyMessage");
|
|
expect(service).not.toContain("websiteHousekeepingPermissions");
|
|
expect(service).not.toContain("websiteTeams");
|
|
});
|
|
|
|
it("ships an idempotent ACL completion migration", () => {
|
|
const sql = readFileSync(
|
|
"drizzle/migrations/0014_complete_acl_and_import_permissions.sql",
|
|
"utf8",
|
|
);
|
|
expect(sql).toContain("admin.assets.import");
|
|
expect(sql).toContain("rank_");
|
|
expect(sql).toContain("'Role'");
|
|
expect(sql).toContain("'User'");
|
|
});
|
|
});
|