""" Utilitaires de Test - Helpers pour les tests VWB Auteur : Dom, Alice, Kiro - 10 janvier 2026 Fonctions utilitaires pour faciliter les tests du Visual Workflow Builder et des extensions du catalogue d'actions VisionOnly. """ import os import tempfile import shutil import requests import time from typing import Dict, Any, Optional def create_test_environment(test_name: str) -> str: """Crée un environnement de test temporaire.""" temp_dir = tempfile.mkdtemp(prefix=f"vwb_test_{test_name}_") return temp_dir def cleanup_test_environment(test_env: str): """Nettoie l'environnement de test.""" if os.path.exists(test_env): shutil.rmtree(test_env, ignore_errors=True) def assert_file_exists(file_path: str, message: str = ""): """Vérifie qu'un fichier existe.""" assert os.path.exists(file_path), f"{message}: {file_path}" def assert_component_structure(content: str, required_elements: list): """Vérifie la structure d'un composant.""" for element in required_elements: assert element in content, f"Élément manquant : {element}" def measure_performance(func): """Décorateur pour mesurer les performances.""" def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"⏱️ Performance: {func.__name__} - {(end_time - start_time)*1000:.2f}ms") return result return wrapper def wait_for_service(url: str, timeout: int = 30) -> bool: """Attend qu'un service soit disponible.""" start_time = time.time() while time.time() - start_time < timeout: try: response = requests.get(url, timeout=5) if response.status_code == 200: return True except: pass time.sleep(1) return False def make_api_request(method: str, url: str, **kwargs): """Fait une requête API avec gestion d'erreurs.""" try: if method.upper() == "GET": return requests.get(url, timeout=10, **kwargs) elif method.upper() == "POST": return requests.post(url, timeout=10, **kwargs) else: raise ValueError(f"Méthode HTTP non supportée : {method}") except requests.exceptions.RequestException as e: raise Exception(f"Erreur de requête API : {e}") def assert_api_response(response, expected_status: int, message: str = ""): """Vérifie une réponse API.""" assert response.status_code == expected_status, \ f"{message}: Status {response.status_code}, attendu {expected_status}"