import path from "node:path"; import { fileURLToPath } from "node:url"; import { describe, expect, it } from "vitest"; import { checkBoundaries } from "../scripts/check-boundaries.js"; const testDirectory = path.dirname(fileURLToPath(import.meta.url)); const fixtures = path.join(testDirectory, "fixtures", "boundaries"); describe("repository dependency boundaries", () => { it("accepts public contracts below Core", async () => { const result = await checkBoundaries(path.join(fixtures, "legal")); expect(result.violations).toEqual([]); }); it.each([ ["core-imports-module", "core-is-feature-agnostic"], ["module-imports-surface", "modules-use-public-platform-contracts"], ["cross-module-import", "modules-do-not-import-other-modules"], ["module-has-ui", "modules-do-not-own-ui"], ["cycle", "no-circular-source-dependencies"], ])("rejects %s", async (fixture, expectedRule) => { const result = await checkBoundaries(path.join(fixtures, fixture)); expect(result.violations.map((violation) => violation.rule)).toContain(expectedRule); }); it("rejects both component and stylesheet files inside a module", async () => { const result = await checkBoundaries(path.join(fixtures, "module-has-ui")); expect( result.violations.filter((violation) => violation.rule === "modules-do-not-own-ui"), ).toHaveLength(2); }); });