test-enhanced-object-extraction.js•7.04 kB
#!/usr/bin/env node
/**
* Test Enhanced Object Content Extraction v2.0.0
* Validates fix for [object Object] serialization issues
* Tests with exact data structure from Animal Kingdoms failure case
*/
import { ContentWidgetAnalyzer } from '../../src/tools/analyze-content-for-widgets.js';
// Exact structure from Animal Kingdoms test failure
const animalKingdomsFailureCase = {
subject: "Ciências",
duration: "35 minutos",
homework: {
type: "project",
content: "Projeto investigativo sobre animal brasileiro ameaçado com roteiro detalhado de apresentação"
},
activities: {
practicalActivities: [
"Classificação no cotidiano - observar e classificar 10 animais",
"Detetive da natureza - pesquisa sobre animal específico",
"Comparação de características - tabela comparativa"
]
},
gradeLevel: "7º ano",
vocabulary: {
type: "terminology",
terms: 10,
definitions: "Definições completas de termos técnicos essenciais como reino, vertebrados, invertebrados, heterotrófico, multicelular, etc."
},
introduction: "Introdução completa aos reinos animais explicando sistema de classificação, objetivos da aula e contextualização sobre diversidade de espécies",
mainSections: [
{
type: "explanatory",
title: "Introdução à Classificação dos Seres Vivos",
content: "Explicação detalhada sobre como e por que classificamos seres vivos, analogia com biblioteca, apresentação dos 5 reinos principais"
},
{
type: "explanatory",
title: "Características Gerais do Reino Animal",
content: "5 características fundamentais dos animais com explicações detalhadas e exemplo prático comparando cachorro e árvore"
},
{
type: "explanatory",
title: "Grandes Grupos do Reino Animal",
content: "Divisão detalhada entre vertebrados e invertebrados, características de cada grupo de vertebrados (peixes, anfíbios, répteis, aves, mamíferos) e principais grupos de invertebrados com exemplos específicos"
}
],
contentLength: "extensive",
complexityLevel: "medium",
engagementLevel: "high"
};
async function testEnhancedObjectExtraction() {
console.log('🧪 Testing Enhanced Object Content Extraction v2.0.0');
console.log('📋 Validates fix for [object Object] serialization issues');
console.log('');
const analyzer = new ContentWidgetAnalyzer();
try {
console.log('📊 Input structure analysis:');
console.log(` Root keys: ${Object.keys(animalKingdomsFailureCase).join(', ')}`);
console.log(` Main sections: ${animalKingdomsFailureCase.mainSections.length}`);
console.log(` Nested objects: homework, activities, vocabulary`);
console.log(` Complex content: ${JSON.stringify(animalKingdomsFailureCase).length} chars`);
console.log('');
// Test the enhanced extraction method directly
console.log('🔍 Testing enhanced extractTextFromObject method:');
const extractedText = analyzer.extractTextFromObject(animalKingdomsFailureCase, 0, 'test');
console.log(` Extracted text length: ${extractedText.length} characters`);
console.log(` Contains [object Object]: ${extractedText.includes('[object Object]') ? '❌ YES' : '✅ NO'}`);
console.log('');
// Check for educational content preservation
const hasIntroduction = extractedText.includes('Introdução completa aos reinos animais');
const hasMainContent = extractedText.includes('Explicação detalhada sobre como e por que classificamos');
const hasHomework = extractedText.includes('Projeto investigativo sobre animal brasileiro');
const hasActivities = extractedText.includes('Classificação no cotidiano');
const hasVocabulary = extractedText.includes('reino, vertebrados, invertebrados');
console.log('📚 Educational content preservation:');
console.log(` Introduction: ${hasIntroduction ? '✅' : '❌'}`);
console.log(` Main content: ${hasMainContent ? '✅' : '❌'}`);
console.log(` Homework: ${hasHomework ? '✅' : '❌'}`);
console.log(` Activities: ${hasActivities ? '✅' : '❌'}`);
console.log(` Vocabulary: ${hasVocabulary ? '✅' : '❌'}`);
console.log('');
// Test full content analysis
console.log('🔬 Testing full content analysis:');
const result = await analyzer.analyzeContent({
claudeContent: animalKingdomsFailureCase
});
console.log(` Analysis success: ${result.success ? '✅' : '❌'}`);
console.log(` Content length: ${result.debug?.contentLength || 0} characters`);
console.log(` Segments analyzed: ${result.debug?.segmentsAnalyzed || 0}`);
console.log(` Widget types: ${result.data?.selectedWidgetTypes?.length || 0}`);
// Check for the specific failure pattern
const originalContent = result.data?.contentStructure?.originalContent || '';
const hasObjectSerialization = originalContent.includes('[object Object]');
console.log('');
console.log('🎯 Failure pattern analysis:');
console.log(` Original content length: ${originalContent.length} characters`);
console.log(` Contains [object Object]: ${hasObjectSerialization ? '❌ FAILED' : '✅ FIXED'}`);
console.log(` Content preservation: ${Math.round((originalContent.length / extractedText.length) * 100)}%`);
// Success criteria
const noObjectSerialization = !hasObjectSerialization;
const goodContentLength = originalContent.length > 1000;
const educationalContentPreserved = hasIntroduction && hasMainContent && hasHomework;
console.log('');
console.log('✅ Success Criteria:');
console.log(` No [object Object] serialization: ${noObjectSerialization ? '✅' : '❌'}`);
console.log(` Good content length (>1000 chars): ${goodContentLength ? '✅' : '❌'}`);
console.log(` Educational content preserved: ${educationalContentPreserved ? '✅' : '❌'}`);
if (noObjectSerialization && goodContentLength && educationalContentPreserved) {
console.log('');
console.log('🎉 SUCCESS: Enhanced object extraction fixes [object Object] serialization issues!');
console.log(' ✅ Object serialization issues resolved');
console.log(' ✅ Educational content properly preserved');
console.log(' ✅ Complex nested structures handled correctly');
} else {
console.log('');
console.log('⚠️ PARTIAL SUCCESS: Some issues remain');
if (hasObjectSerialization) console.log(' ❌ Object serialization still occurring');
if (!goodContentLength) console.log(' ❌ Content length still too low');
if (!educationalContentPreserved) console.log(' ❌ Educational content not fully preserved');
}
} catch (error) {
console.error('');
console.error('❌ Test failed with error:', error.message);
console.error('Stack:', error.stack);
}
}
// Run the test
testEnhancedObjectExtraction().catch(console.error);