import { describe, expect, it } from "vitest"; import { resolveToolcraftAppCapabilities } from "./app-capabilities"; const mediaFreeInput = { canvas: { upload: false }, media: { defaultAssets: [] }, panels: {}, } as const; describe("resolveToolcraftAppCapabilities", () => { it("marks canvas upload as media capability", () => { expect( resolveToolcraftAppCapabilities({ ...mediaFreeInput, canvas: { upload: true }, }), ).toEqual({ hasMedia: true }); }); it("marks default media assets as media capability", () => { expect( resolveToolcraftAppCapabilities({ ...mediaFreeInput, media: { defaultAssets: [ { assetKind: "image", dataUrl: "data:image/png;base64,AA==", fileName: "default.png", }, ], }, }), ).toEqual({ hasMedia: true }); }); it("marks normalized panel fileDrop controls as media capability", () => { expect( resolveToolcraftAppCapabilities({ ...mediaFreeInput, panels: { controls: { sections: [ { controls: { source: { applicability: { mode: "always", origin: "implicit", }, assetKind: "file", target: "source.files", type: "fileDrop", }, }, id: "source", title: "Source", }, ], title: "Controls", }, }, }), ).toEqual({ hasMedia: true }); }); it("keeps media-free apps media-free and freezes the result", () => { const capabilities = resolveToolcraftAppCapabilities(mediaFreeInput); expect(capabilities).toEqual({ hasMedia: false }); expect(Object.isFrozen(capabilities)).toBe(true); }); });