import { getWebsiteRouteContracts, ScenarioRole } from './RouteContractSpec'; import { WebsiteRouteManager, RouteAccess } from './WebsiteRouteManager'; import { routeMatchers } from '../../../apps/website/lib/routing/RouteConfig'; /** * Represents a single entry in the route coverage matrix. * This is a machine-readable artifact used to verify testing gaps. */ export interface RouteScenarioMatrixEntry { /** The resolved path of the route */ path: string; /** The access level required for this route */ accessLevel: RouteAccess; /** The scenarios that must be tested for this route */ requiredScenarios: ScenarioRole[]; /** Whether this route has parameter-based edge cases (e.g. 404s for bad IDs) */ hasParamEdgeCases: boolean; } /** * The RouteScenarioMatrix provides a structured view of all routes and their * required test scenarios. It is derived from the route contracts and inventory. */ export const RouteScenarioMatrix: RouteScenarioMatrixEntry[] = (() => { const contracts = getWebsiteRouteContracts(); const manager = new WebsiteRouteManager(); const edgeCases = manager.getParamEdgeCases(); return contracts.map(contract => { return { path: contract.path, accessLevel: contract.accessLevel, requiredScenarios: Object.keys(contract.scenarios) as ScenarioRole[], hasParamEdgeCases: edgeCases.some(ec => routeMatchers.matches(contract.path, ec.pathTemplate)), }; }); })();