BRIDGE_Modul-S_prod / src /modules /naming.test.ts
BRIDGE Platform Agent
feat(platform): BRIDGE Modules hub with /modules/e and /modules/s routed workspaces
1955a0f
Raw History Blame Contribute Delete
1.67 kB
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);
});
});