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");