seo-generator-server/tests/run-all-tests-with-reporter.js
StillHammer 4f60de68d6 Fix BatchProcessor initialization and add comprehensive test suite
- Fix BatchProcessor constructor to avoid server blocking during startup
- Add comprehensive integration tests for all modular combinations
- Enhance CLAUDE.md documentation with new test commands
- Update SelectiveLayers configuration for better LLM allocation
- Add AutoReporter system for test automation
- Include production workflow validation tests

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-19 14:17:49 +08:00

155 lines
4.7 KiB
JavaScript

#!/usr/bin/env node
/**
* LANCEUR GLOBAL DE TOUS LES TESTS AVEC AUTO-REPORTER
* Lance tous les TI et TU avec capture automatique des résultats et LLM calls
*/
import { spawn } from 'child_process';
import path from 'path';
import { fileURLToPath } from 'url';
import { AutoReporter } from './reporters/AutoReporter.js';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const projectRoot = path.join(__dirname, '..');
// Configuration globale AutoReporter
const globalReporter = new AutoReporter();
console.log('🚀 === LANCEMENT GLOBAL TESTS TI/TU AVEC AUTO-REPORTER ===');
// Categories de tests à exécuter - MASSIVE COVERAGE
const testCategories = [
{
name: '🎯 MASSIVE TI - 20 Stacks Applications Partielles',
patterns: [
'tests/massive-ti-stacks-only.test.js'
],
timeout: 2400000 // 40 minutes pour les 20 tests complets
},
{
name: 'Integration Tests (Core)',
patterns: [
'tests/fast-ti-auto-report.test.js',
'tests/single-llm-test.test.js'
],
timeout: 180000 // 3 minutes
},
{
name: 'LLM Tests (Selected)',
patterns: [
'tests/llm/llmmanager.contract.test.js',
'tests/llm/pipeline-dryrun.test.js'
],
timeout: 120000 // 2 minutes
},
{
name: 'Content Tests (Key)',
patterns: [
'tests/content/selective-enhancement.test.js'
],
timeout: 180000 // 3 minutes
},
{
name: 'Smoke Tests',
patterns: [
'tests/smoke/config.test.js'
],
timeout: 30000 // 30 seconds
}
];
async function runTestCategory(category) {
console.log(`\n🧪 === ${category.name} ===`);
for (const pattern of category.patterns) {
try {
console.log(`📋 Running: ${pattern}`);
const testProcess = spawn('node', [
'--test',
pattern,
'--test-timeout',
category.timeout.toString()
], {
cwd: projectRoot,
stdio: 'inherit',
shell: true
});
await new Promise((resolve, reject) => {
testProcess.on('close', (code) => {
if (code === 0) {
console.log(`${pattern} completed successfully`);
resolve();
} else {
console.log(`⚠️ ${pattern} completed with warnings/errors (code: ${code})`);
resolve(); // Continue même en cas d'erreur
}
});
testProcess.on('error', (err) => {
console.error(`❌ Error running ${pattern}:`, err.message);
resolve(); // Continue même en cas d'erreur
});
// Timeout de sécurité
setTimeout(() => {
console.log(`⏰ Timeout for ${pattern}, killing process`);
testProcess.kill('SIGTERM');
resolve();
}, category.timeout + 10000);
});
} catch (error) {
console.error(`❌ Failed to run ${pattern}:`, error.message);
}
}
console.log(`${category.name} category completed`);
}
async function main() {
console.log('🎯 Starting comprehensive test suite with AutoReporter...');
const startTime = Date.now();
// Exécuter toutes les catégories séquentiellement
for (const category of testCategories) {
await runTestCategory(category);
}
const endTime = Date.now();
const totalDuration = Math.round((endTime - startTime) / 1000);
console.log(`\n📊 === RÉSUMÉ GLOBAL ===`);
console.log(`⏱️ Durée totale: ${totalDuration}s`);
console.log(`🧪 Categories testées: ${testCategories.length}`);
console.log(`📈 Vérifiez les rapports dans: ./reports/`);
// Afficher les derniers rapports générés
console.log('\n📋 === DERNIERS RAPPORTS GÉNÉRÉS ===');
try {
const { spawn } = await import('child_process');
const lsProcess = spawn('ls', ['-la', 'reports/'], {
cwd: projectRoot,
stdio: 'inherit'
});
} catch (error) {
console.log('⚠️ Impossible d\'afficher les rapports:', error.message);
}
}
// Gestion des signaux pour cleanup
process.on('SIGINT', () => {
console.log('\n🛑 Interruption utilisateur, nettoyage...');
process.exit(0);
});
process.on('SIGTERM', () => {
console.log('\n🛑 Terminaison demandée, nettoyage...');
process.exit(0);
});
// Lancement
main().catch(console.error);