import { describe, it, expect } from "vitest"; import { makeFrontendData } from "./fixtures"; import { generateContainerTemplate } from "../templates/components/container.template"; import { generateListContainerTemplate } from "../templates/components/list-container.template"; import { generateContentTemplate } from "../templates/components/content.template"; describe("container template", () => { it("uses RoundPageContainer with tabs and id, not details prop, and renders Content", () => { const out = generateContainerTemplate(makeFrontendData()); expect(out).toContain("tabs: Tab[]"); expect(out).toContain("id={widget.id}"); expect(out).not.toContain("details={"); expect(out).not.toContain("WidgetDetails"); expect(out).toContain(""); }); it("emits an Activity tab when containerTabs.activity is true and no Tasks tab", () => { const out = generateContainerTemplate(makeFrontendData({ containerTabs: { activity: true, relations: [] } })); expect(out).toContain(""); expect(out).not.toContain("TaskProvider"); }); it("omits the Activity tab when containerTabs.activity is false", () => { const out = generateContainerTemplate(makeFrontendData({ containerTabs: { activity: false, relations: [] } })); expect(out).not.toContain("ActivityFeed"); }); it("emits a relation tab when containerTabs.relations has an entry", () => { const out = generateContainerTemplate(makeFrontendData({ containerTabs: { activity: true, relations: [{ module: "Quote", listProp: "widget", directory: "sales" }] }, })); expect(out).toContain('import QuoteList from "@/features/sales/quote/components/lists/QuoteList"'); expect(out).toContain("key: Modules.Quote"); expect(out).toContain(""); }); it("gates default export on hasPermissionToModule", () => { const out = generateContainerTemplate(makeFrontendData()); expect(out).toContain("hasPermissionToModule({ module: Modules.Widget, action: Action.Delete, data: widget })"); }); }); describe("list-container template", () => { it("always renders fullWidth", () => { const out = generateListContainerTemplate(makeFrontendData()); expect(out).toContain(""); expect(out).toContain(""); }); }); describe("content template", () => { it("is always generated (returns a string) and renders AttributeElement", () => { const out = generateContentTemplate(makeFrontendData()); expect(typeof out).toBe("string"); expect(out).toContain("export function WidgetContent"); expect(out).toContain("AttributeElement"); }); });