import { describe, expect, it } from "vitest"; import { fileMediaAsset, importImageMedia, } from "./reducer-media-test-utils"; import { toolcraftReducer } from "./reducer"; import { createState } from "./reducer-test-utils"; describe("toolcraftReducer media transforms", () => { it("records image media rotate and flip transforms in runtime history", () => { const imported = importImageMedia(createState()); const rotated = toolcraftReducer(imported, { mediaId: imported.mediaAssets[0]?.id ?? "", operation: "rotate-right", type: "media.transform", }); const flipped = toolcraftReducer(rotated, { mediaId: imported.mediaAssets[0]?.id ?? "", operation: "flip-horizontal", type: "media.transform", }); const undone = toolcraftReducer(flipped, { type: "history.undo" }); const rotatedAsset = rotated.mediaAssets[0]; const flippedAsset = flipped.mediaAssets[0]; const undoneAsset = undone.mediaAssets[0]; expect(rotatedAsset?.assetKind === "image" ? rotatedAsset.transform : undefined).toEqual({ rotationDeg: 90, }); expect(flippedAsset?.assetKind === "image" ? flippedAsset.transform : undefined).toEqual({ flipHorizontal: true, rotationDeg: 90, }); expect(flipped.history.undo.at(-1)).toMatchObject({ before: { mediaAssets: rotated.mediaAssets }, label: "Transform media", }); expect(undoneAsset?.assetKind === "image" ? undoneAsset.transform : undefined).toEqual({ rotationDeg: 90, }); }); it("ignores image transforms for arbitrary file media", () => { const imported = toolcraftReducer(createState(), { asset: fileMediaAsset(), type: "media.import", }); const transformed = toolcraftReducer(imported, { mediaId: imported.mediaAssets[0]?.id ?? "", operation: "rotate-right", type: "media.transform", }); expect(transformed).toBe(imported); }); });