refactor(breadcrumbs): extract callback route renderers into mapped groups
This commit is contained in:
@@ -60,6 +60,9 @@ test("buildBreadcrumbRendererMaps returns grouped maps in explicit precedence or
|
||||
const newAppealRouteRenderersByPath = {
|
||||
"/eta": () => "eta"
|
||||
};
|
||||
const callbackRouteRenderersByPath = {
|
||||
"/theta": () => "theta"
|
||||
};
|
||||
const caseDetailRouteRenderersByPath = {
|
||||
"/delta": () => "delta"
|
||||
};
|
||||
@@ -72,12 +75,13 @@ test("buildBreadcrumbRendererMaps returns grouped maps in explicit precedence or
|
||||
simpleLinkTextPairRenderersByPath,
|
||||
simpleMyPortalRouteRenderersByPath,
|
||||
newAppealRouteRenderersByPath,
|
||||
callbackRouteRenderersByPath,
|
||||
caseDetailRouteRenderersByPath,
|
||||
detailAndAccountRouteRenderersByPath
|
||||
});
|
||||
|
||||
assert.ok(Array.isArray(result), "Expected grouped maps array");
|
||||
assert.strictEqual(result.length, 6, "Expected six grouped route maps");
|
||||
assert.strictEqual(result.length, 7, "Expected seven grouped route maps");
|
||||
assert.strictEqual(
|
||||
result[0],
|
||||
simpleRouteRenderersByPath,
|
||||
@@ -100,13 +104,18 @@ test("buildBreadcrumbRendererMaps returns grouped maps in explicit precedence or
|
||||
);
|
||||
assert.strictEqual(
|
||||
result[4],
|
||||
caseDetailRouteRenderersByPath,
|
||||
"Expected case detail route renderers fifth"
|
||||
callbackRouteRenderersByPath,
|
||||
"Expected callback route renderers fifth"
|
||||
);
|
||||
assert.strictEqual(
|
||||
result[5],
|
||||
caseDetailRouteRenderersByPath,
|
||||
"Expected case detail route renderers sixth"
|
||||
);
|
||||
assert.strictEqual(
|
||||
result[6],
|
||||
detailAndAccountRouteRenderersByPath,
|
||||
"Expected detail and account route renderers sixth"
|
||||
"Expected detail and account route renderers seventh"
|
||||
);
|
||||
});
|
||||
|
||||
@@ -126,6 +135,7 @@ test("resolveMappedRouteRenderer returns renderer from first matching grouped ma
|
||||
},
|
||||
simpleMyPortalRouteRenderersByPath: {},
|
||||
newAppealRouteRenderersByPath: {},
|
||||
callbackRouteRenderersByPath: {},
|
||||
caseDetailRouteRenderersByPath: {},
|
||||
detailAndAccountRouteRenderersByPath: {}
|
||||
});
|
||||
@@ -153,6 +163,7 @@ test("resolveMappedRouteRenderer returns renderer from later grouped map when ea
|
||||
},
|
||||
simpleMyPortalRouteRenderersByPath: {},
|
||||
caseDetailRouteRenderersByPath: {},
|
||||
callbackRouteRenderersByPath: {},
|
||||
detailAndAccountRouteRenderersByPath: {
|
||||
"/account/personaldetails": detailRenderer
|
||||
}
|
||||
@@ -178,6 +189,7 @@ test("resolveMappedRouteRenderer returns null for unmapped path", () => {
|
||||
simpleLinkTextPairRenderersByPath: {},
|
||||
simpleMyPortalRouteRenderersByPath: {},
|
||||
newAppealRouteRenderersByPath: {},
|
||||
callbackRouteRenderersByPath: {},
|
||||
caseDetailRouteRenderersByPath: {},
|
||||
detailAndAccountRouteRenderersByPath: {}
|
||||
});
|
||||
@@ -206,6 +218,7 @@ test("resolveMappedRouteRenderer skips invalid map entries and non-function rend
|
||||
"/known": validRenderer
|
||||
},
|
||||
newAppealRouteRenderersByPath: undefined,
|
||||
callbackRouteRenderersByPath: {},
|
||||
caseDetailRouteRenderersByPath: {},
|
||||
detailAndAccountRouteRenderersByPath: {}
|
||||
});
|
||||
|
||||
@@ -42,6 +42,12 @@ test("breadcrumbs/factory module includes expected mapped route definitions", as
|
||||
"Expected new-appeal route renderer factory export"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes("export const createCallbackRouteRenderers ="),
|
||||
true,
|
||||
"Expected callback route renderer factory export"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes("export const createCaseDetailRouteRenderers ="),
|
||||
true,
|
||||
@@ -96,6 +102,18 @@ test("breadcrumbs/factory module includes expected mapped route definitions", as
|
||||
"Expected /newappeal/selectappeal to be mapped in createNewAppealRouteRenderers"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('"/myportal/case/id/[incident]": () => ('),
|
||||
true,
|
||||
"Expected /myportal/case/id/[incident] to be mapped in createCallbackRouteRenderers"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('"/case": () => ('),
|
||||
true,
|
||||
"Expected /case to be mapped in createCallbackRouteRenderers"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('"/case/[ticketnumber]": () =>'),
|
||||
true,
|
||||
@@ -185,7 +203,7 @@ test("breadcrumbs/component composes mapped routes via imported factories and sh
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
/const\s+\{[\s\S]*simpleRouteRenderersByPath[\s\S]*newAppealRouteRenderersByPath[\s\S]*detailAndAccountRouteRenderersByPath[\s\S]*\}\s*=\s*createMappedRouteRendererGroups\s*\(/.test(
|
||||
/const\s+\{[\s\S]*simpleRouteRenderersByPath[\s\S]*newAppealRouteRenderersByPath[\s\S]*callbackRouteRenderersByPath[\s\S]*detailAndAccountRouteRenderersByPath[\s\S]*\}\s*=\s*createMappedRouteRendererGroups\s*\(/.test(
|
||||
source
|
||||
),
|
||||
true,
|
||||
@@ -351,6 +369,9 @@ test("breadcrumbs/map builder preserves route map ordering", async () => {
|
||||
const newAppealOrderIndex = mapBuilderSlice.indexOf(
|
||||
"newAppealRouteRenderersByPath"
|
||||
);
|
||||
const callbackOrderIndex = mapBuilderSlice.indexOf(
|
||||
"callbackRouteRenderersByPath"
|
||||
);
|
||||
const caseDetailOrderIndex = mapBuilderSlice.indexOf(
|
||||
"caseDetailRouteRenderersByPath"
|
||||
);
|
||||
@@ -363,26 +384,33 @@ test("breadcrumbs/map builder preserves route map ordering", async () => {
|
||||
simpleLinkTextPairOrderIndex > simpleRouteOrderIndex &&
|
||||
simpleMyPortalOrderIndex > simpleLinkTextPairOrderIndex &&
|
||||
newAppealOrderIndex > simpleMyPortalOrderIndex &&
|
||||
caseDetailOrderIndex > newAppealOrderIndex &&
|
||||
callbackOrderIndex > newAppealOrderIndex &&
|
||||
caseDetailOrderIndex > callbackOrderIndex &&
|
||||
detailAndAccountOrderIndex > caseDetailOrderIndex,
|
||||
true,
|
||||
"Expected map builder call to preserve explicit route-map ordering (simple -> link-text -> myportal -> new-appeal -> case detail -> detail/account)"
|
||||
"Expected map builder call to preserve explicit route-map ordering (simple -> link-text -> myportal -> new-appeal -> callback -> case detail -> detail/account)"
|
||||
);
|
||||
});
|
||||
|
||||
test("breadcrumbs/dynamic callback branch remains explicit for myportal case incident route", async () => {
|
||||
test("breadcrumbs/callback-mapped branches preserve router.back behavior", 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"
|
||||
false,
|
||||
"Expected /myportal/case/id/[incident] explicit branch to be removed after callback mapping"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('isPath("/case")'),
|
||||
false,
|
||||
"Expected /case explicit branch to be removed after callback mapping"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes("router.back();"),
|
||||
true,
|
||||
"Expected callback-driven router.back() behavior to remain explicit"
|
||||
"Expected callback-driven router.back() behavior to remain preserved"
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user