seo-generator-server/tests/basic-validation.test.js

148 lines
5.5 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert';
import { requireCommonJS } from './_helpers/commonjs-bridge.js';
// Tests basiques sans appels API ni WebSocket
test('Structure: Prompts nettoyés sans mentions polluantes', () => {
const { createBatchBasePrompt } = requireCommonJS('SelectiveEnhancement');
const mockElements = [{
tag: '|Titre_H1_1|',
element: { type: 'titre_h1', name: 'Titre_H1_1' }
}];
const mockCsvData = {
mc0: 'plaque personnalisée',
personality: {
nom: 'Marc',
style: 'technique',
description: 'Expert technique'
}
};
const prompt = createBatchBasePrompt(mockElements, 'titre', mockCsvData);
// Vérifier structure propre
assert.ok(prompt.includes('=== 1. CONTEXTE ==='), 'Structure CONTEXTE présente');
assert.ok(prompt.includes('=== 2. PERSONNALITÉ ==='), 'Structure PERSONNALITÉ présente');
assert.ok(prompt.includes('=== 3. RÈGLES GÉNÉRALES ==='), 'Structure RÈGLES présente');
assert.ok(prompt.includes('humainement'), 'Règle "humainement" présente');
// Vérifier absence mentions polluantes
assert.ok(!prompt.includes('CRÉER UN TITRE H1'), 'Pas de mention technique H1');
assert.ok(!prompt.includes('(8-12 mots)'), 'Pas de contrainte de mots');
assert.ok(!prompt.includes('NE PAS écrire'), 'Pas d\'instruction négative');
console.log('✅ Prompts structure rationnelle validée');
});
test('Structure: FAQ prompts nettoyés', () => {
const { createBatchFAQPairsPrompt } = requireCommonJS('SelectiveEnhancement');
const mockFaqPairs = [{
question: { tag: '|FAQ_Q1|' },
answer: { tag: '|FAQ_R1|' }
}];
const mockCsvData = {
mc0: 'plaque personnalisée',
personality: {
nom: 'Sophie',
style: 'commercial',
description: 'Experte vente'
}
};
const prompt = createBatchFAQPairsPrompt(mockFaqPairs, mockCsvData);
// Vérifier structure FAQ propre
assert.ok(prompt.includes('=== 1. CONTEXTE ==='), 'FAQ structure CONTEXTE');
assert.ok(prompt.includes('=== 4. PAIRES FAQ À GÉNÉRER ==='), 'FAQ section spécialisée');
assert.ok(prompt.includes('humainement'), 'FAQ règle humainement');
// Vérifier absence pollution FAQ
assert.ok(!prompt.includes('(8-15 mots)'), 'Pas de contrainte mots FAQ');
assert.ok(!prompt.includes('(50-80 mots)'), 'Pas de longueur réponse');
console.log('✅ FAQ prompts structure validée');
});
test('Structure: Fonctions principales existent', () => {
const modules = [
'MissingKeywords',
'SelectiveEnhancement',
'Main', // Main.js contient maintenant tout le système modulaire
'BrainConfig'
];
// Modules modulaires spécifiques
const modularModules = [
'selective-enhancement/SelectiveCore',
'selective-enhancement/SelectiveLayers',
'selective-enhancement/SelectiveUtils', // Remplace ContentGeneration
'adversarial-generation/AdversarialCore',
'human-simulation/HumanSimulationCore',
'pattern-breaking/PatternBreakingCore'
];
modules.forEach(moduleName => {
try {
const module = requireCommonJS(moduleName);
assert.ok(typeof module === 'object', `${moduleName} est un objet`);
assert.ok(Object.keys(module).length > 0, `${moduleName} a des exports`);
} catch (error) {
assert.fail(`${moduleName} non chargeable: ${error.message}`);
}
});
// Vérifier modules modulaires
modularModules.forEach(moduleName => {
try {
const module = requireCommonJS(moduleName);
assert.ok(typeof module === 'object', `${moduleName} (modulaire) est un objet`);
assert.ok(Object.keys(module).length > 0, `${moduleName} (modulaire) a des exports`);
} catch (error) {
assert.fail(`${moduleName} (modulaire) non chargeable: ${error.message}`);
}
});
console.log('✅ Tous les modules principaux chargent correctement');
});
test('Structure: Personnalités configuration existe', () => {
try {
const { selectMultiplePersonalitiesWithAI, getPersonalities } = requireCommonJS('BrainConfig');
assert.ok(typeof selectMultiplePersonalitiesWithAI === 'function', 'selectMultiplePersonalitiesWithAI existe');
assert.ok(typeof getPersonalities === 'function', 'getPersonalities existe');
console.log('✅ Système personnalités configuré');
} catch (error) {
assert.fail(`Système personnalités non disponible: ${error.message}`);
}
});
test('Structure: Pipeline modulaire fonctions existent', () => {
// Vérifier workflow principal modulaire
const { handleModularWorkflow } = requireCommonJS('Main');
assert.ok(typeof handleModularWorkflow === 'function', 'Workflow modulaire principal existe');
// Vérifier modules selective enhancement
const selectiveCore = requireCommonJS('selective-enhancement/SelectiveCore');
const { applySelectiveLayer } = selectiveCore;
assert.ok(typeof applySelectiveLayer === 'function', 'Selective Core Layer existe');
const selectiveLayers = requireCommonJS('selective-enhancement/SelectiveLayers');
const { applyPredefinedStack, applyAdaptiveLayers } = selectiveLayers;
assert.ok(typeof applyPredefinedStack === 'function', 'Selective Stacks existe');
assert.ok(typeof applyAdaptiveLayers === 'function', 'Adaptive Layers existe');
// Vérifier génération simple (remplace ContentGeneration)
const selectiveUtils = requireCommonJS('selective-enhancement/SelectiveUtils');
const { generateSimple } = selectiveUtils;
assert.ok(typeof generateSimple === 'function', 'Génération simple existe');
console.log('✅ Pipeline modulaire structure validée');
});