#!/usr/bin/env python3 """ Simple Analytics Integration Test - Visual Workflow Builder Tests the core analytics integration functionality without Flask dependencies. Exigence: 18.3 """ import sys import os from pathlib import Path # Ajouter le chemin racine pour les imports sys.path.insert(0, str(Path(__file__).parent.parent)) sys.path.insert(0, str(Path(__file__).parent / "backend")) def test_analytics_imports(): """Test que tous les imports Analytics fonctionnent""" print("đŸ§Ș Test des imports Analytics...") try: # Test import du systĂšme Analytics principal from core.analytics.analytics_system import get_analytics_system print(" ✅ Analytics system importĂ©") # Test import de l'intĂ©gration d'exĂ©cution from core.analytics.integration.execution_integration import get_analytics_integration print(" ✅ Execution integration importĂ©e") # Test import des composants Analytics from core.analytics.collection.metrics_collector import MetricsCollector print(" ✅ Metrics collector importĂ©") from core.analytics.api.analytics_api import AnalyticsAPI print(" ✅ Analytics API importĂ©e") return True except ImportError as e: print(f" ❌ Erreur d'import: {e}") return False def test_execution_integration(): """Test l'intĂ©gration avec l'exĂ©cuteur de workflows""" print("\nđŸ§Ș Test de l'intĂ©gration d'exĂ©cution...") try: from services.execution_integration import VisualWorkflowExecutor # CrĂ©er un exĂ©cuteur executor = VisualWorkflowExecutor() print(" ✅ ExĂ©cuteur créé") # VĂ©rifier l'intĂ©gration Analytics has_analytics = executor.analytics_integration is not None print(f" 📊 Analytics integration: {'✅' if has_analytics else '⚠ Non configurĂ©'}") if has_analytics: # Test des mĂ©thodes Analytics try: analytics_data = executor._collect_analytics_data("test_exec", "test_workflow") print(" ✅ Collecte de mĂ©triques fonctionnelle") print(f" 📊 DonnĂ©es collectĂ©es: {len(analytics_data)} clĂ©s") except Exception as e: print(f" ⚠ Erreur collecte mĂ©triques: {e}") return True except Exception as e: print(f" ❌ Erreur: {e}") return False def test_analytics_api_components(): """Test les composants de l'API Analytics""" print("\nđŸ§Ș Test des composants API Analytics...") try: from api.analytics import analytics_bp print(" ✅ Blueprint Analytics créé") # VĂ©rifier les routes routes = [rule.rule for rule in analytics_bp.url_map.iter_rules()] print(f" 📍 Routes disponibles: {len(routes)}") expected_routes = [ '/workflow//metrics', '/workflow//performance', '/dashboard/summary', '/dashboard/workflows', '/insights' ] for route in expected_routes: if any(route in r for r in routes): print(f" ✅ Route {route} trouvĂ©e") else: print(f" ⚠ Route {route} manquante") return True except Exception as e: print(f" ❌ Erreur: {e}") return False def test_frontend_components(): """Test l'existence des composants frontend""" print("\nđŸ§Ș Test des composants frontend...") frontend_path = Path(__file__).parent / "frontend" / "src" components_to_check = [ "components/AnalyticsDashboard/index.tsx", "components/AnalyticsDashboard/AnalyticsDashboard.css", "components/MetricsDisplay/index.tsx", "components/MetricsDisplay/MetricsDisplay.css", "hooks/useAnalytics.ts" ] all_exist = True for component in components_to_check: file_path = frontend_path / component if file_path.exists(): print(f" ✅ {component}") else: print(f" ❌ {component} manquant") all_exist = False # VĂ©rifier l'intĂ©gration dans App.tsx app_file = frontend_path / "App.tsx" if app_file.exists(): content = app_file.read_text() integrations = [ ("AnalyticsDashboard import", "AnalyticsDashboard" in content), ("Analytics button", "Analytics" in content), ("Analytics icon", "Analytics" in content) ] for name, exists in integrations: print(f" {'✅' if exists else '❌'} {name}") if not exists: all_exist = False else: print(" ❌ App.tsx non trouvĂ©") all_exist = False return all_exist def test_execution_panel_integration(): """Test l'intĂ©gration dans ExecutionPanel""" print("\nđŸ§Ș Test de l'intĂ©gration ExecutionPanel...") frontend_path = Path(__file__).parent / "frontend" / "src" execution_panel_file = frontend_path / "components" / "ExecutionPanel" / "index.tsx" if not execution_panel_file.exists(): print(" ❌ ExecutionPanel non trouvĂ©") return False content = execution_panel_file.read_text() integrations = [ ("MetricsDisplay import", "MetricsDisplay" in content), ("useAnalytics hook", "useAnalytics" in content), ("MetricsDisplay component", "