#!/usr/bin/env python3 """ Test simple de la documentation avec un navigateur headless """ import time import subprocess import sys import os def test_with_curl(): """Test simple avec curl pour vérifier l'application""" print("🌐 Test de l'application avec curl...") try: # Test de l'accès à l'application result = subprocess.run([ 'curl', '-s', '-o', '/dev/null', '-w', '%{http_code}', 'http://localhost:3000' ], capture_output=True, text=True, timeout=10) if result.returncode == 0 and result.stdout.strip() == '200': print("✅ Application accessible sur http://localhost:3000") return True else: print(f"❌ Application non accessible: code {result.stdout.strip()}") return False except Exception as e: print(f"❌ Erreur lors du test curl: {e}") return False def test_with_browser(): """Test avec un navigateur simple""" print("🌐 Test avec navigateur...") # Vérifier si chromium ou chrome est disponible browsers = ['chromium-browser', 'google-chrome', 'chromium', 'chrome'] browser_cmd = None for browser in browsers: try: result = subprocess.run(['which', browser], capture_output=True, text=True) if result.returncode == 0: browser_cmd = browser break except: continue if not browser_cmd: print("⚠️ Aucun navigateur Chrome/Chromium trouvé") return False print(f"🔍 Utilisation de {browser_cmd}") try: # Lancer le navigateur en mode headless pour capturer les erreurs console cmd = [ browser_cmd, '--headless', '--disable-gpu', '--no-sandbox', '--disable-dev-shm-usage', '--enable-logging', '--log-level=0', '--dump-dom', 'http://localhost:3000' ] print("🚀 Lancement du navigateur...") result = subprocess.run(cmd, capture_output=True, text=True, timeout=30) if result.returncode == 0: # Analyser le DOM récupéré dom_content = result.stdout # Vérifier la présence d'éléments clés checks = { 'Application chargée': 'Visual Workflow Builder' in dom_content, 'React chargé': 'react' in dom_content.lower() or 'div id="root"' in dom_content, 'Palette présente': 'palette' in dom_content.lower(), 'Canvas présent': 'canvas' in dom_content.lower() or 'workflow' in dom_content.lower(), } print("\n📋 Analyse du contenu:") for check_name, check_result in checks.items(): status = "✅" if check_result else "❌" print(f" {status} {check_name}") # Vérifier s'il y a des erreurs JavaScript dans stderr if result.stderr: print(f"\n⚠️ Erreurs/Avertissements du navigateur:") print(result.stderr[:500] + "..." if len(result.stderr) > 500 else result.stderr) return all(checks.values()) else: print(f"❌ Erreur du navigateur: {result.stderr}") return False except subprocess.TimeoutExpired: print("⏰ Timeout lors du chargement de la page") return False except Exception as e: print(f"❌ Erreur lors du test navigateur: {e}") return False def check_documentation_files(): """Vérifier que les fichiers de documentation existent""" print("📁 Vérification des fichiers de documentation...") files_to_check = [ 'frontend/src/data/toolDocumentation.ts', 'frontend/src/services/DocumentationService.ts', 'frontend/src/components/DocumentationTab/index.tsx', 'frontend/src/components/DocumentationPopup/index.tsx', 'frontend/src/types/documentation.ts' ] all_exist = True for file_path in files_to_check: if os.path.exists(file_path): # Vérifier la taille du fichier size = os.path.getsize(file_path) print(f"✅ {file_path} ({size} bytes)") else: print(f"❌ {file_path} manquant") all_exist = False return all_exist def check_build_status(): """Vérifier le statut de build du frontend""" print("🔨 Vérification du build frontend...") # Vérifier si le dossier dist existe if os.path.exists('frontend/dist'): print("✅ Dossier dist trouvé") # Lister les fichiers principaux dist_files = os.listdir('frontend/dist') js_files = [f for f in dist_files if f.endswith('.js')] css_files = [f for f in dist_files if f.endswith('.css')] print(f" 📄 Fichiers JS: {len(js_files)}") print(f" 🎨 Fichiers CSS: {len(css_files)}") # Vérifier la taille du bundle principal main_js = None for js_file in js_files: if 'main' in js_file or 'bundle' in js_file: main_js = js_file break if main_js: size = os.path.getsize(f'frontend/dist/{main_js}') print(f" 📦 Bundle principal: {main_js} ({size} bytes)") if size > 100000: # Plus de 100KB print(" ✅ Bundle semble correct") return True else: print(" ⚠️ Bundle très petit, peut-être incomplet") return False else: print(" ❌ Aucun bundle principal trouvé") return False else: print("❌ Dossier dist non trouvé") return False def main(): """Fonction principale""" print("=" * 70) print("TEST DE DIAGNOSTIC - DOCUMENTATION VISUAL WORKFLOW BUILDER") print("=" * 70) # Changer vers le bon répertoire if not os.path.exists('frontend'): print("❌ Répertoire frontend non trouvé. Exécutez depuis visual_workflow_builder/") return 1 # Tests tests = [ ("Fichiers de documentation", check_documentation_files), ("Build frontend", check_build_status), ("Accès application", test_with_curl), ("Test navigateur", test_with_browser), ] results = [] for test_name, test_func in tests: print(f"\n🧪 {test_name}...") try: result = test_func() results.append((test_name, result)) status = "✅ RÉUSSI" if result else "❌ ÉCHOUÉ" print(f" {status}") except Exception as e: print(f" ❌ ERREUR: {e}") results.append((test_name, False)) # Résumé print("\n" + "=" * 70) print("RÉSUMÉ DES TESTS:") print("=" * 70) passed = sum(1 for _, result in results if result) total = len(results) for test_name, result in results: status = "✅" if result else "❌" print(f"{status} {test_name}") print(f"\n📊 Résultat global: {passed}/{total} tests réussis") if passed == total: print("\n🎉 Tous les tests sont passés!") print("La documentation devrait fonctionner. Si elle ne s'affiche pas:") print("1. Ouvrez les outils de développement (F12)") print("2. Vérifiez la console pour des erreurs JavaScript") print("3. Vérifiez l'onglet Network pour des ressources non chargées") else: print(f"\n⚠️ {total - passed} test(s) ont échoué") print("Vérifiez les erreurs ci-dessus pour diagnostiquer le problème") return 0 if passed == total else 1 if __name__ == "__main__": exit(main())