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>
This commit is contained in:
123
test_json_robustness.py
Executable file
123
test_json_robustness.py
Executable file
@@ -0,0 +1,123 @@
|
||||
#!/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)
|
||||
Reference in New Issue
Block a user