feat(cms): improve catalog, editorial recovery and operations
This commit is contained in:
1 parent
2fead134e6
commit
c389c3893d
122 files changed
+8137
-703
No files matched your search
@@ -0,0 +1,93 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { furnitureCompleteness } from "./studio-completeness";
|
||||
import {
|
||||
compareFurniture,
|
||||
type FurnitureInspection,
|
||||
} from "./studio-inspection";
|
||||
|
||||
const complete: FurnitureInspection = {
|
||||
classname: "chair",
|
||||
sql: [{ id: 100, spriteId: 200, type: "s", name: "Chair" }],
|
||||
catalog: [{ id: 50, pageId: 1, credits: 3, points: 0 }],
|
||||
furnidata: [
|
||||
{ id: 200, type: "flooritem", name: "Chair", description: "", revision: 1 },
|
||||
],
|
||||
furnidataReadable: true,
|
||||
nitro: { exists: true, bytes: 200 },
|
||||
icon: { exists: true, bytes: 30 },
|
||||
};
|
||||
describe("furniture completeness", () => {
|
||||
it("checks all five independent parts and accepts locally remapped IDs", () => {
|
||||
expect(furnitureCompleteness(complete).map((p) => p.status)).toEqual(
|
||||
Array(5).fill("present"),
|
||||
);
|
||||
});
|
||||
it("does not infer a catalog offer or icon from SQL and Nitro", () => {
|
||||
const parts = furnitureCompleteness({
|
||||
...complete,
|
||||
catalog: [],
|
||||
icon: { exists: false, bytes: 0 },
|
||||
});
|
||||
expect(parts.find((p) => p.id === "catalog")).toMatchObject({
|
||||
status: "missing",
|
||||
action: "catalog",
|
||||
});
|
||||
expect(parts.find((p) => p.id === "icon")).toMatchObject({
|
||||
status: "missing",
|
||||
action: "icon",
|
||||
});
|
||||
expect(parts.find((p) => p.id === "sql")?.status).toBe("present");
|
||||
});
|
||||
it("keeps unreadable assets unknown and directs operators to recheck", () => {
|
||||
const parts = furnitureCompleteness({
|
||||
...complete,
|
||||
furnidataReadable: false,
|
||||
icon: { exists: null, bytes: 0 },
|
||||
});
|
||||
expect(parts.find((p) => p.id === "furnidata")).toMatchObject({
|
||||
status: "unknown",
|
||||
action: "recheck",
|
||||
});
|
||||
expect(parts.find((p) => p.id === "icon")).toMatchObject({
|
||||
status: "unknown",
|
||||
action: "recheck",
|
||||
});
|
||||
});
|
||||
it.each([
|
||||
{ id: 201, type: "flooritem" },
|
||||
{ id: 200, type: "wallitem" },
|
||||
])(
|
||||
"flags ID or type mismatches in both review and completeness: %j",
|
||||
(change) => {
|
||||
const local = {
|
||||
...complete,
|
||||
furnidata: [{ ...complete.furnidata[0], ...change }],
|
||||
};
|
||||
expect(
|
||||
furnitureCompleteness(local)
|
||||
.filter((p) => p.status === "conflict")
|
||||
.map((p) => p.id),
|
||||
).toEqual(["sql", "furnidata"]);
|
||||
expect(
|
||||
compareFurniture(
|
||||
{ name: "Chair", description: "", revision: 1, type: "flooritem" },
|
||||
local,
|
||||
).state,
|
||||
).toBe("conflict");
|
||||
},
|
||||
);
|
||||
it("allows multiple legitimate catalog offers but surfaces duplicate SQL records", () => {
|
||||
expect(
|
||||
furnitureCompleteness({
|
||||
...complete,
|
||||
catalog: [...complete.catalog, { ...complete.catalog[0], id: 51 }],
|
||||
}).find((p) => p.id === "catalog")?.status,
|
||||
).toBe("present");
|
||||
expect(
|
||||
furnitureCompleteness({
|
||||
...complete,
|
||||
sql: [...complete.sql, { ...complete.sql[0], id: 101 }],
|
||||
}).find((p) => p.id === "sql"),
|
||||
).toMatchObject({ status: "conflict", action: "audit" });
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user