import { describe, test, expect, beforeAll } from "vitest" import { existsSync, rmSync, mkdirSync } from "node:fs" import path from "node:path" import { fileURLToPath } from "node:url" import { loadBrand } from "../src/config" import { loadTemplate, buildSvg } from "../src/render" import { parseSlots } from "../src/slot-parser" import { resolveSlotContent } from "../src/resolve" const __dirname = path.dirname(fileURLToPath(import.meta.url)) const DRAW_IMAGE_DIR = path.resolve(__dirname, "..") beforeAll(() => { const tmp = "/tmp/draw-image-slot" if (existsSync(tmp)) rmSync(tmp, { recursive: true, force: true }) mkdirSync(tmp, { recursive: true }) }) describe("integration — slot resolution", () => { test("icon=mic resolves lucide icon and recolors to accent", () => { const brand = loadBrand(DRAW_IMAGE_DIR) const templateSvg = loadTemplate(DRAW_IMAGE_DIR, "cover") const slots = parseSlots(templateSvg) const iconSlot = slots.find((s) => s.name === "icon")! expect(iconSlot).toBeDefined() const resolved = resolveSlotContent(iconSlot, brand, DRAW_IMAGE_DIR, "mic") expect(resolved).not.toBeNull() expect(resolved!.inner).toContain(" { const brand = loadBrand(DRAW_IMAGE_DIR) const templateSvg = loadTemplate(DRAW_IMAGE_DIR, "cover") const slots = parseSlots(templateSvg) const iconSlot = slots.find((s) => s.name === "icon")! const resolved = resolveSlotContent(iconSlot, brand, DRAW_IMAGE_DIR, "play") expect(resolved).not.toBeNull() expect(resolved!.inner).toContain(" { const templateSvg = loadTemplate(DRAW_IMAGE_DIR, "cover") const slots = parseSlots(templateSvg) const badgeSlot = slots.find((s) => s.name === "badge")! expect(badgeSlot.bg).toBe("surface") expect(badgeSlot.border).toBe("accent") expect(badgeSlot.radius).toBe(0.5) }) test("buildSvg inserts slot content into final SVG", () => { const brand = loadBrand(DRAW_IMAGE_DIR) const templateSvg = loadTemplate(DRAW_IMAGE_DIR, "cover") const svg = buildSvg(templateSvg, brand, { template: "cover", title: "With Icon", slots: { icon: "mic" }, }, DRAW_IMAGE_DIR) expect(svg).toContain(" { const brand = loadBrand(DRAW_IMAGE_DIR) const templateSvg = loadTemplate(DRAW_IMAGE_DIR, "cover") const svg = buildSvg(templateSvg, brand, { template: "cover", title: "No Icon" }, DRAW_IMAGE_DIR) expect(svg).toContain("No Icon") expect(svg).not.toContain("