54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import type { FurnitureInspection } from "@/lib/furni/studio-inspection";
|
|
import { importRecommendation } from "./import-recommendation";
|
|
|
|
const local: FurnitureInspection = {
|
|
classname: "chair",
|
|
sql: [{ id: 1, spriteId: 1, name: "Chair", type: "s" }],
|
|
catalog: [],
|
|
furnidata: [],
|
|
furnidataReadable: true,
|
|
icon: { exists: false, bytes: 0 },
|
|
nitro: { exists: true, bytes: 42 },
|
|
};
|
|
describe("import recommendations", () => {
|
|
it("proposes completion with the precise missing components for existing SQL", () => {
|
|
expect(importRecommendation(local)).toEqual({
|
|
action: "complete",
|
|
missing: ["catalog", "furnidata", "icon"],
|
|
unknown: [],
|
|
});
|
|
});
|
|
it("keeps unavailable checks distinct from missing parts", () => {
|
|
expect(
|
|
importRecommendation({
|
|
...local,
|
|
furnidataReadable: false,
|
|
icon: { exists: null, bytes: 0 },
|
|
}),
|
|
).toEqual({
|
|
action: "verify",
|
|
missing: ["catalog"],
|
|
unknown: ["furnidata", "icon"],
|
|
});
|
|
});
|
|
it("prioritizes conflicts over completing missing parts", () => {
|
|
expect(
|
|
importRecommendation({ ...local, sql: [...local.sql, ...local.sql] })
|
|
.action,
|
|
).toBe("conflict");
|
|
});
|
|
it("proposes import when no local components exist", () => {
|
|
expect(
|
|
importRecommendation({
|
|
...local,
|
|
sql: [],
|
|
nitro: { exists: false, bytes: 0 },
|
|
}).action,
|
|
).toBe("import");
|
|
});
|
|
it("recognizes partial furniture even without a SQL row", () => {
|
|
expect(importRecommendation({ ...local, sql: [] }).action).toBe("complete");
|
|
});
|
|
});
|