129 lines
3.3 KiB
TypeScript
129 lines
3.3 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { PERMS } from "@/lib/permission-slugs";
|
|
import { ownedLegacyPages } from "./discover-legacy-pages";
|
|
import { systemMigrationEntries } from "./system";
|
|
import { validateMigrationEntries } from "./validate-matrix";
|
|
|
|
const SYSTEM_PREFIXES = [
|
|
"/admin/alerts",
|
|
"/admin/analytics",
|
|
"/admin/commandocentrum",
|
|
"/admin/devops",
|
|
"/admin/emulator",
|
|
"/admin/housekeeping",
|
|
"/admin/logs",
|
|
"/admin/maintenance",
|
|
"/admin/menu",
|
|
"/admin/permissions",
|
|
"/admin/settings",
|
|
] as const;
|
|
|
|
describe("systemMigrationEntries", () => {
|
|
it("covers all 19 System pages exactly once", () => {
|
|
expect(systemMigrationEntries).toHaveLength(19);
|
|
expect(
|
|
validateMigrationEntries(
|
|
ownedLegacyPages(SYSTEM_PREFIXES),
|
|
systemMigrationEntries,
|
|
),
|
|
).toEqual([]);
|
|
});
|
|
|
|
it("removes legacy foundation-owned pages", () => {
|
|
expect(systemMigrationEntries).toEqual(
|
|
expect.arrayContaining([
|
|
expect.objectContaining({
|
|
legacyPath: "/admin/housekeeping",
|
|
decision: "REMOVE",
|
|
targetPath: null,
|
|
}),
|
|
expect.objectContaining({
|
|
legacyPath: "/admin/menu",
|
|
decision: "REMOVE",
|
|
targetPath: null,
|
|
}),
|
|
]),
|
|
);
|
|
});
|
|
|
|
it("keeps live permissions as a System workflow", () => {
|
|
expect(systemMigrationEntries).toContainEqual(
|
|
expect.objectContaining({
|
|
legacyPath: "/admin/permissions",
|
|
targetPath: "/ase/system/access/permissions",
|
|
decision: expect.not.stringMatching("REMOVE"),
|
|
}),
|
|
);
|
|
});
|
|
|
|
it("retains the read-only legacy housekeeping value in removal notes", () => {
|
|
const housekeeping = systemMigrationEntries.find(
|
|
(row) => row.legacyPath === "/admin/housekeeping",
|
|
);
|
|
|
|
expect(housekeeping?.dependencies.queries).toEqual(
|
|
expect.arrayContaining([
|
|
"exportPermissions",
|
|
"getAuditLogs",
|
|
"legacy ACL comparison",
|
|
]),
|
|
);
|
|
expect(housekeeping?.notes.join(" ")).toMatch(
|
|
/read-only.*export.*comparison/i,
|
|
);
|
|
});
|
|
|
|
it("uses only the approved System target roots", () => {
|
|
const allowedRoots = [
|
|
"/ase/system/access",
|
|
"/ase/system/configuration",
|
|
"/ase/system/observability",
|
|
"/ase/system/operations",
|
|
];
|
|
|
|
expect(
|
|
systemMigrationEntries.every(
|
|
(row) =>
|
|
row.targetPath === null ||
|
|
allowedRoots.some(
|
|
(root) =>
|
|
row.targetPath === root || row.targetPath?.startsWith(`${root}/`),
|
|
),
|
|
),
|
|
).toBe(true);
|
|
});
|
|
|
|
it("records verified or removed status with concrete runtime evidence", () => {
|
|
expect(
|
|
systemMigrationEntries.every(
|
|
(row) =>
|
|
row.status === (row.decision === "REMOVE" ? "REMOVED" : "VERIFIED") &&
|
|
row.parityEvidence.includes(`runtime-parity:${row.legacyPath}`),
|
|
),
|
|
).toBe(true);
|
|
});
|
|
|
|
it("records authoritative capabilities for privileged System mutations", () => {
|
|
expect(systemMigrationEntries).toEqual(
|
|
expect.arrayContaining([
|
|
expect.objectContaining({
|
|
legacyPath: "/admin/commandocentrum",
|
|
capabilities: {
|
|
read: [PERMS.RCON_EXECUTE],
|
|
mutate: [PERMS.RCON_EXECUTE],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
}),
|
|
expect.objectContaining({
|
|
legacyPath: "/admin/permissions/:id",
|
|
capabilities: {
|
|
read: [PERMS.PERMISSIONS_MANAGE],
|
|
mutate: [PERMS.PERMISSIONS_MANAGE],
|
|
},
|
|
auditRequirement: "PRIVILEGED_MUTATION",
|
|
}),
|
|
]),
|
|
);
|
|
});
|
|
});
|