v1.0 - Version stable: multi-PC, détection UI-DETR-1, 3 modes exécution

- 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>
This commit is contained in:
Dom
2026-01-29 11:23:51 +01:00
parent 21bfa3b337
commit a27b74cf22
1595 changed files with 412691 additions and 400 deletions

View File

@@ -0,0 +1,207 @@
#!/usr/bin/env python3
"""
Test de l'API de documentation du Visual Workflow Builder
"""
import requests
import json
import sys
def test_documentation_api():
"""Test de l'API de documentation"""
try:
print("🚀 Test de l'API de documentation...")
# Test 1: Vérifier que l'application frontend est accessible
print("\n📱 Test 1: Vérification de l'accès au frontend...")
try:
response = requests.get("http://localhost:3000", timeout=5)
if response.status_code == 200:
print("✅ Frontend accessible sur le port 3000")
else:
print(f"❌ Frontend non accessible: {response.status_code}")
return False
except Exception as e:
print(f"❌ Erreur d'accès au frontend: {e}")
return False
# Test 2: Vérifier que le backend est accessible
print("\n🔧 Test 2: Vérification de l'accès au backend...")
try:
response = requests.get("http://localhost:5002/api/health", timeout=5)
if response.status_code == 200:
print("✅ Backend accessible sur le port 5002")
else:
print(f"❌ Backend non accessible: {response.status_code}")
except Exception as e:
print(f"⚠️ Backend peut-être non démarré: {e}")
# Test 3: Vérifier les fichiers de documentation côté frontend
print("\n📚 Test 3: Vérification des données de documentation...")
# Vérifier que les fichiers TypeScript de documentation existent
import os
doc_files = [
"frontend/src/data/toolDocumentation.ts",
"frontend/src/services/DocumentationService.ts",
"frontend/src/components/DocumentationTab/index.tsx",
"frontend/src/components/DocumentationPopup/index.tsx"
]
all_files_exist = True
for file_path in doc_files:
if os.path.exists(file_path):
print(f"{file_path} existe")
else:
print(f"{file_path} manquant")
all_files_exist = False
if not all_files_exist:
print("❌ Certains fichiers de documentation sont manquants")
return False
# Test 4: Vérifier le contenu du fichier de documentation
print("\n🔍 Test 4: Vérification du contenu de documentation...")
try:
with open("frontend/src/data/toolDocumentation.ts", "r", encoding="utf-8") as f:
content = f.read()
# Vérifier que les outils de base sont documentés
required_tools = ["click", "type", "wait", "navigate", "extract", "variable"]
missing_tools = []
for tool in required_tools:
if f'id: \'{tool}\'' in content or f'"{tool}":' in content:
print(f"✅ Documentation pour '{tool}' trouvée")
else:
print(f"❌ Documentation pour '{tool}' manquante")
missing_tools.append(tool)
if missing_tools:
print(f"❌ Outils manquants dans la documentation: {missing_tools}")
return False
# Vérifier la structure de base
required_sections = ["TOOLS_DOCUMENTATION", "GENERAL_DOCUMENTATION", "getToolDocumentation"]
for section in required_sections:
if section in content:
print(f"✅ Section '{section}' trouvée")
else:
print(f"❌ Section '{section}' manquante")
return False
except Exception as e:
print(f"❌ Erreur lors de la lecture du fichier de documentation: {e}")
return False
# Test 5: Vérifier la compilation TypeScript
print("\n🔨 Test 5: Vérification de la compilation...")
try:
import subprocess
result = subprocess.run(
["npx", "tsc", "--noEmit", "--project", "frontend/tsconfig.json"],
capture_output=True,
text=True,
timeout=30
)
if result.returncode == 0:
print("✅ Compilation TypeScript réussie")
else:
print(f"❌ Erreurs de compilation TypeScript:")
print(result.stderr)
return False
except subprocess.TimeoutExpired:
print("⚠️ Timeout lors de la compilation TypeScript")
except Exception as e:
print(f"⚠️ Impossible de vérifier la compilation: {e}")
print("\n🎉 Tous les tests de base sont passés!")
return True
except Exception as e:
print(f"❌ Erreur générale lors du test: {e}")
return False
def test_documentation_structure():
"""Test de la structure de documentation"""
print("\n📋 Test de la structure de documentation...")
try:
with open("frontend/src/data/toolDocumentation.ts", "r", encoding="utf-8") as f:
content = f.read()
# Compter les outils documentés
import re
# Chercher les définitions d'outils
tool_pattern = r'(\w+):\s*\{'
tools = re.findall(tool_pattern, content)
# Filtrer les vrais outils (exclure les fonctions utilitaires)
actual_tools = [tool for tool in tools if tool not in ['overview', 'useCases', 'parameters', 'guides', 'relationships', 'categorySpecific']]
print(f"📊 Nombre d'outils documentés: {len(actual_tools)}")
print(f"🔧 Outils trouvés: {', '.join(actual_tools[:10])}{'...' if len(actual_tools) > 10 else ''}")
# Vérifier les catégories
categories = ['actions-web', 'donnees', 'logique', 'controle', 'integrations']
for category in categories:
if f"category: '{category}'" in content:
print(f"✅ Catégorie '{category}' documentée")
else:
print(f"⚠️ Catégorie '{category}' peut-être manquante")
return len(actual_tools) >= 10 # Au moins 10 outils documentés
except Exception as e:
print(f"❌ Erreur lors de l'analyse de structure: {e}")
return False
def main():
"""Fonction principale"""
print("=" * 70)
print("TEST DE LA DOCUMENTATION - VISUAL WORKFLOW BUILDER")
print("=" * 70)
# Test de l'API
api_success = test_documentation_api()
# Test de la structure
structure_success = test_documentation_structure()
print("\n" + "=" * 70)
print("RÉSULTATS DES TESTS:")
print("=" * 70)
if api_success:
print("✅ API et fichiers de documentation: OK")
else:
print("❌ API et fichiers de documentation: ÉCHEC")
if structure_success:
print("✅ Structure de documentation: OK")
else:
print("❌ Structure de documentation: ÉCHEC")
overall_success = api_success and structure_success
print("\n" + "=" * 70)
if overall_success:
print("🎉 TOUS LES TESTS SONT PASSÉS!")
print("La documentation devrait fonctionner correctement.")
else:
print("❌ CERTAINS TESTS ONT ÉCHOUÉ")
print("Il peut y avoir des problèmes avec la documentation.")
print("=" * 70)
return 0 if overall_success else 1
if __name__ == "__main__":
exit(main())