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,227 @@
#!/usr/bin/env python3
"""
Test Final - Validation Complète de la Palette VWB
Auteur : Dom, Alice, Kiro - 10 janvier 2026
Ce script effectue une validation finale complète pour confirmer que tous
les problèmes de la palette et du catalogue ont été résolus.
"""
import requests
import json
import time
from pathlib import Path
def test_palette_complete():
"""Test final de validation complète"""
print("🎯 TEST FINAL - VALIDATION COMPLÈTE DE LA PALETTE VWB")
print("=" * 60)
print("Auteur : Dom, Alice, Kiro - 10 janvier 2026")
print(f"Timestamp : {time.strftime('%Y-%m-%d %H:%M:%S')}")
print()
backend_url = "http://localhost:5004"
success_count = 0
total_tests = 6
# Test 1 : Backend opérationnel
print("🔄 Test 1/6 : Backend VWB opérationnel...")
try:
response = requests.get(f"{backend_url}/api/health", timeout=5)
if response.status_code == 200:
print("✅ Backend VWB opérationnel")
success_count += 1
else:
print(f"❌ Backend erreur HTTP {response.status_code}")
except Exception as e:
print(f"❌ Backend inaccessible : {e}")
# Test 2 : Service catalogue avec toutes les actions
print("🔄 Test 2/6 : Service catalogue complet...")
try:
response = requests.get(f"{backend_url}/api/vwb/catalog/actions", timeout=10)
if response.status_code == 200:
data = response.json()
action_count = len(data.get("actions", []))
if action_count >= 9:
print(f"✅ Service catalogue complet : {action_count} actions")
success_count += 1
else:
print(f"❌ Actions insuffisantes : {action_count} (attendu: ≥9)")
else:
print(f"❌ Service catalogue erreur HTTP {response.status_code}")
except Exception as e:
print(f"❌ Service catalogue inaccessible : {e}")
# Test 3 : Toutes les catégories disponibles
print("🔄 Test 3/6 : Toutes les catégories disponibles...")
try:
response = requests.get(f"{backend_url}/api/vwb/catalog/categories", timeout=5)
if response.status_code == 200:
data = response.json()
categories = data.get("categories", [])
category_ids = [cat["id"] for cat in categories]
expected_categories = ["vision_ui", "control", "data", "navigation", "validation"]
missing = set(expected_categories) - set(category_ids)
if len(missing) == 0:
print(f"✅ Toutes les catégories présentes : {category_ids}")
success_count += 1
else:
print(f"❌ Catégories manquantes : {missing}")
else:
print(f"❌ Catégories erreur HTTP {response.status_code}")
except Exception as e:
print(f"❌ Catégories inaccessibles : {e}")
# Test 4 : Catalogue statique complet
print("🔄 Test 4/6 : Catalogue statique complet...")
try:
static_catalog_path = Path("visual_workflow_builder/frontend/src/data/staticCatalog.ts")
if static_catalog_path.exists():
content = static_catalog_path.read_text(encoding='utf-8')
# Vérifier les 5 catégories
expected_categories = ["vision_ui", "control", "data", "navigation", "validation"]
found_categories = []
for category in expected_categories:
if f"'{category}'" in content or f'"{category}"' in content:
found_categories.append(category)
# Compter les actions
action_count = content.count("id: '") + content.count('id: "')
if len(found_categories) == 5 and action_count >= 12:
print(f"✅ Catalogue statique complet : {len(found_categories)} catégories, {action_count} actions")
success_count += 1
else:
print(f"❌ Catalogue statique incomplet : {len(found_categories)} catégories, {action_count} actions")
else:
print("❌ Fichier catalogue statique manquant")
except Exception as e:
print(f"❌ Erreur lecture catalogue statique : {e}")
# Test 5 : Types TypeScript valides
print("🔄 Test 5/6 : Types TypeScript valides...")
try:
import subprocess
result = subprocess.run(
["npx", "tsc", "--noEmit"],
cwd="visual_workflow_builder/frontend",
capture_output=True,
text=True,
timeout=30
)
if result.returncode == 0:
print("✅ Types TypeScript valides")
success_count += 1
else:
print(f"❌ Erreurs TypeScript détectées")
if result.stderr:
print(f" Erreurs : {result.stderr[:200]}...")
except subprocess.TimeoutExpired:
print("❌ Timeout lors de la vérification TypeScript")
except Exception as e:
print(f"❌ Erreur vérification TypeScript : {e}")
# Test 6 : Intégration palette prête
print("🔄 Test 6/6 : Intégration palette prête...")
try:
required_files = [
"visual_workflow_builder/frontend/src/components/Palette/index.tsx",
"visual_workflow_builder/frontend/src/hooks/useCatalogActions.ts",
"visual_workflow_builder/frontend/src/services/catalogService.ts",
"visual_workflow_builder/frontend/src/types/catalog.ts",
"visual_workflow_builder/frontend/src/data/staticCatalog.ts"
]
all_files_exist = True
for file_path in required_files:
if not Path(file_path).exists():
print(f"❌ Fichier manquant : {file_path}")
all_files_exist = False
if all_files_exist:
# Vérifier le contenu du composant Palette
palette_content = Path("visual_workflow_builder/frontend/src/components/Palette/index.tsx").read_text(encoding='utf-8')
integration_checks = [
"useCatalogActions",
"catalogCategories",
"VWBCatalogAction",
"catalog_"
]
all_integrations = True
for check in integration_checks:
if check not in palette_content:
print(f"❌ Intégration manquante : {check}")
all_integrations = False
if all_integrations:
print("✅ Intégration palette complète")
success_count += 1
else:
print("❌ Intégrations manquantes dans la palette")
else:
print("❌ Fichiers requis manquants")
except Exception as e:
print(f"❌ Erreur vérification intégration : {e}")
# Résumé final
print()
print("=" * 60)
print("📊 RÉSUMÉ FINAL")
print("=" * 60)
success_rate = (success_count / total_tests) * 100
print(f"Tests réussis : {success_count}/{total_tests} ({success_rate:.1f}%)")
print()
if success_count == total_tests:
print("🎉 SUCCÈS COMPLET ! TOUS LES PROBLÈMES SONT RÉSOLUS !")
print()
print("✅ Palette affiche toutes les catégories (5 au lieu de 1)")
print("✅ Toutes les actions sont présentes (12+ au lieu de 5)")
print("✅ Conflits de types résolus")
print("✅ API complète et fonctionnelle")
print("✅ Compatibilité cross-machine assurée")
print("✅ Intégration palette prête")
print()
print("🚀 La palette VWB est maintenant complètement opérationnelle !")
print()
print("Prochaines étapes :")
print("1. Démarrer le frontend : cd visual_workflow_builder/frontend && npm start")
print("2. Tester la palette dans l'interface utilisateur")
print("3. Valider le drag & drop des actions")
return True
else:
print(f"⚠️ {total_tests - success_count} problème(s) persistent")
print()
print("Problèmes à résoudre :")
if success_count < total_tests:
print("- Voir les détails des tests échoués ci-dessus")
return False
def main():
"""Fonction principale"""
try:
success = test_palette_complete()
return 0 if success else 1
except KeyboardInterrupt:
print("\n🛑 Test interrompu par l'utilisateur")
return 130
except Exception as e:
print(f"\n❌ Erreur critique : {e}")
return 1
if __name__ == "__main__":
import sys
sys.exit(main())