#!/usr/bin/env python3 """ Test simple des améliorations du SuggestionManager. Vérifie la syntaxe et la structure sans dépendances lourdes. """ import sys import ast def test_syntax(): """Vérifie que le fichier est syntaxiquement correct.""" print("\n1. Test de syntaxe") print("=" * 60) try: with open("geniusia2/core/suggestion_manager.py", "r") as f: code = f.read() ast.parse(code) print("✓ Syntaxe correcte") return True except SyntaxError as e: print(f"✗ Erreur de syntaxe: {e}") return False def test_methods_exist(): """Vérifie que les nouvelles méthodes existent.""" print("\n2. Test de présence des méthodes") print("=" * 60) try: with open("geniusia2/core/suggestion_manager.py", "r") as f: code = f.read() required_methods = [ "check_workflow_match", "create_workflow_suggestion", "_track_workflow_rejection", "_track_workflow_acceptance", "_apply_priority_adjustment" ] all_found = True for method in required_methods: if f"def {method}" in code: print(f" ✓ {method} trouvée") else: print(f" ✗ {method} manquante") all_found = False return all_found except Exception as e: print(f"✗ Erreur: {e}") return False def test_imports(): """Vérifie que les imports nécessaires sont présents.""" print("\n3. Test des imports") print("=" * 60) try: with open("geniusia2/core/suggestion_manager.py", "r") as f: code = f.read() required_imports = [ "from .workflow_matcher import WorkflowMatcher, WorkflowMatch", "from typing import Dict, Any, Optional, Callable, List" ] all_found = True for imp in required_imports: if imp in code: print(f" ✓ {imp}") else: print(f" ✗ {imp} manquant") all_found = False return all_found except Exception as e: print(f"✗ Erreur: {e}") return False def test_init_parameters(): """Vérifie que __init__ a le paramètre workflow_matcher.""" print("\n4. Test des paramètres __init__") print("=" * 60) try: with open("geniusia2/core/suggestion_manager.py", "r") as f: code = f.read() if "workflow_matcher: Optional[WorkflowMatcher]" in code: print(" ✓ Paramètre workflow_matcher ajouté") else: print(" ✗ Paramètre workflow_matcher manquant") return False if "self.workflow_matcher = workflow_matcher or WorkflowMatcher" in code: print(" ✓ Initialisation de workflow_matcher") else: print(" ✗ Initialisation de workflow_matcher manquante") return False if "self.workflow_rejections: Dict[str, int]" in code: print(" ✓ Tracking des rejets initialisé") else: print(" ✗ Tracking des rejets manquant") return False if "self.workflow_priority_adjustments: Dict[str, float]" in code: print(" ✓ Ajustements de priorité initialisés") else: print(" ✗ Ajustements de priorité manquants") return False return True except Exception as e: print(f"✗ Erreur: {e}") return False def test_rejection_tracking_logic(): """Vérifie la logique de tracking des rejets.""" print("\n5. Test de la logique de tracking") print("=" * 60) try: with open("geniusia2/core/suggestion_manager.py", "r") as f: code = f.read() # Vérifier que _track_workflow_rejection incrémente le compteur if "current_rejections += 1" in code: print(" ✓ Incrémentation du compteur de rejets") else: print(" ✗ Incrémentation du compteur manquante") return False # Vérifier l'ajustement après 3 rejets if "if current_rejections >= 3:" in code: print(" ✓ Vérification du seuil de 3 rejets") else: print(" ✗ Vérification du seuil manquante") return False # Vérifier le facteur d'ajustement if "0.9 ** (current_rejections // 3)" in code: print(" ✓ Calcul du facteur d'ajustement") else: print(" ✗ Calcul du facteur manquant") return False return True except Exception as e: print(f"✗ Erreur: {e}") return False def test_acceptance_tracking_logic(): """Vérifie la logique de tracking des acceptations.""" print("\n6. Test de la logique d'acceptation") print("=" * 60) try: with open("geniusia2/core/suggestion_manager.py", "r") as f: code = f.read() # Vérifier que _track_workflow_acceptance réduit le compteur if "current_rejections - 2" in code: print(" ✓ Réduction du compteur de rejets") else: print(" ✗ Réduction du compteur manquante") return False # Vérifier la suppression de l'ajustement si < 3 rejets if "del self.workflow_priority_adjustments[workflow_id]" in code: print(" ✓ Suppression de l'ajustement") else: print(" ✗ Suppression de l'ajustement manquante") return False return True except Exception as e: print(f"✗ Erreur: {e}") return False def test_accept_reject_integration(): """Vérifie l'intégration dans accept/reject_suggestion.""" print("\n7. Test de l'intégration accept/reject") print("=" * 60) try: with open("geniusia2/core/suggestion_manager.py", "r") as f: code = f.read() # Vérifier que accept_suggestion appelle _track_workflow_acceptance if 'if suggestion.get("type") == "workflow":' in code and "_track_workflow_acceptance" in code: print(" ✓ accept_suggestion intégré") else: print(" ✗ accept_suggestion non intégré") return False # Vérifier que reject_suggestion appelle _track_workflow_rejection if "_track_workflow_rejection" in code: print(" ✓ reject_suggestion intégré") else: print(" ✗ reject_suggestion non intégré") return False return True except Exception as e: print(f"✗ Erreur: {e}") return False def test_requirements_coverage(): """Vérifie que les requirements sont couverts.""" print("\n8. Test de couverture des requirements") print("=" * 60) requirements = { "1.4": "check_workflow_match pour vérification périodique", "1.5": "create_workflow_suggestion avec détails", "3.3": "Tracking des rejets et ajustement après 3 rejets", "3.5": "Filtrage par fenêtre (via WorkflowMatcher)" } try: with open("geniusia2/core/suggestion_manager.py", "r") as f: code = f.read() checks = { "1.4": "check_workflow_match" in code, "1.5": "create_workflow_suggestion" in code and "next_steps_preview" in code, "3.3": "_track_workflow_rejection" in code and "current_rejections >= 3" in code, "3.5": "workflow_matcher" in code } all_covered = True for req_id, description in requirements.items(): if checks[req_id]: print(f" ✓ Requirement {req_id}: {description}") else: print(f" ✗ Requirement {req_id}: {description}") all_covered = False return all_covered except Exception as e: print(f"✗ Erreur: {e}") return False def main(): """Fonction principale.""" print("\n" + "=" * 60) print("Test des améliorations du SuggestionManager") print("=" * 60) tests = [ test_syntax, test_methods_exist, test_imports, test_init_parameters, test_rejection_tracking_logic, test_acceptance_tracking_logic, test_accept_reject_integration, test_requirements_coverage ] results = [] for test in tests: try: result = test() results.append(result) except Exception as e: print(f"\n✗ Erreur dans {test.__name__}: {e}") import traceback traceback.print_exc() results.append(False) # Résumé print("\n" + "=" * 60) print("RÉSUMÉ") print("=" * 60) passed = sum(results) total = len(results) print(f"Tests réussis: {passed}/{total}") if passed == total: print("\n✓ Tous les tests sont passés!") print("\nLes améliorations suivantes ont été implémentées:") print(" 1. check_workflow_match() - Vérification périodique des workflows") print(" 2. create_workflow_suggestion() - Création de suggestions détaillées") print(" 3. Tracking des rejets par workflow") print(" 4. Ajustement de priorité après 3 rejets (confiance * 0.9)") print(" 5. Tracking des acceptations pour récompenser les bons workflows") return 0 else: print(f"\n✗ {total - passed} test(s) échoué(s)") return 1 if __name__ == "__main__": sys.exit(main())