import { describe, expect, it } from "vitest"; import { defineConfig } from "./config.js"; import { fragmentsConfigSchema } from "./schema.js"; describe("fragments config paths", () => { it("accepts repo-relative app, design system, token, and topology paths", () => { const config = defineConfig({ app: { path: "apps/cloud", include: ["src/**/*.{ts,tsx}", "src/**/*.scss"], }, designSystem: { path: "libs/ui", packageName: "@fragments-sdk/ui", components: ["src/components/**/*.tsx"], }, tokens: { sources: [ { path: "libs/ui/src/styles/tokens.css", format: "css" }, { path: "libs/ui/src/tokens/**/*.json", format: "dtcg" }, ], }, topology: { version: 1, base: "app", areas: [ { id: "dashboard", name: "Dashboard", criticality: "high", owners: ["@product"], files: ["src/page/components/dashboard/**"], }, ], }, }); expect(config.app?.path).toBe("apps/cloud"); expect(config.designSystem?.packageName).toBe("@fragments-sdk/ui"); expect(config.tokens?.sources).toHaveLength(2); }); it("keeps legacy include and tokens.include configs valid", () => { const result = fragmentsConfigSchema.safeParse({ include: ["src/**/*.fragment.tsx"], components: ["src/**/*.tsx"], tokens: { include: ["src/styles/theme.scss"], format: "scss", }, }); expect(result.success).toBe(true); }); it.each([ ["/tmp/app"], ["../libs/ui"], ["libs/../ui"], ["~/repo/app"], ["C:\\repo\\app"], ["libs\\ui"], ])("rejects non-portable path %s", (path) => { const result = fragmentsConfigSchema.safeParse({ app: { path }, }); expect(result.success).toBe(false); }); it("requires at least one token include or source when tokens is present", () => { const result = fragmentsConfigSchema.safeParse({ tokens: {}, }); expect(result.success).toBe(false); }); });