- Replace Prisma client runtime with Drizzle ORM (zero Prisma engine/query engine in production) - Add Prisma-compatible facade (@/lib/prisma-facade.ts) backed by Drizzle for backwards compatibility - Runtime queries route through Drizzle ORM; @prisma/client is now devDependency (types only) - Remove @prisma/adapter-mariadb dependency; delete prisma-pool.ts and types/prisma.ts - New Drizzle schema layer: src/db/schema.ts (176 tables) and src/lib/db.ts (connection) - Update README documenting the dual-layer ORM architecture - Restore src/generated/ gitignore (build artifact for local type generation) - 0 TypeScript errors, 583 tests passing The facade intentionally uses `any` types to match the Prisma Client API surface, allowing existing code to run unmodified while routing queries through Drizzle at runtime.
25 lines
884 B
TypeScript
25 lines
884 B
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 source = readFileSync("src/actions/permissions.ts", "utf8");
|
|
expect(source).toContain("PERMS.PERMISSIONS_MANAGE");
|
|
expect(source).toContain("adminAction");
|
|
expect(source).toContain("AclModelPermission");
|
|
expect(source).not.toContain("websiteHousekeepingPermissions");
|
|
expect(source).not.toContain("websiteTeams");
|
|
});
|
|
|
|
it("ships an idempotent ACL completion migration", () => {
|
|
const sql = readFileSync(
|
|
"prisma/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'");
|
|
});
|
|
});
|