const assert = require("assert"); const fs = require("fs"); const path = require("path"); const vm = require("vm"); const tests = []; const test = (name, fn) => tests.push({ name, fn }); const helperModulePath = path.join( __dirname, "..", "..", "lib", "routing", "breadcrumbRouteMaps.js" ); const loadHelpers = () => { const source = fs.readFileSync(helperModulePath, "utf8"); const transformedSource = ` ${source .replace(/export const /g, "const ") .replace(/export function /g, "function ")} module.exports = { buildBreadcrumbRendererMaps, resolveMappedRouteRenderer }; `; const sandbox = { module: { exports: {} }, exports: {}, require, __dirname: path.dirname(helperModulePath), __filename: helperModulePath, console }; vm.runInNewContext(transformedSource, sandbox, { filename: helperModulePath }); return sandbox.module.exports; }; test("buildBreadcrumbRendererMaps returns grouped maps in explicit precedence order", () => { const { buildBreadcrumbRendererMaps } = loadHelpers(); const simpleRouteRenderersByPath = { "/alpha": () => "alpha" }; const simpleLinkTextPairRenderersByPath = { "/beta": () => "beta" }; const simpleMyPortalRouteRenderersByPath = { "/gamma": () => "gamma" }; const result = buildBreadcrumbRendererMaps({ simpleRouteRenderersByPath, simpleLinkTextPairRenderersByPath, simpleMyPortalRouteRenderersByPath }); assert.ok(Array.isArray(result), "Expected grouped maps array"); assert.strictEqual(result.length, 3, "Expected three grouped route maps"); assert.strictEqual( result[0], simpleRouteRenderersByPath, "Expected simple route renderers first" ); assert.strictEqual( result[1], simpleLinkTextPairRenderersByPath, "Expected simple link-text pair renderers second" ); assert.strictEqual( result[2], simpleMyPortalRouteRenderersByPath, "Expected my-portal route renderers third" ); }); test("resolveMappedRouteRenderer returns renderer from first matching grouped map", () => { const { buildBreadcrumbRendererMaps, resolveMappedRouteRenderer } = loadHelpers(); const firstRenderer = () => "first"; const secondRenderer = () => "second"; const maps = buildBreadcrumbRendererMaps({ simpleRouteRenderersByPath: { "/known": firstRenderer }, simpleLinkTextPairRenderersByPath: { "/known": secondRenderer }, simpleMyPortalRouteRenderersByPath: {} }); const result = resolveMappedRouteRenderer("/known", maps); assert.strictEqual( result, firstRenderer, "Expected resolver to use first matching map by precedence order" ); }); test("resolveMappedRouteRenderer returns renderer from later grouped map when earlier maps do not match", () => { const { buildBreadcrumbRendererMaps, resolveMappedRouteRenderer } = loadHelpers(); const myPortalRenderer = () => "myportal"; const maps = buildBreadcrumbRendererMaps({ simpleRouteRenderersByPath: {}, simpleLinkTextPairRenderersByPath: {}, simpleMyPortalRouteRenderersByPath: { "/myportal/searchresults": myPortalRenderer } }); const result = resolveMappedRouteRenderer("/myportal/searchresults", maps); assert.strictEqual( result, myPortalRenderer, "Expected resolver to return matching renderer from later grouped map" ); }); test("resolveMappedRouteRenderer returns null for unmapped path", () => { const { buildBreadcrumbRendererMaps, resolveMappedRouteRenderer } = loadHelpers(); const maps = buildBreadcrumbRendererMaps({ simpleRouteRenderersByPath: { "/known": () => "known" }, simpleLinkTextPairRenderersByPath: {}, simpleMyPortalRouteRenderersByPath: {} }); const result = resolveMappedRouteRenderer("/unknown", maps); assert.strictEqual( result, null, "Expected null when no grouped map contains the path" ); }); const run = async () => { let passed = 0; for (const currentTest of tests) { await currentTest.fn(); passed += 1; } console.log( `Phase 22 breadcrumb-route-maps-helper tests passed (${passed}/${tests.length}).` ); }; module.exports = run; if (require.main === module) { run().catch((error) => { console.error(error); process.exit(1); }); }