Initial commit: KidsAI Explorer with complete functionality
- Complete KidsAI Explorer application - Multi-language support (English/German) - AI-powered educational guidance using OpenAI - Interactive chat interface for children - Proper placeholder translation fixes - Mobile-responsive design - Educational framework for critical thinking
This commit is contained in:
171
test-enhanced-handling.js
Normal file
171
test-enhanced-handling.js
Normal file
@@ -0,0 +1,171 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Test Script for Enhanced Humor and Emotional Handling
|
||||
* Tests the improved humor detection and emotional response handling
|
||||
*/
|
||||
|
||||
const testCases = [
|
||||
{
|
||||
name: "Humor Test - Per Fax",
|
||||
question: "Wie können Vögel über weite Entfernungen miteinander kommunizieren?",
|
||||
answer: "per fax",
|
||||
originalTopic: "Wie kommunizieren Vögel?",
|
||||
language: "de",
|
||||
expectedBehavior: "Should acknowledge humor playfully and redirect to learning"
|
||||
},
|
||||
{
|
||||
name: "Humor Test - Magic",
|
||||
question: "How do birds communicate over long distances?",
|
||||
answer: "magic and telepathy",
|
||||
originalTopic: "How do birds communicate?",
|
||||
language: "en",
|
||||
expectedBehavior: "Should acknowledge creativity and redirect to learning"
|
||||
},
|
||||
{
|
||||
name: "Emotional Test - Frustration German",
|
||||
question: "Was ist UV-Strahlung?",
|
||||
answer: "Das ist doof und verstehe ich nicht",
|
||||
originalTopic: "Warum bekommt man Sonnenbrand?",
|
||||
language: "de",
|
||||
expectedBehavior: "Should validate feelings and simplify approach"
|
||||
},
|
||||
{
|
||||
name: "Emotional Test - Frustration English",
|
||||
question: "What is UV radiation?",
|
||||
answer: "This is stupid and I don't understand",
|
||||
originalTopic: "Why do people get sunburned?",
|
||||
language: "en",
|
||||
expectedBehavior: "Should validate feelings and simplify approach"
|
||||
},
|
||||
{
|
||||
name: "Creative Answer Test",
|
||||
question: "Wie könnte man einem Freund eine Nachricht senden?",
|
||||
answer: "mit einer brieftaube oder rauchzeichen",
|
||||
originalTopic: "Kommunikation",
|
||||
language: "de",
|
||||
expectedBehavior: "Should acknowledge creativity and connect to real communication"
|
||||
},
|
||||
{
|
||||
name: "Overwhelmed Child Test",
|
||||
question: "Was passiert in den Hautzellen bei Sonnenbrand?",
|
||||
answer: "Das ist zu kompliziert und macht keinen sinn",
|
||||
originalTopic: "Warum bekommt man Sonnenbrand?",
|
||||
language: "de",
|
||||
expectedBehavior: "Should offer emotional support and simplify"
|
||||
}
|
||||
];
|
||||
|
||||
async function testHumorAndEmotionalHandling() {
|
||||
console.log('🎭 Testing Enhanced Humor and Emotional Handling\n');
|
||||
|
||||
let passedTests = 0;
|
||||
let totalTests = testCases.length;
|
||||
|
||||
for (let i = 0; i < testCases.length; i++) {
|
||||
const testCase = testCases[i];
|
||||
console.log(`\n${'='.repeat(60)}`);
|
||||
console.log(`TEST ${i + 1}: ${testCase.name}`);
|
||||
console.log(`${'='.repeat(60)}`);
|
||||
console.log(`Question: "${testCase.question}"`);
|
||||
console.log(`Answer: "${testCase.answer}"`);
|
||||
console.log(`Expected: ${testCase.expectedBehavior}`);
|
||||
console.log(`\nSending request...`);
|
||||
|
||||
try {
|
||||
const response = await fetch('http://localhost:3002/api/respond-to-answer', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
answer: testCase.answer,
|
||||
question: testCase.question,
|
||||
originalTopic: testCase.originalTopic,
|
||||
language: testCase.language,
|
||||
sessionId: `test_humor_emotional_${i}`
|
||||
})
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! status: ${response.status}`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (data.success) {
|
||||
console.log(`\n✅ Response received:`);
|
||||
console.log(`"${data.response}"`);
|
||||
|
||||
// Analyze response for expected behavior
|
||||
const aiResponse = data.response.toLowerCase();
|
||||
let testPassed = false;
|
||||
|
||||
if (testCase.name.includes("Humor")) {
|
||||
// Check if humor is acknowledged
|
||||
const humorAcknowledgment = testCase.language === 'de'
|
||||
? ['lustig', 'kreativ', 'witzig', 'haha', 'interessant']
|
||||
: ['funny', 'creative', 'interesting', 'haha', 'clever'];
|
||||
|
||||
testPassed = humorAcknowledgment.some(word => aiResponse.includes(word));
|
||||
|
||||
if (testPassed) {
|
||||
console.log(`✅ PASSED: Humor acknowledged appropriately`);
|
||||
passedTests++;
|
||||
} else {
|
||||
console.log(`❌ FAILED: Humor not acknowledged properly`);
|
||||
}
|
||||
} else if (testCase.name.includes("Emotional")) {
|
||||
// Check if emotions are validated
|
||||
const emotionalValidation = testCase.language === 'de'
|
||||
? ['verstehen', 'okay', 'verständlich', 'empathie', 'unterstützung', 'anders versuchen']
|
||||
: ['understand', 'okay', 'support', 'help', 'try differently', 'completely okay'];
|
||||
|
||||
testPassed = emotionalValidation.some(phrase => aiResponse.includes(phrase));
|
||||
|
||||
if (testPassed) {
|
||||
console.log(`✅ PASSED: Emotional validation provided`);
|
||||
passedTests++;
|
||||
} else {
|
||||
console.log(`❌ FAILED: Emotional validation missing`);
|
||||
}
|
||||
} else {
|
||||
// General check for appropriate handling
|
||||
testPassed = aiResponse.length > 20; // Basic response check
|
||||
if (testPassed) {
|
||||
console.log(`✅ PASSED: Appropriate response generated`);
|
||||
passedTests++;
|
||||
} else {
|
||||
console.log(`❌ FAILED: Inappropriate or too short response`);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
console.log(`❌ FAILED: ${data.error || 'Unknown error'}`);
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(`❌ FAILED: ${error.message}`);
|
||||
}
|
||||
|
||||
// Wait between requests
|
||||
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||
}
|
||||
|
||||
console.log(`\n${'='.repeat(60)}`);
|
||||
console.log(`🎯 FINAL RESULTS: ${passedTests}/${totalTests} tests passed`);
|
||||
console.log(`${'='.repeat(60)}`);
|
||||
|
||||
if (passedTests === totalTests) {
|
||||
console.log(`🎉 All tests passed! Humor and emotional handling working correctly.`);
|
||||
} else {
|
||||
console.log(`⚠️ ${totalTests - passedTests} tests failed. Review the implementation.`);
|
||||
}
|
||||
|
||||
return passedTests === totalTests;
|
||||
}
|
||||
|
||||
// Run tests if this script is executed directly
|
||||
if (require.main === module) {
|
||||
testHumorAndEmotionalHandling().catch(console.error);
|
||||
}
|
||||
|
||||
module.exports = { testHumorAndEmotionalHandling };
|
||||
Reference in New Issue
Block a user