import { describe, it, expect } from "vitest"; import { MODULES, MODULE_IDS, moduleHref, isModuleId } from "./registry"; /** * Naming migration gate: `modul` → `modules` everywhere, case-aware, * zero stragglers (acceptance criterion). */ describe("modules naming migration", () => { it("registers exactly Module E and Module S", () => { expect(MODULE_IDS).toEqual(["e", "s"]); expect(MODULES.e.label).toBe("Module E"); expect(MODULES.s.label).toBe("Module S"); }); it("routes live under the /modules namespace", () => { expect(MODULES.e.basePath).toBe("/modules/e"); expect(MODULES.s.basePath).toBe("/modules/s"); expect(moduleHref("e", "campaigns")).toBe("/modules/e/campaigns"); expect(moduleHref("s", "campaigns")).toBe("/modules/s/campaigns"); expect(moduleHref("e")).toBe("/modules/e"); }); it("contains zero `modul` stragglers (case-aware) in labels, wordmarks and routes", () => { const strings: string[] = []; MODULE_IDS.forEach((id) => { const m = MODULES[id]; strings.push(m.label, m.wordmark, m.basePath, m.engineLabel, m.blurb); m.nav.forEach((n) => strings.push(n.name, n.path)); }); const stragglers = strings.filter((s) => /modul(?!e)/i.test(s)); expect(stragglers).toEqual([]); }); it("wordmarks carry the migrated Module prefix", () => { expect(MODULES.e.wordmark).toBe("ModuleE"); expect(MODULES.s.wordmark).toBe("ModuleS"); }); it("module id guard works", () => { expect(isModuleId("e")).toBe(true); expect(isModuleId("s")).toBe(true); expect(isModuleId("x")).toBe(false); expect(isModuleId(undefined)).toBe(false); }); });