Files
genshin-assistant/src/features/inventory/hooks/useInventoryViewModel.test.ts
T

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();
});
});