import { describe, it, expect } from "vitest"; import { manifestHandles, renderOutputBase } from "./exports"; import type { RenderManifest } from "./manifest"; import { nextTaskTitle } from "./preview"; describe("renderOutputBase", () => { it("follows the panel's house convention", () => { expect(renderOutputBase("UNG_102_019_010", "v001")).toBe("UNG_102_019_010_cmp_TT_v001"); }); // createExport names the comp task it creates after this basename, and // buildPreviewManifest names the MOV/MP4 off the same call — so a shot queued // with no task ends up with a task titled exactly like its preview file. The // title already carries the version, which makes finalizePreview's rename of // the task to the delivered version a no-op on that first export. it("gives a freshly created comp task a title finalizePreview leaves alone", () => { const title = renderOutputBase("UNG_102_019_010", "v003"); expect(nextTaskTitle(title, "v003")).toBe(title); }); }); describe("manifestHandles", () => { const base = {} as RenderManifest; it("uses the panel's explicit handles, including an explicit none", () => { expect(manifestHandles({ ...base, review: { handleHead: 8, handleTail: 12 } })).toEqual({ head: 8, tail: 12 }); expect( manifestHandles({ ...base, review: { handleHead: 0, handleTail: 0 }, source: { handleFrames: 8 } }) ).toEqual({ head: 0, tail: 0 }); }); it("falls back to the handle length older panels sent with the plates", () => { expect(manifestHandles({ ...base, source: { handleFrames: 8 } })).toEqual({ head: 8, tail: 8 }); }); it("is unknown when the manifest says nothing", () => { expect(manifestHandles(base)).toBeNull(); }); });