- 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>
234 lines
8.1 KiB
JavaScript
234 lines
8.1 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert';
|
|
import { requireCommonJS } from './_helpers/commonjs-bridge.js';
|
|
import { TestReporter } from './reporters/TestReporter.js';
|
|
import { AutoReporter } from './reporters/AutoReporter.js';
|
|
|
|
/**
|
|
* TESTS D'INTÉGRATION RAPIDES - COMBINAISONS ESSENTIELLES
|
|
* Version optimisée des TI exhaustifs avec les combinaisons critiques
|
|
*/
|
|
|
|
// Reporter automatique pour génération de rapport
|
|
const reporter = new TestReporter();
|
|
|
|
const mockCsvData = {
|
|
mc0: 'plaque test intégration rapide',
|
|
t0: 'Test intégration modulaire rapide',
|
|
personality: {
|
|
nom: 'Marc',
|
|
style: 'technique',
|
|
description: 'Expert technique pour tests rapides'
|
|
}
|
|
};
|
|
|
|
const mockContent = {
|
|
'Titre_H1': 'Test titre avec contenu générique nécessitant amélioration technique',
|
|
'Introduction': 'Introduction générique avec vocabulaire basique à améliorer',
|
|
'Contenu_Principal': 'Contenu principal avec termes génériques optimal et efficace nécessitant précision technique',
|
|
'Conclusion': 'Conclusion basique qui nécessite enhancement professionnel'
|
|
};
|
|
|
|
// =========================================
|
|
// TESTS SELECTIVE ESSENTIELS (3 tests)
|
|
// =========================================
|
|
|
|
|
|
// Auto-Reporter Configuration
|
|
const autoReporter = new AutoReporter();
|
|
|
|
test('Fast TI: lightEnhancement (rapide)', { timeout: 30000 }, async () => {
|
|
const testName = 'lightEnhancement (rapide)';
|
|
const config = { stack: 'lightEnhancement', analysisMode: true, csvData: mockCsvData };
|
|
|
|
reporter.startTest(testName, config);
|
|
|
|
try {
|
|
const { applyPredefinedStack } = requireCommonJS('selective-enhancement/SelectiveLayers');
|
|
|
|
const result = await applyPredefinedStack(mockContent, 'lightEnhancement', {
|
|
csvData: mockCsvData,
|
|
analysisMode: true
|
|
});
|
|
|
|
assert.ok(result, 'Résultat lightEnhancement');
|
|
assert.ok(result.content, 'Contenu généré');
|
|
assert.equal(result.stats.stackName, 'lightEnhancement', 'Stack correct');
|
|
|
|
console.log(`✅ lightEnhancement: ${result.stats.totalModifications} modifications en ${result.stats.totalDuration}ms`);
|
|
|
|
reporter.endTest(result);
|
|
} catch (error) {
|
|
reporter.endTest(null, error.message);
|
|
throw error;
|
|
}
|
|
});
|
|
|
|
test('Fast TI: standardEnhancement (complet)', { timeout: 60000 }, async () => {
|
|
const testName = 'standardEnhancement (complet)';
|
|
const config = { stack: 'standardEnhancement', analysisMode: true };
|
|
|
|
reporter.startTest(testName, config);
|
|
|
|
try {
|
|
const { applyPredefinedStack } = requireCommonJS('selective-enhancement/SelectiveLayers');
|
|
|
|
const result = await applyPredefinedStack(mockContent, 'standardEnhancement', {
|
|
csvData: mockCsvData,
|
|
analysisMode: true
|
|
});
|
|
|
|
assert.ok(result, 'Résultat standardEnhancement');
|
|
assert.ok(result.content, 'Contenu généré');
|
|
assert.equal(result.stats.stackName, 'standardEnhancement', 'Stack correct');
|
|
|
|
console.log(`✅ standardEnhancement: ${result.stats.layers.length} couches, ${result.stats.totalModifications} modifications`);
|
|
|
|
reporter.endTest(result);
|
|
} catch (error) {
|
|
reporter.endTest(null, error.message);
|
|
throw error;
|
|
}
|
|
});
|
|
|
|
test('Fast TI: fullEnhancement (maximum)', { timeout: 90000 }, async () => {
|
|
const { applyPredefinedStack } = requireCommonJS('selective-enhancement/SelectiveLayers');
|
|
|
|
const result = await applyPredefinedStack(mockContent, 'fullEnhancement', {
|
|
csvData: mockCsvData,
|
|
analysisMode: true
|
|
});
|
|
|
|
assert.ok(result, 'Résultat fullEnhancement');
|
|
assert.ok(result.content, 'Contenu généré');
|
|
assert.equal(result.stats.stackName, 'fullEnhancement', 'Stack correct');
|
|
|
|
console.log(`✅ fullEnhancement: ${result.stats.layers.length} couches, ${result.stats.totalModifications} modifications`);
|
|
});
|
|
|
|
// =========================================
|
|
// TESTS ADVERSARIAL ESSENTIELS (2 tests)
|
|
// =========================================
|
|
|
|
test('Fast TI: Adversarial general', { timeout: 45000 }, async () => {
|
|
const { applyAdversarialLayer } = requireCommonJS('adversarial-generation/AdversarialCore');
|
|
|
|
const result = await applyAdversarialLayer(mockContent, {
|
|
detectorTarget: 'general',
|
|
method: 'regeneration',
|
|
intensity: 0.8
|
|
});
|
|
|
|
assert.ok(result, 'Résultat adversarial general');
|
|
console.log(`✅ Adversarial general: ${Object.keys(result).length} éléments traités`);
|
|
});
|
|
|
|
test('Fast TI: Adversarial gptZero', { timeout: 45000 }, async () => {
|
|
const { applyAdversarialLayer } = requireCommonJS('adversarial-generation/AdversarialCore');
|
|
|
|
const result = await applyAdversarialLayer(mockContent, {
|
|
detectorTarget: 'gptZero',
|
|
method: 'regeneration',
|
|
intensity: 1.0
|
|
});
|
|
|
|
assert.ok(result, 'Résultat adversarial gptZero');
|
|
console.log(`✅ Adversarial gptZero: anti-détection spécialisée`);
|
|
});
|
|
|
|
// =========================================
|
|
// TESTS PIPELINE ESSENTIELS (2 tests)
|
|
// =========================================
|
|
|
|
test('Fast TI: Pipeline Standard → Adversarial', { timeout: 120000 }, async () => {
|
|
const { applyPredefinedStack } = requireCommonJS('selective-enhancement/SelectiveLayers');
|
|
const { applyAdversarialLayer } = requireCommonJS('adversarial-generation/AdversarialCore');
|
|
|
|
// Étape 1: Selective standardEnhancement
|
|
const step1 = await applyPredefinedStack(mockContent, 'standardEnhancement', {
|
|
csvData: mockCsvData,
|
|
analysisMode: true
|
|
});
|
|
|
|
assert.ok(step1?.content, 'Étape 1 standard réussie');
|
|
|
|
// Étape 2: Adversarial sur résultat
|
|
const step2 = await applyAdversarialLayer(step1.content, {
|
|
detectorTarget: 'general',
|
|
method: 'enhancement',
|
|
intensity: 0.7
|
|
});
|
|
|
|
assert.ok(step2, 'Étape 2 adversarial réussie');
|
|
|
|
console.log(`✅ Pipeline Standard→Adversarial: ${step1.stats.totalModifications} selective + adversarial`);
|
|
});
|
|
|
|
test('Fast TI: Pipeline Full → GPTZero', { timeout: 120000 }, async () => {
|
|
const { applyPredefinedStack } = requireCommonJS('selective-enhancement/SelectiveLayers');
|
|
const { applyAdversarialLayer } = requireCommonJS('adversarial-generation/AdversarialCore');
|
|
|
|
// Étape 1: Selective fullEnhancement
|
|
const step1 = await applyPredefinedStack(mockContent, 'fullEnhancement', {
|
|
csvData: mockCsvData,
|
|
analysisMode: true
|
|
});
|
|
|
|
assert.ok(step1?.content, 'Étape 1 full réussie');
|
|
|
|
// Étape 2: Adversarial gptZero
|
|
const step2 = await applyAdversarialLayer(step1.content, {
|
|
detectorTarget: 'gptZero',
|
|
method: 'regeneration',
|
|
intensity: 1.0
|
|
});
|
|
|
|
assert.ok(step2, 'Étape 2 gptZero réussie');
|
|
|
|
console.log(`✅ Pipeline Full→GPTZero: 3 couches + anti-détection spécialisée`);
|
|
});
|
|
|
|
// =========================================
|
|
// TEST PERFORMANCE RAPIDE (1 test)
|
|
// =========================================
|
|
|
|
test('Fast TI: Performance Benchmark', { timeout: 90000 }, async () => {
|
|
const { applyPredefinedStack } = requireCommonJS('selective-enhancement/SelectiveLayers');
|
|
|
|
const benchmark = {
|
|
start: Date.now(),
|
|
stages: []
|
|
};
|
|
|
|
// Test light (rapide)
|
|
const lightStart = Date.now();
|
|
const lightResult = await applyPredefinedStack(mockContent, 'lightEnhancement', {
|
|
csvData: mockCsvData,
|
|
analysisMode: true
|
|
});
|
|
benchmark.stages.push({ name: 'light', duration: Date.now() - lightStart, modifications: lightResult.stats.totalModifications });
|
|
|
|
// Test standard (complet)
|
|
const standardStart = Date.now();
|
|
const standardResult = await applyPredefinedStack(mockContent, 'standardEnhancement', {
|
|
csvData: mockCsvData,
|
|
analysisMode: true
|
|
});
|
|
benchmark.stages.push({ name: 'standard', duration: Date.now() - standardStart, modifications: standardResult.stats.totalModifications });
|
|
|
|
benchmark.total = Date.now() - benchmark.start;
|
|
|
|
assert.ok(lightResult?.content && standardResult?.content, 'Benchmark réussi');
|
|
|
|
console.log(`✅ Benchmark Performance:`, benchmark.stages.map(s => `${s.name}:${s.duration}ms/${s.modifications}mod`).join(', '));
|
|
console.log(` 📊 Total: ${benchmark.total}ms`);
|
|
});
|
|
|
|
// =========================================
|
|
// GÉNÉRATION AUTOMATIQUE DU RAPPORT
|
|
// =========================================
|
|
|
|
test.after(() => {
|
|
// Génération automatique du rapport HTML détaillé
|
|
reporter.generateReport();
|
|
}); |