fix: classify Studio audit repairs as mutations

This commit is contained in:
Simo committed 2026-08-25 18:34:15 +02:00
1 parent 949e14c109
commit 9b7d5de12f
2 files changed
+46 -6

No files matched your search

@@ -88,6 +88,34 @@ describe("hotelMigrationEntries", () => {
).toBe(true);
});
it("classifies Studio Audit repair operations as privileged mutations", () => {
const studioAudit = hotelMigrationEntries.find(
(row) => row.legacyPath === "/admin/studio/audit",
);
expect(studioAudit).toEqual(
expect.objectContaining({
capabilities: {
read: [PERMS.ASSETS_IMPORT],
mutate: [PERMS.ASSETS_IMPORT],
},
dependencies: expect.objectContaining({
mutations: expect.arrayContaining([
"POST /api/admin/import/audit",
"applyCatalogSql",
"ensureDirectories",
"repairDuplicateClassnames",
"repairFurniData",
"repairMissingIcons",
"repairMissingNitros",
"repairOrphanedCatalog",
]),
}),
auditRequirement: "PRIVILEGED_MUTATION",
}),
);
});
it("records the actual permissions for room, radio, and Studio mutations", () => {
expect(hotelMigrationEntries).toContainEqual(
expect.objectContaining({
+18 -6
View File
@@ -368,16 +368,28 @@ export const hotelMigrationEntries: readonly MigrationEntry[] = [
sourceFile: "src/app/admin/studio/audit/page.tsx",
targetPath: "/admin/hotel/studio/audit",
decision: "REBUILD",
capabilities: { read: [PERMS.ASSETS_IMPORT], mutate: [] },
dependencies: {
queries: ["POST /api/admin/import/audit", "runCatalogAudit"],
mutations: [],
capabilities: {
read: [PERMS.ASSETS_IMPORT],
mutate: [PERMS.ASSETS_IMPORT],
},
auditRequirement: "NONE",
dependencies: {
queries: ["runCatalogAudit"],
mutations: [
"POST /api/admin/import/audit",
"applyCatalogSql",
"ensureDirectories",
"repairDuplicateClassnames",
"repairFurniData",
"repairMissingIcons",
"repairMissingNitros",
"repairOrphanedCatalog",
],
},
auditRequirement: "PRIVILEGED_MUTATION",
localization: "PARTIAL",
accessibility: "PARTIAL",
notes: [
"The POST endpoint performs a read-only database and filesystem audit",
"Audit repairs can mutate asset files, catalog data, FurnitureData, and database structure",
],
}),
plannedHotelEntry({