Files
govoplan-core/webui/tests/help-context.test.ts
T

82 lines
3.2 KiB
TypeScript

import { helpContextForPathname, helpQueryForContext } from "../src/utils/helpContext";
import type { PlatformWebModule } from "../src/types";
function assertEqual(actual: string, expected: string, message: string): void {
if (actual !== expected) throw new Error(`${message}: expected ${expected}, got ${actual}`);
}
assertEqual(helpContextForPathname("/files").id, "files.list", "Files context");
assertEqual(helpContextForPathname("/mail").id, "mail.list", "Mail context");
assertEqual(
helpContextForPathname("/settings", "?section=mail-profiles").id,
"mail.profiles",
"Mail profile settings context"
);
assertEqual(
helpContextForPathname("/campaigns/campaign-1/attachments").id,
"campaign.attachments",
"Campaign attachment context"
);
assertEqual(helpContextForPathname("/address-book").id, "addresses.page", "Address book context");
const modules: PlatformWebModule[] = [
{
id: "calendar",
label: "Calendar",
version: "1",
routes: [{ path: "/calendar", surfaceId: "calendar.page", render: () => null }],
viewSurfaces: [{ id: "calendar.page", moduleId: "calendar", kind: "route", label: "Calendar" }],
helpContexts: [{
id: "calendar.page",
topic_id: "calendar.manage-calendars-and-events",
title: "Use calendars and events",
documentation_types: ["user"]
}]
},
{
id: "cases",
label: "Cases",
version: "1",
routes: [
{ path: "/cases", surfaceId: "cases.list", render: () => null },
{ path: "/cases/:caseId", surfaceId: "cases.detail", render: () => null }
],
viewSurfaces: [
{ id: "cases.list", moduleId: "cases", kind: "route", label: "Cases" },
{ id: "cases.detail", moduleId: "cases", kind: "route", label: "Case details" }
]
},
{
id: "admin",
label: "Administration",
version: "1",
viewSurfaces: [
{ id: "admin.section.system-modules", moduleId: "admin", kind: "section", label: "Modules" }
]
}
];
assertEqual(helpContextForPathname("/calendar", "", modules).id, "calendar.page", "Contributed route context");
if (!helpQueryForContext(helpContextForPathname("/calendar", "", modules)).includes("topic=calendar.manage-calendars-and-events")) {
throw new Error("Declared route help context did not resolve its documentation topic");
}
assertEqual(helpContextForPathname("/cases/case-1", "", modules).id, "cases.detail", "Dynamic route context");
assertEqual(
helpContextForPathname("/admin", "?section=system-modules", modules).id,
"admin.section.system-modules",
"Contributed admin section context"
);
assertEqual(helpContextForPathname("/future-module").id, "future-module.page", "Unknown route fallback context");
const focusedContextQuery = helpQueryForContext({
id: "calendar.field.title",
title: "Title",
route: "/calendar",
kind: "field",
moduleId: "calendar",
parentId: "calendar.page"
});
if (!focusedContextQuery.includes("context=calendar.field.title")) throw new Error("Focused context query is missing the control context");
if (!focusedContextQuery.includes("fallback_context=calendar.page")) throw new Error("Focused context query is missing the page fallback");
if (!focusedContextQuery.includes("module=calendar")) throw new Error("Focused context query is missing the owning module");