Files
tokens-reef/tests/scripts/generate-report.ts
Developer 8b19f56ba4 fix: update E2E test API paths and payloads to match backend
- user-apikey-lifecycle: /api/v1/keys -> /api/v1/api-keys (24 occurrences)
- admin-users: balance payload uses balance+operation+notes
- admin-groups: rate-multiplier already uses correct format
2026-04-02 22:35:48 +08:00

98 lines
2.1 KiB
TypeScript

/**
* Test Report Generator
*
* Generates a comprehensive test report from all test results.
*/
import fs from 'fs';
import path from 'path';
interface TestResult {
title: string;
status: 'passed' | 'failed' | 'skipped';
duration: number;
error?: string;
}
interface Report {
timestamp: string;
summary: {
total: number;
passed: number;
failed: number;
skipped: number;
passRate: number;
};
results: TestResult[];
}
async function generateReport() {
console.log('📊 Generating test report...');
const resultsPath = path.join(__dirname, '../e2e/test-results/results.json');
if (!fs.existsSync(resultsPath)) {
console.log('⚠️ No test results found');
return;
}
const data = JSON.parse(fs.readFileSync(resultsPath, 'utf-8'));
const report: Report = {
timestamp: new Date().toISOString(),
summary: {
total: data.stats?.tests || 0,
passed: data.stats?.passed || 0,
failed: data.stats?.failed || 0,
skipped: data.stats?.skipped || 0,
passRate: ((data.stats?.passed || 0) / (data.stats?.tests || 1)) * 100
},
results: (data.tests || []).map((test: any) => ({
title: test.title,
status: test.status,
duration: test.duration,
error: test.error
}))
};
// Generate markdown report
const mdReport = generateMarkdownReport(report);
const mdPath = path.join(__dirname, '../e2e/TEST_REPORT.md');
fs.writeFileSync(mdPath, mdReport);
console.log(`✅ Report saved to: ${mdPath}`);
}
function generateMarkdownReport(report: Report): string {
return `# Sub2API Test Report
## Summary
| Metric | Value |
|--------|-------|
| Total Tests | ${report.summary.total} |
| Passed | ${report.summary.passed} ✅ |
| Failed | ${report.summary.failed} ❌ |
| Skipped | ${report.summary.skipped} ⏭️ |
| Pass Rate | ${report.summary.passRate.toFixed(1)}% |
## Timestamp
${report.timestamp}
## Failed Tests
${report.results.filter(r => r.status === 'failed').map(r => `### ${r.title}
\`\`\`
${r.error}
\`\`\`
`).join('\n')}
---
*Report generated at ${new Date().toISOString()}*
`;
}
generateReport().catch(console.error);