import { describe, expect, it } from "vitest"; import type { ToolcraftDefaultProvider } from "./contract/capability"; import type { ToolcraftControlSectionModuleContribution, ToolcraftPanelActionModuleContribution, ToolcraftTimelinePanelSurfaceModuleContribution, ToolcraftTimelinePersistenceModuleContribution, } from "./contract/contribution"; import type { ToolcraftProductIntegrationPortRequirement } from "./contract/integration-port"; import { createTestToolcraftProductModuleDefinition } from "./testing/create-test-module-definition"; type WithExtensionMetadata = T & { extensionMetadata: { tags: string[] }; }; type ImageSettingsWithExtension = Extract< WithExtensionMetadata, { id: "image-export.settings" } >; type VideoActionWithExtension = Extract< WithExtensionMetadata, { id: "video-export.action" } >; type TimelineSurfaceWithExtension = WithExtensionMetadata< Omit > & { configuration: WithExtensionMetadata< ToolcraftTimelinePanelSurfaceModuleContribution["configuration"] >; }; describe("Toolcraft product module definition projection", () => { it("projects predeclared inputs to the exact branded contract", () => { const extensionMetadata = { tags: ["input"] }; const imageSettingsWithExtension: ImageSettingsWithExtension = { extensionMetadata, id: "image-export.settings", kind: "control-section", moduleId: "image-export", placement: { after: [], before: ["video-export.settings"], slot: "artifact-settings", }, runtimeSectionId: "runtime.image-export", section: { controls: { imageFormat: { applicability: { mode: "always" as const }, defaultValue: "png", label: "Format", options: [{ label: "PNG", value: "png" }], performanceRole: "responsiveness", target: "export.image.format", type: "select", }, imageResolution: { applicability: { mode: "always" as const }, defaultValue: "4k", label: "Resolution", options: [{ label: "4K", value: "4k" }], performanceRole: "workload", target: "export.image.resolution", type: "select", }, }, layoutGroups: [], title: "Image Export", }, }; const timelinePayloadWithExtension: TimelineSurfaceWithExtension["configuration"] = { enabled: true, extensionMetadata, mode: "playback", }; const timelineSurfaceWithExtension: TimelineSurfaceWithExtension = { extensionMetadata, id: "timeline.surface", kind: "panel-surface", moduleId: "timeline", surface: "timeline", configuration: timelinePayloadWithExtension, }; const persistenceWithExtension: WithExtensionMetadata = { extensionMetadata, id: "timeline.persistence", kind: "persistence-requirement", moduleId: "timeline", slice: "timeline", }; const videoActionWithExtension: VideoActionWithExtension = { extensionMetadata, id: "video-export.action", kind: "panel-action", moduleId: "video-export", role: "export-video", }; const providerWithExtension: WithExtensionMetadata = { capabilityId: "timeline.playback", extensionMetadata, providerId: "timeline.playback-default", }; const portWithExtension: WithExtensionMetadata = { applicability: "product-scene", extensionMetadata, id: "scene.rasterFrameRenderer", }; const imageDefinition = createTestToolcraftProductModuleDefinition({ contributions: [imageSettingsWithExtension], defaultProviders: [], id: "image-export", portRequirements: [], provides: ["artifact.image-export"], requires: [], }); const timelineDefinition = createTestToolcraftProductModuleDefinition({ contributions: [timelineSurfaceWithExtension, persistenceWithExtension], defaultProviders: [], id: "timeline", portRequirements: [], provides: ["timeline.playback"], requires: [], }); const videoDefinition = createTestToolcraftProductModuleDefinition({ contributions: [videoActionWithExtension], defaultProviders: [providerWithExtension], id: "video-export", portRequirements: [portWithExtension], provides: ["artifact.video-export"], requires: ["timeline.playback"], }); const projectedImageSettings = imageDefinition.contributions[0]; const projectedTimelineSurface = timelineDefinition.contributions[0]; const projectedPersistence = timelineDefinition.contributions[1]; const projectedVideoAction = videoDefinition.contributions[0]; const projectedProvider = videoDefinition.defaultProviders[0]; const projectedPort = videoDefinition.portRequirements[0]; const projectedRecords = [ projectedImageSettings, projectedTimelineSurface, projectedPersistence, projectedVideoAction, projectedProvider, projectedPort, ]; for (const projectedRecord of projectedRecords) { expect(projectedRecord).toBeDefined(); if (projectedRecord !== undefined) { expect(Object.hasOwn(projectedRecord, "extensionMetadata")).toBe(false); } } expect(Object.isFrozen(projectedProvider)).toBe(true); expect(Object.isFrozen(projectedPort)).toBe(true); if (projectedTimelineSurface.id === "timeline.surface") { expect( Object.hasOwn(projectedTimelineSurface.configuration, "extensionMetadata"), ).toBe(false); } extensionMetadata.tags.push("mutated"); for (const projectedRecord of projectedRecords) { if (projectedRecord !== undefined) { expect(Object.hasOwn(projectedRecord, "extensionMetadata")).toBe(false); } } }); });