const assert = require("assert"); const fs = require("fs"); const path = require("path"); const tests = []; const test = (name, fn) => tests.push({ name, fn }); const loadSource = (...parts) => { const filePath = path.join(__dirname, "..", "..", ...parts); return fs.readFileSync(filePath, "utf8"); }; const loadBreadcrumbSource = () => loadSource("components", "breadcrumbs.js"); const loadFactorySource = () => loadSource("lib", "routing", "breadcrumbRendererFactories.js"); test("breadcrumbs/factory module includes expected mapped route definitions", async () => { const source = loadFactorySource(); assert.strictEqual( source.includes("export const createSimpleRouteRenderers ="), true, "Expected simple route renderer factory export" ); assert.strictEqual( source.includes("export const createSimpleLinkTextPairRenderers ="), true, "Expected link-text pair renderer factory export" ); assert.strictEqual( source.includes("export const createSimpleMyPortalRouteRenderers ="), true, "Expected my-portal route renderer factory export" ); assert.strictEqual( source.includes('"/addresssearchresults": () => ('), true, "Expected /addresssearchresults to be mapped in createSimpleLinkTextPairRenderers" ); assert.strictEqual( source.includes('"/advancedsearchresults": () => ('), true, "Expected /advancedsearchresults to be mapped in createSimpleLinkTextPairRenderers" ); assert.strictEqual( source.includes('"/myportal/searchresults": () => ('), true, "Expected /myportal/searchresults to be mapped in createSimpleMyPortalRouteRenderers" ); assert.strictEqual( source.includes('"/myportal/viewall": () =>'), true, "Expected /myportal/viewall to be mapped in createSimpleMyPortalRouteRenderers" ); assert.strictEqual( source.includes('"/myportal/advancedsearchresults": () => ('), true, "Expected /myportal/advancedsearchresults to be mapped in createSimpleMyPortalRouteRenderers" ); assert.strictEqual( source.includes('"/myportal/addresssearchresults": () => ('), true, "Expected /myportal/addresssearchresults to be mapped in createSimpleMyPortalRouteRenderers" ); }); test("breadcrumbs/component composes mapped routes via imported factories and shared resolver", async () => { const source = loadBreadcrumbSource(); assert.strictEqual( source.includes('from "../lib/routing/breadcrumbRouteMaps"'), true, "Expected breadcrumbs to import shared breadcrumb route-map helper module" ); assert.strictEqual( source.includes('from "../lib/routing/breadcrumbRendererFactories"'), true, "Expected breadcrumbs to import breadcrumb renderer factories" ); assert.strictEqual( /createSimpleRouteRenderers/.test(source), true, "Expected breadcrumbs to reference createSimpleRouteRenderers" ); assert.strictEqual( /createSimpleLinkTextPairRenderers/.test(source), true, "Expected breadcrumbs to reference createSimpleLinkTextPairRenderers" ); assert.strictEqual( /createSimpleMyPortalRouteRenderers/.test(source), true, "Expected breadcrumbs to reference createSimpleMyPortalRouteRenderers" ); assert.strictEqual( /const\s+simpleRouteRenderersByPath\s*=\s*createSimpleRouteRenderers\s*\(/.test( source ), true, "Expected breadcrumbs to build simple route renderers from factory" ); assert.strictEqual( /const\s+simpleLinkTextPairRenderersByPath\s*=\s*createSimpleLinkTextPairRenderers\s*\(/.test( source ), true, "Expected breadcrumbs to build link-text pair renderers from factory" ); assert.strictEqual( /const\s+simpleMyPortalRouteRenderersByPath\s*=\s*createSimpleMyPortalRouteRenderers\s*\(/.test( source ), true, "Expected breadcrumbs to build my-portal route renderers from factory" ); assert.strictEqual( /const\s+mappedRouteRendererMaps\s*=\s*buildBreadcrumbRendererMaps\s*\(/.test( source ), true, "Expected grouped mapped route renderer map composition to use helper builder" ); assert.strictEqual( /return\s+resolveMappedRouteRendererByMaps\s*\(\s*path\s*,\s*mappedRouteRendererMaps\s*\)/.test( source ), true, "Expected resolver to delegate to shared route-map resolver helper" ); assert.strictEqual( /const\s+resolveMappedRouteRenderer\s*=\s*\(\s*path\s*\)\s*=>/.test( source ), true, "Expected unified mapped route resolver helper to exist" ); assert.strictEqual( /const\s+renderMappedRoute\s*=\s*\(\s*path\s*,\s*resolver\s*=\s*resolveMappedRouteRenderer\s*\)\s*=>/.test( source ), true, "Expected reusable renderMappedRoute helper to exist" ); assert.strictEqual( source.includes("{renderMappedRoute(pathname)}"), true, "Expected breadcrumb JSX to use single mapped route render invocation" ); assert.strictEqual( source.includes('isPath("/myportal/advancedsearchresults")'), false, "Expected /myportal/advancedsearchresults explicit branch to be removed after mapping" ); assert.strictEqual( source.includes('isPath("/myportal/addresssearchresults")'), false, "Expected /myportal/addresssearchresults explicit branch to be removed after mapping" ); }); test("breadcrumbs/map builder preserves route map ordering", async () => { const source = loadBreadcrumbSource(); const mapBuilderCallIndex = source.indexOf( "const mappedRouteRendererMaps = buildBreadcrumbRendererMaps({" ); assert.notStrictEqual( mapBuilderCallIndex, -1, "Expected grouped map builder call to exist" ); const mapBuilderSlice = source.slice( mapBuilderCallIndex, mapBuilderCallIndex + 500 ); const simpleRouteOrderIndex = mapBuilderSlice.indexOf( "simpleRouteRenderersByPath" ); const simpleLinkTextPairOrderIndex = mapBuilderSlice.indexOf( "simpleLinkTextPairRenderersByPath" ); const simpleMyPortalOrderIndex = mapBuilderSlice.indexOf( "simpleMyPortalRouteRenderersByPath" ); assert.strictEqual( simpleRouteOrderIndex >= 0 && simpleLinkTextPairOrderIndex > simpleRouteOrderIndex && simpleMyPortalOrderIndex > simpleLinkTextPairOrderIndex, true, "Expected map builder call to preserve explicit route-map ordering (simple -> link-text -> myportal)" ); }); test("breadcrumbs/dynamic callback branch remains explicit for myportal case incident route", async () => { const source = loadBreadcrumbSource(); assert.strictEqual( source.includes('isPath("/myportal/case/id/[incident]")'), true, "Expected dynamic /myportal/case/id/[incident] breadcrumb branch to remain explicit" ); assert.strictEqual( source.includes("router.back();"), true, "Expected callback-driven router.back() behavior to remain explicit" ); }); const run = async () => { let passed = 0; for (const currentTest of tests) { await currentTest.fn(); passed += 1; } console.log( `Phase 22 breadcrumbs-route-map tests passed (${passed}/${tests.length}).` ); }; module.exports = run; if (require.main === module) { run().catch((error) => { console.error(error); process.exit(1); }); }