Extract additional routes in to shared renderer factory
This commit is contained in:
@@ -57,15 +57,23 @@ test("buildBreadcrumbRendererMaps returns grouped maps in explicit precedence or
|
||||
const simpleMyPortalRouteRenderersByPath = {
|
||||
"/gamma": () => "gamma"
|
||||
};
|
||||
const caseDetailRouteRenderersByPath = {
|
||||
"/delta": () => "delta"
|
||||
};
|
||||
const detailAndAccountRouteRenderersByPath = {
|
||||
"/epsilon": () => "epsilon"
|
||||
};
|
||||
|
||||
const result = buildBreadcrumbRendererMaps({
|
||||
simpleRouteRenderersByPath,
|
||||
simpleLinkTextPairRenderersByPath,
|
||||
simpleMyPortalRouteRenderersByPath
|
||||
simpleMyPortalRouteRenderersByPath,
|
||||
caseDetailRouteRenderersByPath,
|
||||
detailAndAccountRouteRenderersByPath
|
||||
});
|
||||
|
||||
assert.ok(Array.isArray(result), "Expected grouped maps array");
|
||||
assert.strictEqual(result.length, 3, "Expected three grouped route maps");
|
||||
assert.strictEqual(result.length, 5, "Expected five grouped route maps");
|
||||
assert.strictEqual(
|
||||
result[0],
|
||||
simpleRouteRenderersByPath,
|
||||
@@ -81,6 +89,16 @@ test("buildBreadcrumbRendererMaps returns grouped maps in explicit precedence or
|
||||
simpleMyPortalRouteRenderersByPath,
|
||||
"Expected my-portal route renderers third"
|
||||
);
|
||||
assert.strictEqual(
|
||||
result[3],
|
||||
caseDetailRouteRenderersByPath,
|
||||
"Expected case detail route renderers fourth"
|
||||
);
|
||||
assert.strictEqual(
|
||||
result[4],
|
||||
detailAndAccountRouteRenderersByPath,
|
||||
"Expected detail and account route renderers fifth"
|
||||
);
|
||||
});
|
||||
|
||||
test("resolveMappedRouteRenderer returns renderer from first matching grouped map", () => {
|
||||
@@ -97,7 +115,9 @@ test("resolveMappedRouteRenderer returns renderer from first matching grouped ma
|
||||
simpleLinkTextPairRenderersByPath: {
|
||||
"/known": secondRenderer
|
||||
},
|
||||
simpleMyPortalRouteRenderersByPath: {}
|
||||
simpleMyPortalRouteRenderersByPath: {},
|
||||
caseDetailRouteRenderersByPath: {},
|
||||
detailAndAccountRouteRenderersByPath: {}
|
||||
});
|
||||
|
||||
const result = resolveMappedRouteRenderer("/known", maps);
|
||||
@@ -113,21 +133,23 @@ test("resolveMappedRouteRenderer returns renderer from later grouped map when ea
|
||||
const { buildBreadcrumbRendererMaps, resolveMappedRouteRenderer } =
|
||||
loadHelpers();
|
||||
|
||||
const myPortalRenderer = () => "myportal";
|
||||
const detailRenderer = () => "detail";
|
||||
|
||||
const maps = buildBreadcrumbRendererMaps({
|
||||
simpleRouteRenderersByPath: {},
|
||||
simpleLinkTextPairRenderersByPath: {},
|
||||
simpleMyPortalRouteRenderersByPath: {
|
||||
"/myportal/searchresults": myPortalRenderer
|
||||
simpleMyPortalRouteRenderersByPath: {},
|
||||
caseDetailRouteRenderersByPath: {},
|
||||
detailAndAccountRouteRenderersByPath: {
|
||||
"/account/personaldetails": detailRenderer
|
||||
}
|
||||
});
|
||||
|
||||
const result = resolveMappedRouteRenderer("/myportal/searchresults", maps);
|
||||
const result = resolveMappedRouteRenderer("/account/personaldetails", maps);
|
||||
|
||||
assert.strictEqual(
|
||||
result,
|
||||
myPortalRenderer,
|
||||
detailRenderer,
|
||||
"Expected resolver to return matching renderer from later grouped map"
|
||||
);
|
||||
});
|
||||
@@ -141,7 +163,9 @@ test("resolveMappedRouteRenderer returns null for unmapped path", () => {
|
||||
"/known": () => "known"
|
||||
},
|
||||
simpleLinkTextPairRenderersByPath: {},
|
||||
simpleMyPortalRouteRenderersByPath: {}
|
||||
simpleMyPortalRouteRenderersByPath: {},
|
||||
caseDetailRouteRenderersByPath: {},
|
||||
detailAndAccountRouteRenderersByPath: {}
|
||||
});
|
||||
|
||||
const result = resolveMappedRouteRenderer("/unknown", maps);
|
||||
|
||||
@@ -36,6 +36,18 @@ test("breadcrumbs/factory module includes expected mapped route definitions", as
|
||||
"Expected my-portal route renderer factory export"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes("export const createCaseDetailRouteRenderers ="),
|
||||
true,
|
||||
"Expected case detail route renderer factory export"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes("export const createDetailAndAccountRouteRenderers ="),
|
||||
true,
|
||||
"Expected detail and account route renderer factory export"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('"/addresssearchresults": () => ('),
|
||||
true,
|
||||
@@ -71,6 +83,60 @@ test("breadcrumbs/factory module includes expected mapped route definitions", as
|
||||
true,
|
||||
"Expected /myportal/addresssearchresults to be mapped in createSimpleMyPortalRouteRenderers"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('"/case/[ticketnumber]": () =>'),
|
||||
true,
|
||||
"Expected /case/[ticketnumber] to be mapped in createCaseDetailRouteRenderers"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('"/myportal/case/[ticketnumber]": () =>'),
|
||||
true,
|
||||
"Expected /myportal/case/[ticketnumber] to be mapped in createCaseDetailRouteRenderers"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('"/myportal/dnsdetails": () =>'),
|
||||
true,
|
||||
"Expected /myportal/dnsdetails to be mapped in createDetailAndAccountRouteRenderers"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('"/myportal/dns/[developmentName]": () =>'),
|
||||
true,
|
||||
"Expected /myportal/dns/[developmentName] to be mapped in createDetailAndAccountRouteRenderers"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('"/dnsdetails": () =>'),
|
||||
true,
|
||||
"Expected /dnsdetails to be mapped in createDetailAndAccountRouteRenderers"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('"/dns/[developmentName]": () =>'),
|
||||
true,
|
||||
"Expected /dns/[developmentName] to be mapped in createDetailAndAccountRouteRenderers"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('"/dns/application-view": () =>'),
|
||||
true,
|
||||
"Expected /dns/application-view to be mapped in createDetailAndAccountRouteRenderers"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('"/account/personaldetails": () =>'),
|
||||
true,
|
||||
"Expected /account/personaldetails to be mapped in createDetailAndAccountRouteRenderers"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('"/account/changepassword": () =>'),
|
||||
true,
|
||||
"Expected /account/changepassword to be mapped in createDetailAndAccountRouteRenderers"
|
||||
);
|
||||
});
|
||||
|
||||
test("breadcrumbs/component composes mapped routes via imported factories and shared resolver", async () => {
|
||||
@@ -106,6 +172,18 @@ test("breadcrumbs/component composes mapped routes via imported factories and sh
|
||||
"Expected breadcrumbs to reference createSimpleMyPortalRouteRenderers"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
/createCaseDetailRouteRenderers/.test(source),
|
||||
true,
|
||||
"Expected breadcrumbs to reference createCaseDetailRouteRenderers"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
/createDetailAndAccountRouteRenderers/.test(source),
|
||||
true,
|
||||
"Expected breadcrumbs to reference createDetailAndAccountRouteRenderers"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
/const\s+simpleRouteRenderersByPath\s*=\s*createSimpleRouteRenderers\s*\(/.test(
|
||||
source
|
||||
@@ -130,6 +208,22 @@ test("breadcrumbs/component composes mapped routes via imported factories and sh
|
||||
"Expected breadcrumbs to build my-portal route renderers from factory"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
/const\s+caseDetailRouteRenderersByPath\s*=\s*createCaseDetailRouteRenderers\s*\(/.test(
|
||||
source
|
||||
),
|
||||
true,
|
||||
"Expected breadcrumbs to build case detail route renderers from factory"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
/const\s+detailAndAccountRouteRenderersByPath\s*=\s*createDetailAndAccountRouteRenderers\s*\(/.test(
|
||||
source
|
||||
),
|
||||
true,
|
||||
"Expected breadcrumbs to build detail and account route renderers from factory"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
/const\s+mappedRouteRendererMaps\s*=\s*buildBreadcrumbRendererMaps\s*\(/.test(
|
||||
source
|
||||
@@ -179,6 +273,60 @@ test("breadcrumbs/component composes mapped routes via imported factories and sh
|
||||
false,
|
||||
"Expected /myportal/addresssearchresults explicit branch to be removed after mapping"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('isPath("/case/[ticketnumber]")'),
|
||||
false,
|
||||
"Expected /case/[ticketnumber] explicit branch to be removed after mapping"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('isPath("/myportal/case/[ticketnumber]")'),
|
||||
false,
|
||||
"Expected /myportal/case/[ticketnumber] explicit branch to be removed after mapping"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('isPath("/myportal/dnsdetails")'),
|
||||
false,
|
||||
"Expected /myportal/dnsdetails explicit branch to be removed after mapping"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('isPath("/myportal/dns/[developmentName]")'),
|
||||
false,
|
||||
"Expected /myportal/dns/[developmentName] explicit branch to be removed after mapping"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('isPath("/dnsdetails")'),
|
||||
false,
|
||||
"Expected /dnsdetails explicit branch to be removed after mapping"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('isPath("/dns/[developmentName]")'),
|
||||
false,
|
||||
"Expected /dns/[developmentName] explicit branch to be removed after mapping"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('isPath("/dns/application-view")'),
|
||||
false,
|
||||
"Expected /dns/application-view explicit branch to be removed after mapping"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('isPath("/account/personaldetails")'),
|
||||
false,
|
||||
"Expected /account/personaldetails explicit branch to be removed after mapping"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
source.includes('isPath("/account/changepassword")'),
|
||||
false,
|
||||
"Expected /account/changepassword explicit branch to be removed after mapping"
|
||||
);
|
||||
});
|
||||
|
||||
test("breadcrumbs/map builder preserves route map ordering", async () => {
|
||||
@@ -196,7 +344,7 @@ test("breadcrumbs/map builder preserves route map ordering", async () => {
|
||||
|
||||
const mapBuilderSlice = source.slice(
|
||||
mapBuilderCallIndex,
|
||||
mapBuilderCallIndex + 500
|
||||
mapBuilderCallIndex + 700
|
||||
);
|
||||
|
||||
const simpleRouteOrderIndex = mapBuilderSlice.indexOf(
|
||||
@@ -208,13 +356,21 @@ test("breadcrumbs/map builder preserves route map ordering", async () => {
|
||||
const simpleMyPortalOrderIndex = mapBuilderSlice.indexOf(
|
||||
"simpleMyPortalRouteRenderersByPath"
|
||||
);
|
||||
const caseDetailOrderIndex = mapBuilderSlice.indexOf(
|
||||
"caseDetailRouteRenderersByPath"
|
||||
);
|
||||
const detailAndAccountOrderIndex = mapBuilderSlice.indexOf(
|
||||
"detailAndAccountRouteRenderersByPath"
|
||||
);
|
||||
|
||||
assert.strictEqual(
|
||||
simpleRouteOrderIndex >= 0 &&
|
||||
simpleLinkTextPairOrderIndex > simpleRouteOrderIndex &&
|
||||
simpleMyPortalOrderIndex > simpleLinkTextPairOrderIndex,
|
||||
simpleMyPortalOrderIndex > simpleLinkTextPairOrderIndex &&
|
||||
caseDetailOrderIndex > simpleMyPortalOrderIndex &&
|
||||
detailAndAccountOrderIndex > caseDetailOrderIndex,
|
||||
true,
|
||||
"Expected map builder call to preserve explicit route-map ordering (simple -> link-text -> myportal)"
|
||||
"Expected map builder call to preserve explicit route-map ordering (simple -> link-text -> myportal -> case detail -> detail/account)"
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user