""" Test simple du WhitelistManager sans dépendances lourdes """ import sys from pathlib import Path # Ajouter le répertoire geniusia2 au path sys.path.insert(0, str(Path(__file__).parent / "geniusia2")) from core.whitelist_manager import WhitelistManager from core.logger import Logger from core.config import ensure_directories def test_whitelist_basic_functionality(): """Test des fonctionnalités de base du WhitelistManager""" print("Test des fonctionnalités de base du WhitelistManager") print("=" * 60) # S'assurer que les répertoires existent ensure_directories() # Test 1: Créer un WhitelistManager print("\n1. Création du WhitelistManager:") logger = Logger() wm = WhitelistManager(logger=logger, require_admin_confirmation=False) print(f" ✓ WhitelistManager créé") print(f" - Chemin: {wm.whitelist_path}") # Test 2: Ajouter des fenêtres print("\n2. Ajout de fenêtres à la liste blanche:") windows_to_add = [ "Dolibarr*", "Firefox*", "*Chrome", "Visual Studio Code", "GNOME Terminal" ] for window in windows_to_add: success = wm.add_to_whitelist(window, admin_confirmed=True, added_by="test") print(f" {'✓' if success else '✗'} Ajouté: {window}") print(f" - Total: {len(wm.get_whitelist())} entrées") # Test 3: Vérification is_window_allowed avec différents patterns print("\n3. Test de vérification is_window_allowed:") test_cases = [ # (window_title, expected_result, description) ("Dolibarr - Facturation", True, "Prefix wildcard"), ("Dolibarr ERP", True, "Prefix wildcard"), ("Firefox - Mozilla", True, "Prefix wildcard"), ("Google Chrome", True, "Suffix wildcard"), ("Microsoft Edge Chrome", True, "Suffix wildcard"), ("Visual Studio Code", True, "Exact match"), ("GNOME Terminal", True, "Exact match"), ("Unknown Application", False, "Not in whitelist"), ("Notepad", False, "Not in whitelist"), ("", False, "Empty string"), ] all_passed = True for window, expected, description in test_cases: allowed = wm.is_window_allowed(window) passed = allowed == expected all_passed = all_passed and passed status = "✓" if passed else "✗" result = "Autorisé" if allowed else "Bloqué" print(f" {status} {result}: '{window}' ({description})") # Test 4: Métadonnées et informations print("\n4. Test des métadonnées:") info = wm.get_entry_info("Dolibarr*") if info: print(f" ✓ Informations pour 'Dolibarr*':") print(f" - Ajouté le: {info.get('added_at')}") print(f" - Ajouté par: {info.get('added_by')}") print(f" - Admin confirmé: {info.get('admin_confirmed')}") # Test 5: Statistiques print("\n5. Statistiques:") stats = wm.get_statistics() print(f" ✓ Total entrées: {stats['total_entries']}") print(f" ✓ Avec wildcards: {stats['entries_with_wildcards']}") print(f" ✓ Exactes: {stats['entries_exact']}") # Test 6: Suppression print("\n6. Test de suppression:") removed = wm.remove_from_whitelist("Firefox*") print(f" ✓ Supprimé 'Firefox*': {removed}") # Vérifier que Firefox n'est plus autorisé allowed = wm.is_window_allowed("Firefox - Mozilla") print(f" {'✓' if not allowed else '✗'} Firefox maintenant bloqué: {not allowed}") # Test 7: Patterns complexes avec wildcards print("\n7. Test de patterns complexes:") wm.clear_whitelist() wm.add_to_whitelist("Fire*fox", admin_confirmed=True) complex_tests = [ ("Firefox", True), ("Firefoxes", True), ("Fire123fox", True), ("Firefly", False), ("Chrome", False) ] for window, expected in complex_tests: allowed = wm.is_window_allowed(window) passed = allowed == expected status = "✓" if passed else "✗" result = "Autorisé" if allowed else "Bloqué" print(f" {status} {result}: '{window}'") # Test 8: Sauvegarde et rechargement print("\n8. Test sauvegarde et rechargement:") wm.clear_whitelist() wm.add_to_whitelist("Test Window 1", admin_confirmed=True) wm.add_to_whitelist("Test Window 2", admin_confirmed=True) wm.save_whitelist() print(f" ✓ Sauvegardé: {len(wm.get_whitelist())} entrées") # Créer un nouveau manager pour tester le chargement wm2 = WhitelistManager( whitelist_path=str(wm.whitelist_path), logger=logger, require_admin_confirmation=False ) print(f" ✓ Rechargé: {len(wm2.get_whitelist())} entrées") if len(wm2.get_whitelist()) == 2: print(f" ✓ Persistance vérifiée") else: print(f" ✗ Erreur de persistance") all_passed = False # Test 9: Export/Import print("\n9. Test export/import:") export_path = "test_whitelist_export.json" success = wm.export_whitelist(export_path) print(f" ✓ Exporté: {success}") wm.clear_whitelist() print(f" ✓ Liste vidée: {len(wm.get_whitelist())} entrées") success = wm.import_whitelist(export_path, admin_confirmed=True) print(f" ✓ Réimporté: {success}") print(f" ✓ Après import: {len(wm.get_whitelist())} entrées") # Nettoyer import os if os.path.exists(export_path): os.remove(export_path) print(f" ✓ Fichier d'export nettoyé") # Test 10: Confirmation admin print("\n10. Test de confirmation admin:") wm_admin = WhitelistManager(logger=logger, require_admin_confirmation=True) # Sans confirmation admin success = wm_admin.add_to_whitelist("Test Without Confirmation", admin_confirmed=False) print(f" {'✓' if not success else '✗'} Rejeté sans confirmation: {not success}") # Avec confirmation admin success = wm_admin.add_to_whitelist("Test With Confirmation", admin_confirmed=True) print(f" {'✓' if success else '✗'} Accepté avec confirmation: {success}") print("\n" + "=" * 60) if all_passed: print("✓ TOUS LES TESTS RÉUSSIS!") else: print("✗ CERTAINS TESTS ONT ÉCHOUÉ") print("=" * 60) return all_passed if __name__ == "__main__": try: success = test_whitelist_basic_functionality() sys.exit(0 if success else 1) except Exception as e: print(f"\n✗ Erreur fatale: {e}") import traceback traceback.print_exc() sys.exit(1)