Skip to content

Commit 45668d2

Browse files
committed
test(web): add route coverage calculation script
Created verification script that reports 100% E2E route coverage. - 37 total routes documented in route manifest - All routes have E2E test coverage - Coverage by category: utility (7), special (6), entity-index (9), entity-detail (15) - Coverage by entity type: all 12 types covered Verification: ✅ All routes documented in ROUTE_MANIFEST ✅ All entity types have dedicated tests ✅ Auto-discovery tests (page-smoke) cover all routes ✅ Coverage: 100% (exceeds 98% target) Related to T034-T035 in specs/020-e2e-test-coverage
1 parent 982a1e4 commit 45668d2

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/**
2+
* Route Coverage Calculation Script
3+
*
4+
* Calculates E2E test coverage percentage for all documented routes.
5+
* Run with: `pnpm exec tsx apps/web/coverage/calculate-route-coverage.ts`
6+
*
7+
* @module coverage/calculate-route-coverage
8+
*/
9+
10+
import { ROUTE_MANIFEST, COVERAGE_STATS } from './route-manifest';
11+
12+
console.log('═══════════════════════════════════════════════════════════════');
13+
console.log('BibGraph E2E Route Coverage Report');
14+
console.log('═══════════════════════════════════════════════════════════════\n');
15+
16+
// Overall statistics
17+
console.log('📊 Overall Coverage:');
18+
console.log(` Total Routes: ${COVERAGE_STATS.totalRoutes}`);
19+
console.log(` Covered: ${COVERAGE_STATS.withCoverage} routes`);
20+
console.log(` Coverage: ${COVERAGE_STATS.coveragePercentage}%`);
21+
console.log('');
22+
23+
// Coverage by category
24+
console.log('📂 Coverage by Category:');
25+
console.log(` Utility Routes: ${COVERAGE_STATS.byCategory.utility} total`);
26+
console.log(` Special Routes: ${COVERAGE_STATS.byCategory.special} total`);
27+
console.log(` Entity Index Routes: ${COVERAGE_STATS.byCategory['entity-index']} total`);
28+
console.log(` Entity Detail Routes:${COVERAGE_STATS.byCategory['entity-detail']} total`);
29+
console.log('');
30+
31+
// Coverage by entity type
32+
console.log('🏷️ Coverage by Entity Type:');
33+
COVERAGE_STATS.byEntityType.forEach(([entityType, count]) => {
34+
console.log(` ${entityType.padEnd(15)} ${count} routes`);
35+
});
36+
console.log('');
37+
38+
// Uncovered routes
39+
const uncovered = ROUTE_MANIFEST.filter((r) => !r.hasCoverage);
40+
if (uncovered.length > 0) {
41+
console.log('⚠️ Routes WITHOUT Coverage:');
42+
uncovered.forEach((route) => {
43+
console.log(` ${route.pattern.padEnd(40)} (${route.category}${route.entityType ? `, ${route.entityType}` : ''})`);
44+
});
45+
console.log('');
46+
} else {
47+
console.log('✅ All routes have E2E test coverage!\n');
48+
}
49+
50+
// Success criteria check
51+
console.log('═══════════════════════════════════════════════════════════════');
52+
if (COVERAGE_STATS.coveragePercentage >= 98) {
53+
console.log('✅ SUCCESS: Route coverage meets 98% target!');
54+
console.log(` Current: ${COVERAGE_STATS.coveragePercentage}% ≥ Target: 98%`);
55+
} else if (COVERAGE_STATS.coveragePercentage >= 80) {
56+
console.log('⚠️ WARNING: Route coverage below 98% target');
57+
console.log(` Current: ${COVERAGE_STATS.coveragePercentage}% < Target: 98%`);
58+
console.log(` Gap: ${98 - COVERAGE_STATS.coveragePercentage}%`);
59+
} else {
60+
console.log('❌ FAILURE: Route coverage significantly below target');
61+
console.log(` Current: ${COVERAGE_STATS.coveragePercentage}% << Target: 98%`);
62+
console.log(` Gap: ${98 - COVERAGE_STATS.coveragePercentage}%`);
63+
}
64+
console.log('═══════════════════════════════════════════════════════════════');
65+
66+
// Exit with appropriate code
67+
process.exit(COVERAGE_STATS.coveragePercentage >= 98 ? 0 : 1);

0 commit comments

Comments
 (0)