- 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>
207 lines
7.6 KiB
Python
207 lines
7.6 KiB
Python
#!/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()) |