86 lines
2.5 KiB
JavaScript
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');
|