47 lines
1.7 KiB
TypeScript
47 lines
1.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import type { InventoryBrowserRow } from "../../../lib/inventoryBrowser";
|
|
import { resolveInventoryDeletionTarget } from "./useInventoryViewModel";
|
|
|
|
type DeletionRow = Pick<InventoryBrowserRow, "source" | "runDir" | "scanResultId" | "promotionRecordId">;
|
|
|
|
function row(overrides: Partial<DeletionRow> = {}): DeletionRow {
|
|
return {
|
|
source: "snapshot",
|
|
runDir: undefined,
|
|
scanResultId: undefined,
|
|
promotionRecordId: undefined,
|
|
...overrides,
|
|
};
|
|
}
|
|
|
|
describe("inventory local deletion target", () => {
|
|
it("allows only a native result with its run identity", () => {
|
|
expect(resolveInventoryDeletionTarget(row({ source: "native", runDir: "C:/run", scanResultId: "result-1" }), {
|
|
nativeResultRemoval: true,
|
|
storeRecordRemoval: true,
|
|
})).toBe("native");
|
|
expect(resolveInventoryDeletionTarget(row({ source: "native", scanResultId: "result-1" }), {
|
|
nativeResultRemoval: true,
|
|
storeRecordRemoval: true,
|
|
})).toBeNull();
|
|
});
|
|
|
|
it("allows one exact Store record only when the bridge exposes the capability", () => {
|
|
expect(resolveInventoryDeletionTarget(row({ source: "store", promotionRecordId: "store-1" }), {
|
|
nativeResultRemoval: true,
|
|
storeRecordRemoval: true,
|
|
})).toBe("store");
|
|
expect(resolveInventoryDeletionTarget(row({ source: "store", promotionRecordId: "store-1" }), {
|
|
nativeResultRemoval: true,
|
|
storeRecordRemoval: false,
|
|
})).toBeNull();
|
|
});
|
|
|
|
it("never exposes a deletion target for snapshot rows", () => {
|
|
expect(resolveInventoryDeletionTarget(row({ source: "snapshot", promotionRecordId: "store-1" }), {
|
|
nativeResultRemoval: true,
|
|
storeRecordRemoval: true,
|
|
})).toBeNull();
|
|
});
|
|
});
|