Files
autotest/editor/bootstrap-from-report.js
T
2026-05-22 13:25:01 +02:00

86 lines
2.5 KiB
JavaScript

#!/usr/bin/env node
/**
* Bootstrap script: extracts test cases from the existing report/test-plan.html
* and generates editor/data/testcases.json with the enriched structure.
*
* Run once: node editor/bootstrap-from-report.js
*/
const fs = require('fs');
const path = require('path');
const { enrichTestCase } = require('./lib/enrich');
const REPORTS_DIR = path.join(__dirname, 'output', 'reports');
const OUTPUT_FILE = path.join(__dirname, 'data', 'testcases.json');
console.log('Looking for latest automation report in output/reports/...');
// Find the latest *_qa_automation.html file
const files = fs.readdirSync(REPORTS_DIR)
.filter(f => f.endsWith('_qa_automation.html'))
.map(f => ({
name: f,
time: fs.statSync(path.join(REPORTS_DIR, f)).mtime.getTime()
}))
.sort((a, b) => b.time - a.time);
if (files.length === 0) {
console.error('ERROR: No qa_automation.html reports found in editor/output/reports/');
console.error('Please run the editor and use Export → Full Report at least once.');
process.exit(1);
}
const latestReport = path.join(REPORTS_DIR, files[0].name);
console.log(`Using latest report: ${latestReport}`);
const html = fs.readFileSync(latestReport, 'utf8');
// Extract the TESTS = [...] array using regex (simple but effective for this case)
const match = html.match(/const TESTS = (\[[\s\S]*?\]);/);
if (!match) {
console.error('ERROR: Could not find TESTS array in the report file.');
process.exit(1);
}
let tests;
try {
// eslint-disable-next-line no-eval
tests = eval('(' + match[1] + ')');
} catch (e) {
console.error('Failed to parse TESTS array:', e.message);
process.exit(1);
}
console.log(`Found ${tests.length} test cases.`);
// Convert + enrich with smart defaults (same logic used in the report modal)
const enriched = tests.map(t => {
const base = {
id: t.id,
group: t.group,
module: t.module,
action: t.action,
description: t.description,
status: t.status,
file: t.file,
manualReason: t.manualReason || undefined,
partialNotes: t.partialNotes || undefined
};
const rich = enrichTestCase(base);
return {
...base,
steps: rich.steps,
automatable: rich.automatable,
notYet: rich.notYet,
dependencies: rich.dependencies
};
});
fs.writeFileSync(OUTPUT_FILE, JSON.stringify(enriched, null, 2));
console.log(`✅ Generated ${OUTPUT_FILE} with ${enriched.length} fully enriched test cases.`);
console.log(' All automatable / not-automatable / steps / dependencies are pre-loaded.');
console.log('You can now start the editor: cd editor && npm start');