import { describe, expect, it } from "vitest"; import { defineToolcraft } from "../schema/define-toolcraft"; import { createToolcraftState } from "../state/create-template-state"; import { resolveToolcraftImageExportSettings, resolveToolcraftVideoExportSettings, toolcraftImageExportFormatTarget, toolcraftImageExportResolutionTarget, toolcraftVideoExportFormatTarget, toolcraftVideoExportResolutionTarget, } from "./artifact-export-settings"; import { ToolcraftArtifactExportError } from "./export-error"; function createState() { return createToolcraftState( defineToolcraft({ canvas: { enabled: true }, panels: {} }), ); } describe("artifact export settings", () => { it("uses canonical defaults when controls are absent", () => { const state = createState(); expect(resolveToolcraftImageExportSettings(state)).toEqual({ format: "png", resolution: "4k", }); expect(resolveToolcraftVideoExportSettings(state)).toEqual({ format: "mp4", resolution: "current", }); }); it("prefers current values over normalized defaults", () => { const state = createState(); Object.assign(state.defaults, { [toolcraftImageExportFormatTarget]: "png", [toolcraftImageExportResolutionTarget]: "4k", [toolcraftVideoExportFormatTarget]: "mp4", [toolcraftVideoExportResolutionTarget]: "current", }); Object.assign(state.values, { [toolcraftImageExportFormatTarget]: "jpg", [toolcraftImageExportResolutionTarget]: "8k", [toolcraftVideoExportFormatTarget]: "webm", [toolcraftVideoExportResolutionTarget]: "4k", }); expect(resolveToolcraftImageExportSettings(state)).toEqual({ format: "jpg", resolution: "8k", }); expect(resolveToolcraftVideoExportSettings(state)).toEqual({ format: "webm", resolution: "4k", }); }); it("rejects unsupported present values with the exact target", () => { const state = createState(); state.values[toolcraftVideoExportFormatTarget] = "mov"; try { resolveToolcraftVideoExportSettings(state); throw new Error("Expected invalid export setting."); } catch (error) { expect(error).toBeInstanceOf(ToolcraftArtifactExportError); expect((error as ToolcraftArtifactExportError).feedback).toMatchObject({ code: "invalid-export-setting", target: toolcraftVideoExportFormatTarget, }); } }); });