Files
Lucas/test_json_robustness.py
Debian 24dbc7cd6a Initial commit — Serveur Lucas SmartEye
API réception alertes chute (SmartEye/YOLO), analyse IA (Gemini 2.5 Flash),
gestion alertes avec escalade (watchdog), notifications Firebase,
dashboard web, documentation MkDocs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 21:26:06 +01:00

124 lines
3.8 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Script de test pour valider la robustesse du parsing JSON
"""
import sys
sys.path.insert(0, '/var/www/lucas')
from analyze import nettoyer_json_response, extraire_json_intelligent, valider_reponse_ia
import json
# Tests de différents formats de réponses malformées
test_cases = [
# Cas 1: JSON propre
{
"input": '{"urgence": true, "confiance": 85, "message": "Personne au sol"}',
"expected_success": True,
"description": "JSON propre"
},
# Cas 2: JSON avec markdown
{
"input": '```json\n{"urgence": false, "confiance": 90, "message": "Pièce vide"}\n```',
"expected_success": True,
"description": "JSON dans markdown"
},
# Cas 3: JSON avec texte avant
{
"input": 'Voici mon analyse:\n{"urgence": true, "confiance": 75, "message": "Chute détectée"}',
"expected_success": True,
"description": "JSON avec texte avant"
},
# Cas 4: JSON avec texte après
{
"input": '{"urgence": false, "confiance": 95, "message": "Tout va bien"}\nVoilà mon analyse.',
"expected_success": True,
"description": "JSON avec texte après"
},
# Cas 5: JSON avec espaces
{
"input": ' \n\n {"urgence": true, "confiance": 80, "message": "Urgence"} \n\n ',
"expected_success": True,
"description": "JSON avec espaces"
},
# Cas 6: JSON multiligne
{
"input": '''{
"urgence": true,
"confiance": 88,
"message": "Personne allongée"
}''',
"expected_success": True,
"description": "JSON multiligne"
},
# Cas 7: Réponse complètement invalide
{
"input": 'Ceci n\'est pas du JSON du tout, juste du texte',
"expected_success": False,
"description": "Texte non-JSON"
},
# Cas 8: JSON incomplet
{
"input": '{"urgence": true, "confiance": ',
"expected_success": False,
"description": "JSON incomplet"
},
]
print("="*70)
print("TEST DE ROBUSTESSE DU PARSING JSON")
print("="*70)
passed = 0
failed = 0
for i, test in enumerate(test_cases, 1):
print(f"\n[TEST {i}] {test['description']}")
print(f"Input: {repr(test['input'][:60])}...")
try:
# Tenter l'extraction
result = extraire_json_intelligent(test['input'])
if result:
# Valider le résultat
is_valid = valider_reponse_ia(result)
if is_valid and test['expected_success']:
print(f"✓ SUCCÈS - JSON extrait: {result}")
passed += 1
elif not is_valid and test['expected_success']:
print(f"✗ ÉCHEC - JSON invalide: {result}")
failed += 1
elif is_valid and not test['expected_success']:
print(f"✗ ÉCHEC INATTENDU - JSON trouvé alors qu'on attendait un échec")
failed += 1
else:
print(f"✓ SUCCÈS - Échec attendu correctement géré")
passed += 1
else:
if test['expected_success']:
print(f"✗ ÉCHEC - Aucun JSON extrait")
failed += 1
else:
print(f"✓ SUCCÈS - Échec correctement détecté")
passed += 1
except Exception as e:
if test['expected_success']:
print(f"✗ ÉCHEC - Exception: {type(e).__name__}: {e}")
failed += 1
else:
print(f"✓ SUCCÈS - Exception attendue: {type(e).__name__}")
passed += 1
print("\n" + "="*70)
print(f"RÉSULTATS: {passed} réussis, {failed} échoués sur {len(test_cases)} tests")
print("="*70)
if failed == 0:
print("\n✓ TOUS LES TESTS SONT PASSÉS ! Le système est robuste.")
sys.exit(0)
else:
print(f"\n{failed} test(s) ont échoué. Révision nécessaire.")
sys.exit(1)