import { describe, expect, it } from "vitest"; import { importImageMedia } from "./reducer-media-test-utils"; import { toolcraftReducer } from "./reducer"; import { createState } from "./reducer-test-utils"; describe("toolcraftReducer media reorder and history", () => { it("reorders imported media assets and records undo history", () => { const state = createState(); const first = importImageMedia( state, { dataUrl: "data:image/png;base64,first", fileName: "first.png", size: state.canvas.size, }, { replaceExisting: false }, ); const second = importImageMedia( first, { dataUrl: "data:image/png;base64,second", fileName: "second.png", size: state.canvas.size, }, { replaceExisting: false }, ); const third = importImageMedia( second, { dataUrl: "data:image/png;base64,third", fileName: "third.png", size: state.canvas.size, }, { replaceExisting: false }, ); const reordered = toolcraftReducer(third, { mediaIds: ["media-3", "media-1", "media-2"], type: "media.reorder", }); const undone = toolcraftReducer(reordered, { type: "history.undo" }); expect(reordered.mediaAssets.map((asset) => asset.id)).toEqual([ "media-3", "media-1", "media-2", ]); expect(reordered.history.undo.at(-1)?.label).toBe("Reorder media"); expect(undone.mediaAssets.map((asset) => asset.id)).toEqual([ "media-1", "media-2", "media-3", ]); }); it("keeps omitted media assets after explicitly reordered media", () => { const state = createState(); const first = importImageMedia( state, { dataUrl: "data:image/png;base64,first", fileName: "first.png", size: state.canvas.size, }, { replaceExisting: false }, ); const second = importImageMedia( first, { dataUrl: "data:image/png;base64,second", fileName: "second.png", size: state.canvas.size, }, { replaceExisting: false }, ); const third = importImageMedia( second, { dataUrl: "data:image/png;base64,third", fileName: "third.png", size: state.canvas.size, }, { replaceExisting: false }, ); const reordered = toolcraftReducer(third, { mediaIds: ["media-2"], type: "media.reorder", }); expect(reordered.mediaAssets.map((asset) => asset.id)).toEqual([ "media-2", "media-1", "media-3", ]); }); it("undoes and redoes media imports", () => { const imported = importImageMedia(createState(), { fileName: "material.png", position: { x: 10, y: 20 }, size: { height: 768, unit: "px", width: 1024 }, }); const undone = toolcraftReducer(imported, { type: "history.undo" }); const redone = toolcraftReducer(undone, { type: "history.redo" }); expect(undone.layers).toEqual([]); expect(undone.mediaAssets).toEqual([]); expect(undone.selectedLayerId).toBeNull(); expect(redone.layers).toHaveLength(1); expect(redone.mediaAssets).toHaveLength(1); expect(redone.selectedLayerId).toBe("layer-1"); }); });