import { cleanup, render, screen } from "@testing-library/react";
import { afterEach, describe, expect, it } from "vitest";
import { model3dModule } from "../../modules/built-ins/model-3d/model-3d-module";
import { defineToolcraft } from "../../schema/define-toolcraft";
import { ToolcraftApp } from "./toolcraft-app";
afterEach(cleanup);
const ProductModelCanvas = () => ;
function createModelCanvasSchema() {
return defineToolcraft({
base: {
identity: { id: "runtime-test", title: "Toolcraft App" },
canvas: { enabled: true, size: { height: 180, unit: "px", width: 320 } },
panels: {
controls: {
sections: [
{
id: "test-section-1",
controls: {
model: {
applicability: { mode: "always" as const },
assetKind: "model",
target: "source.model",
type: "fileDrop",
},
},
title: "Source",
},
],
title: "Controls",
},
},
},
modules: [model3dModule()],
});
}
describe("Toolcraft model presentation composition", () => {
it.each([
["default", undefined],
["explicit runtime", { mode: "runtime" as const }],
])(
"keeps the %s renderer mounted when generic media is disabled",
(_label, modelPresentation) => {
const { container } = render(
}
modelPresentation={modelPresentation}
renderDefaultCanvasMedia={false}
schema={createModelCanvasSchema()}
/>,
);
expect(
container.querySelector(
'[data-canvas-model-prewarm-target="source.model"]',
),
).not.toBeNull();
expect(screen.getByTestId("product-model-canvas")).toBeTruthy();
},
);
it("suppresses standard layers only for declared custom targets", () => {
const schema = defineToolcraft({
base: {
identity: { id: "runtime-test", title: "Toolcraft App" },
canvas: {
enabled: true,
size: { height: 180, unit: "px", width: 320 },
},
panels: {
controls: {
sections: [
{
id: "test-section-2",
controls: {
environment: {
applicability: { mode: "always" as const },
assetKind: "model",
target: "source.environment",
type: "fileDrop",
},
model: {
applicability: { mode: "always" as const },
assetKind: "model",
target: "source.model",
type: "fileDrop",
},
},
title: "Source",
},
],
title: "Controls",
},
},
},
modules: [model3dModule({ presentation: "custom" })],
});
const { container } = render(
}
modelPresentation={{
consumers: [{ id: "product-model", sourceTarget: "source.model" }],
mode: "custom",
}}
renderDefaultCanvasMedia={false}
schema={schema}
/>,
);
expect(
container.querySelector(
'[data-canvas-model-prewarm-target="source.model"]',
),
).toBeNull();
expect(
container.querySelector(
'[data-canvas-model-prewarm-target="source.environment"]',
),
).not.toBeNull();
expect(screen.getByTestId("product-model-canvas")).toBeTruthy();
});
});