- Frontend v4 accessible sur réseau local (192.168.1.40) - Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard) - Ollama GPU fonctionnel - Self-healing interactif - Dashboard confiance Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
188 lines
6.4 KiB
Python
188 lines
6.4 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Test final du frontend après correction du Validator
|
|
Auteur : Dom, Alice, Kiro - 08 janvier 2026
|
|
|
|
Ce script teste l'état final du frontend après la correction de l'erreur
|
|
d'initialisation dans le composant Validator.
|
|
"""
|
|
|
|
import requests
|
|
import json
|
|
import sys
|
|
import time
|
|
|
|
def test_frontend_health():
|
|
"""Test de santé du frontend"""
|
|
print("🏥 Test de santé du frontend...")
|
|
|
|
try:
|
|
# Test de base du frontend
|
|
response = requests.get("http://localhost:3000", timeout=10)
|
|
if response.status_code == 200:
|
|
print("✅ Frontend accessible (port 3000)")
|
|
|
|
# Vérifier que le HTML contient les éléments React
|
|
html_content = response.text
|
|
if 'id="root"' in html_content:
|
|
print("✅ Élément root React présent")
|
|
else:
|
|
print("❌ Élément root React manquant")
|
|
return False
|
|
|
|
if 'bundle.js' in html_content:
|
|
print("✅ Bundle JavaScript référencé")
|
|
else:
|
|
print("❌ Bundle JavaScript non référencé")
|
|
return False
|
|
|
|
return True
|
|
else:
|
|
print(f"❌ Frontend inaccessible (status {response.status_code})")
|
|
return False
|
|
|
|
except requests.exceptions.RequestException as e:
|
|
print(f"❌ Erreur de connexion frontend : {e}")
|
|
return False
|
|
|
|
def test_backend_health():
|
|
"""Test de santé du backend"""
|
|
print("🔧 Test de santé du backend...")
|
|
|
|
try:
|
|
# Test de l'API de santé
|
|
response = requests.get("http://localhost:5002/health", timeout=5)
|
|
if response.status_code == 200:
|
|
health_data = response.json()
|
|
print(f"✅ Backend accessible (status: {health_data.get('status', 'unknown')})")
|
|
return True
|
|
else:
|
|
print(f"❌ Backend erreur (status {response.status_code})")
|
|
return False
|
|
|
|
except requests.exceptions.RequestException as e:
|
|
print(f"❌ Erreur de connexion backend : {e}")
|
|
return False
|
|
except json.JSONDecodeError as e:
|
|
print(f"❌ Erreur de décodage JSON backend : {e}")
|
|
return False
|
|
|
|
def test_api_endpoints():
|
|
"""Test des endpoints API principaux"""
|
|
print("🔌 Test des endpoints API...")
|
|
|
|
endpoints_to_test = [
|
|
("/api/workflows", "GET", "Liste des workflows"),
|
|
("/api/screen-capture", "POST", "Capture d'écran"),
|
|
]
|
|
|
|
all_ok = True
|
|
|
|
for endpoint, method, description in endpoints_to_test:
|
|
try:
|
|
url = f"http://localhost:5002{endpoint}"
|
|
|
|
if method == "GET":
|
|
response = requests.get(url, timeout=5)
|
|
elif method == "POST":
|
|
# Pour les POST, on teste juste que l'endpoint existe
|
|
response = requests.post(url, json={}, timeout=5)
|
|
|
|
# On accepte les codes 200, 400, 422 (erreurs de validation normales)
|
|
if response.status_code in [200, 400, 422]:
|
|
print(f"✅ {description} - Endpoint accessible")
|
|
else:
|
|
print(f"❌ {description} - Erreur {response.status_code}")
|
|
all_ok = False
|
|
|
|
except requests.exceptions.RequestException as e:
|
|
print(f"❌ {description} - Erreur de connexion : {e}")
|
|
all_ok = False
|
|
|
|
return all_ok
|
|
|
|
def test_bundle_accessibility():
|
|
"""Test d'accessibilité du bundle JavaScript"""
|
|
print("📦 Test d'accessibilité du bundle...")
|
|
|
|
try:
|
|
response = requests.get("http://localhost:3000/static/js/bundle.js", timeout=10)
|
|
if response.status_code == 200:
|
|
print("✅ Bundle JavaScript accessible")
|
|
|
|
# Vérifier la taille du bundle (doit être > 100KB pour un bundle React complet)
|
|
bundle_size = len(response.content)
|
|
if bundle_size > 100000: # 100KB
|
|
print(f"✅ Bundle de taille correcte ({bundle_size // 1024}KB)")
|
|
else:
|
|
print(f"⚠️ Bundle petit ({bundle_size // 1024}KB) - possible problème")
|
|
|
|
return True
|
|
else:
|
|
print(f"❌ Bundle inaccessible (status {response.status_code})")
|
|
return False
|
|
|
|
except requests.exceptions.RequestException as e:
|
|
print(f"❌ Erreur lors du chargement du bundle : {e}")
|
|
return False
|
|
|
|
def main():
|
|
"""Fonction principale"""
|
|
print("=" * 70)
|
|
print("🧪 TEST FINAL - FRONTEND VISUAL WORKFLOW BUILDER V2")
|
|
print(" Après correction de l'erreur d'initialisation du Validator")
|
|
print("=" * 70)
|
|
|
|
# Tests séquentiels
|
|
tests = [
|
|
("Frontend Health", test_frontend_health),
|
|
("Backend Health", test_backend_health),
|
|
("API Endpoints", test_api_endpoints),
|
|
("Bundle Accessibility", test_bundle_accessibility),
|
|
]
|
|
|
|
results = {}
|
|
|
|
for test_name, test_func in tests:
|
|
print(f"\n🔍 {test_name}")
|
|
print("-" * 50)
|
|
results[test_name] = test_func()
|
|
time.sleep(1) # Petite pause entre les tests
|
|
|
|
# Résumé final
|
|
print("\n" + "=" * 70)
|
|
print("📊 RÉSUMÉ DES TESTS")
|
|
print("=" * 70)
|
|
|
|
all_passed = True
|
|
for test_name, result in results.items():
|
|
status = "✅ PASSÉ" if result else "❌ ÉCHEC"
|
|
print(f"{test_name:<25} : {status}")
|
|
if not result:
|
|
all_passed = False
|
|
|
|
print("=" * 70)
|
|
|
|
if all_passed:
|
|
print("🎉 SUCCÈS COMPLET !")
|
|
print(" - Tous les tests sont passés")
|
|
print(" - Le frontend est opérationnel")
|
|
print(" - L'erreur d'initialisation du Validator a été corrigée")
|
|
print(" - Le système est prêt pour utilisation")
|
|
else:
|
|
print("⚠️ TESTS PARTIELS")
|
|
print(" - Certains tests ont échoué")
|
|
print(" - Vérifiez les détails ci-dessus")
|
|
print(" - Le système peut nécessiter des ajustements")
|
|
|
|
print("=" * 70)
|
|
print("💡 Pour tester manuellement :")
|
|
print(" - Ouvrez http://localhost:3000 dans votre navigateur")
|
|
print(" - Vérifiez qu'il n'y a pas d'erreurs dans la console")
|
|
print(" - Testez les fonctionnalités de base du workflow builder")
|
|
print("=" * 70)
|
|
|
|
return 0 if all_passed else 1
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main()) |