import { describe, expect, it } from "vitest"; import { reorderFileDropPresentationItems } from "./file-drop-presentation"; import type { FileDropPresentationEntry, FileDropPresentationItem, } from "./file-drop-types"; describe("reorderFileDropPresentationItems", () => { it("reorders visible entries without dropping or moving hidden source items", () => { const hiddenItem = { assetKind: "image", fileName: "missing.png", id: "image-hidden", } satisfies FileDropPresentationItem<"image">; const firstVisibleItem = { assetKind: "image", fileName: "first.png", id: "image-first", previewSrc: "data:image/png;base64,Zmlyc3Q=", } satisfies FileDropPresentationItem<"image">; const secondVisibleItem = { assetKind: "image", fileName: "second.png", id: "image-second", previewSrc: "data:image/png;base64,c2Vjb25k", } satisfies FileDropPresentationItem<"image">; const items = [hiddenItem, firstVisibleItem, secondVisibleItem]; const visibleEntries = [ { item: firstVisibleItem, key: firstVisibleItem.id, sourceIndex: 1 }, { item: secondVisibleItem, key: secondVisibleItem.id, sourceIndex: 2 }, ] satisfies readonly FileDropPresentationEntry<"image">[]; expect( reorderFileDropPresentationItems( items, visibleEntries, firstVisibleItem.id, secondVisibleItem.id, ), ).toEqual([hiddenItem, secondVisibleItem, firstVisibleItem]); expect(items).toEqual([hiddenItem, firstVisibleItem, secondVisibleItem]); }); it("returns null for missing or unchanged drag targets", () => { const item = { assetKind: "file", fileName: "one.txt", id: "file-1", } satisfies FileDropPresentationItem<"file">; const entries = [ { item, key: item.id, sourceIndex: 0 }, ] satisfies readonly FileDropPresentationEntry<"file">[]; expect(reorderFileDropPresentationItems([item], entries, item.id, item.id)).toBeNull(); expect(reorderFileDropPresentationItems([item], entries, "missing", item.id)).toBeNull(); }); });