v1.0 - Version stable: multi-PC, détection UI-DETR-1, 3 modes exécution

- Frontend v4 accessible sur réseau local (192.168.1.40)
- Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard)
- Ollama GPU fonctionnel
- Self-healing interactif
- Dashboard confiance

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Dom
2026-01-29 11:23:51 +01:00
parent 21bfa3b337
commit a27b74cf22
1595 changed files with 412691 additions and 400 deletions

View File

@@ -0,0 +1,82 @@
"""
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}"