#!/usr/bin/env python3 """ Test simple des workflows - VĂ©rifie que session_manager et workflow_detector fonctionnent """ import sys from pathlib import Path from datetime import datetime, timedelta sys.path.insert(0, str(Path(__file__).parent / "geniusia2")) from core.logger import Logger from core.config import get_config from core.session_manager import SessionManager from core.workflow_detector import WorkflowDetector def test_session_manager(): """Test du SessionManager""" print("\n" + "="*60) print("đŸ§Ș TEST 1: SessionManager") print("="*60) logger = Logger() config = get_config() session_manager = SessionManager(logger, config) # CrĂ©er des actions de test base_time = datetime.now() actions = [ { "action_type": "click", "position": (100, 100), "window": "Test Window", "timestamp": base_time.isoformat(), "description": "Action 1" }, { "action_type": "type", "text": "test", "window": "Test Window", "timestamp": (base_time + timedelta(seconds=1)).isoformat(), "description": "Action 2" }, { "action_type": "click", "position": (200, 200), "window": "Test Window", "timestamp": (base_time + timedelta(seconds=2)).isoformat(), "description": "Action 3" } ] # Ajouter les actions for action in actions: session_manager.add_action(action) # VĂ©rifier la session courante assert session_manager.current_session is not None, "❌ Pas de session courante" assert session_manager.current_session.action_count == 3, f"❌ Mauvais nombre d'actions: {session_manager.current_session.action_count}" print(f"✅ Session créée avec {session_manager.current_session.action_count} actions") # Finaliser la session session_manager.force_finalize_session() # VĂ©rifier que la session est finalisĂ©e assert session_manager.current_session is None, "❌ Session pas finalisĂ©e" assert len(session_manager.sessions) == 1, f"❌ Mauvais nombre de sessions: {len(session_manager.sessions)}" print(f"✅ Session finalisĂ©e et sauvegardĂ©e") print(f"✅ Total sessions: {len(session_manager.sessions)}") return True def test_workflow_detector(): """Test du WorkflowDetector""" print("\n" + "="*60) print("đŸ§Ș TEST 2: WorkflowDetector") print("="*60) logger = Logger() config = get_config() session_manager = SessionManager(logger, config) workflow_detector = WorkflowDetector(logger, config) # CrĂ©er 3 sessions similaires print("\n📋 CrĂ©ation de 3 sessions similaires...") for i in range(3): base_time = datetime.now() - timedelta(hours=3-i) actions = [ { "action_type": "click", "position": (100, 100), "window": "OnlyOffice", "timestamp": base_time.isoformat(), "description": f"Ouvrir OnlyOffice {i+1}" }, { "action_type": "type", "text": "Bonjour", "window": "OnlyOffice", "timestamp": (base_time + timedelta(seconds=1)).isoformat(), "description": f"Taper texte {i+1}" }, { "action_type": "click", "position": (200, 200), "window": "OnlyOffice", "timestamp": (base_time + timedelta(seconds=2)).isoformat(), "description": f"Fermer {i+1}" } ] for action in actions: session_manager.add_action(action) session_manager.force_finalize_session() print(f" ✅ Session {i+1} créée") # Analyser les sessions print("\n🔍 Analyse des sessions pour dĂ©tecter des workflows...") sessions = session_manager.get_recent_sessions(10) workflow_detector.analyze_sessions(sessions) # VĂ©rifier les workflows dĂ©tectĂ©s workflows = workflow_detector.get_workflows() print(f"\n📊 RĂ©sultats:") print(f" Sessions créées: {len(sessions)}") print(f" Workflows dĂ©tectĂ©s: {len(workflows)}") if workflows: for workflow in workflows: print(f"\n 🎉 Workflow dĂ©tectĂ©:") print(f" ID: {workflow.workflow_id}") print(f" Nom: {workflow.name}") print(f" Étapes: {len(workflow.steps)}") print(f" RĂ©pĂ©titions: {workflow.repetitions}") print(f" Confiance: {workflow.confidence:.2%}") assert len(workflows) >= 1, "❌ Aucun workflow dĂ©tectĂ©" assert workflows[0].repetitions >= 3, f"❌ Pas assez de rĂ©pĂ©titions: {workflows[0].repetitions}" print(f"\n✅ Workflow dĂ©tectĂ© avec succĂšs !") return True else: print(f"\n⚠ Aucun workflow dĂ©tectĂ©") print(f" Raisons possibles:") print(f" - Seuil de similaritĂ© trop Ă©levĂ©") print(f" - Pas assez de rĂ©pĂ©titions") return False def test_integration(): """Test d'intĂ©gration SessionManager + WorkflowDetector""" print("\n" + "="*60) print("đŸ§Ș TEST 3: IntĂ©gration complĂšte") print("="*60) logger = Logger() config = get_config() # CrĂ©er de nouvelles instances pour isoler le test session_manager = SessionManager(logger, config) workflow_detector = WorkflowDetector(logger, config) # Nettoyer les workflows existants pour ce test workflow_detector.workflows = [] # Callback pour dĂ©tecter les workflows workflows_detected = [] def on_workflow_detected(workflow): workflows_detected.append(workflow) # workflow est un dictionnaire, pas un objet workflow_name = workflow.get("name", "Unknown") print(f"\n 🎉 Callback: Workflow dĂ©tectĂ© - {workflow_name}") workflow_detector.on_workflow_detected = on_workflow_detected # CrĂ©er des sessions et dĂ©tecter automatiquement print("\n📋 Simulation de 4 sessions similaires...") for i in range(4): base_time = datetime.now() - timedelta(hours=4-i) # Actions lĂ©gĂšrement variĂ©es mais similaires actions = [ { "action_type": "click", "position": (100 + i*5, 100), "window": "Firefox", "timestamp": base_time.isoformat(), "description": "Ouvrir Firefox" }, { "action_type": "type", "text": "test", "window": "Firefox", "timestamp": (base_time + timedelta(seconds=1)).isoformat(), "description": "Rechercher" }, { "action_type": "click", "position": (150, 150), "window": "Firefox", "timestamp": (base_time + timedelta(seconds=2)).isoformat(), "description": "Cliquer rĂ©sultat" } ] for action in actions: session_manager.add_action(action) session_manager.force_finalize_session() # Analyser aprĂšs chaque session if i >= 2: # À partir de la 3Ăšme session sessions = session_manager.get_recent_sessions(10) workflow_detector.analyze_sessions(sessions) print(f"\n📊 RĂ©sultats:") print(f" Sessions: {len(session_manager.sessions)}") print(f" Workflows: {len(workflow_detector.get_workflows())}") print(f" Callbacks appelĂ©s: {len(workflows_detected)}") if workflows_detected: print(f"\n✅ IntĂ©gration rĂ©ussie !") return True else: print(f"\n⚠ Aucun workflow dĂ©tectĂ© via callback") return False def main(): """ExĂ©cute tous les tests""" print("\n" + "="*60) print("🚀 TEST DES WORKFLOWS - SIMPLE") print("="*60) results = [] try: # Test 1: SessionManager results.append(("SessionManager", test_session_manager())) except Exception as e: print(f"\n❌ ERREUR Test 1: {e}") import traceback traceback.print_exc() results.append(("SessionManager", False)) try: # Test 2: WorkflowDetector results.append(("WorkflowDetector", test_workflow_detector())) except Exception as e: print(f"\n❌ ERREUR Test 2: {e}") import traceback traceback.print_exc() results.append(("WorkflowDetector", False)) try: # Test 3: IntĂ©gration results.append(("IntĂ©gration", test_integration())) except Exception as e: print(f"\n❌ ERREUR Test 3: {e}") import traceback traceback.print_exc() results.append(("IntĂ©gration", False)) # RĂ©sumĂ© print("\n" + "="*60) print("📊 RÉSUMÉ DES TESTS") print("="*60) for name, success in results: status = "✅" if success else "❌" print(f"{status} {name}") total = len(results) passed = sum(1 for _, success in results if success) print(f"\n📈 Score: {passed}/{total} tests rĂ©ussis") if passed == total: print("\n🎉 TOUS LES TESTS SONT PASSÉS !") return 0 else: print(f"\n⚠ {total - passed} test(s) Ă©chouĂ©(s)") return 1 if __name__ == "__main__": sys.exit(main())