Files
EpicNext-Cms/src/lib/admin/acl-migration-contract.test.ts
T
SimoandCursor ba82789166
CI / check (push) Failing after 9s
CI / release (push) Skipped
CI / deploy (push) Skipped
chore(db): finish Prisma cutover to Drizzle Kit tooling
Move CMS SQL to drizzle/migrations, drop prisma packages/schema, wire drizzle-kit scripts, and regenerate schema names from src/db/schema.ts.

Co-authored-by: Cursor <[email protected]>
2026-08-01 15:02:21 +02:00

46 lines
1.6 KiB
TypeScript

import { readdirSync, readFileSync } from "node:fs";
import { resolve } from "node:path";
import { describe, expect, it } from "vitest";
import { PERMS } from "@/lib/permission-slugs";
describe("production ACL migration", () => {
const migrationsDir = resolve(process.cwd(), "drizzle/migrations");
const allSql = readdirSync(migrationsDir)
.filter((name) => name.endsWith(".sql"))
.map((name) => readFileSync(resolve(migrationsDir, name), "utf8"))
.join("\n");
it("seeds every permission used by the application", () => {
for (const slug of Object.values(PERMS)) {
expect(allSql, `missing ACL seed for ${slug}`).toContain(`'${slug}'`);
}
});
it("assigns dashboard access after seeding permissions", () => {
const seedSql = readFileSync(
resolve(migrationsDir, "0012_seed_acl_permissions.sql"),
"utf8",
);
const seedPosition = seedSql.indexOf("INSERT INTO `acl_permissions`");
const assignmentPosition = seedSql.indexOf(
"INSERT INTO `acl_model_permissions`",
);
expect(seedPosition).toBeGreaterThanOrEqual(0);
expect(assignmentPosition).toBeGreaterThan(seedPosition);
expect(seedSql).toContain("ap.slug = 'admin.dashboard'");
expect(seedSql).toContain("ap.slug = 'mod.dashboard'");
});
it("repairs full admin.* grants for ranks that already have dashboard", () => {
const repairSql = readFileSync(
resolve(migrationsDir, "0018_acl_repair_admin_nav_grants.sql"),
"utf8",
);
expect(repairSql).toContain("admin.dashboard");
expect(repairSql).toContain("ap.slug LIKE 'admin.%'");
expect(repairSql).toContain("pr.id >= 6");
expect(repairSql).toContain("pr.id >= 7");
});
});