#!/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)