- 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>
154 lines
5.7 KiB
Python
154 lines
5.7 KiB
Python
"""
|
|
Tests de régression pour s'assurer que les corrections d'imports
|
|
n'ont pas cassé les fonctionnalités existantes.
|
|
|
|
Auteur: Dom, Alice Kiro
|
|
Date: 20 décembre 2024
|
|
"""
|
|
|
|
import pytest
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
# Ajouter le répertoire racine au path
|
|
sys.path.insert(0, str(Path(__file__).parent.parent.parent))
|
|
|
|
|
|
class TestImportsRegression:
|
|
"""Tests de régression pour les imports"""
|
|
|
|
def test_basic_models_still_work(self):
|
|
"""Test que les modèles de base fonctionnent encore"""
|
|
from core.models import RawSession, ScreenState, UIElement
|
|
from datetime import datetime
|
|
|
|
# Test création d'objets de base
|
|
from core.models.screen_state import WindowContext, RawLevel, PerceptionLevel, ContextLevel, EmbeddingRef
|
|
|
|
window = WindowContext(app_name='test', window_title='test', screen_resolution=[1920, 1080])
|
|
raw = RawLevel(screenshot_path='test.png', capture_method='test', file_size_bytes=1024)
|
|
embedding_ref = EmbeddingRef(provider='test', vector_id='test.npy', dimensions=512)
|
|
perception = PerceptionLevel(
|
|
embedding=embedding_ref,
|
|
detected_text=['test'],
|
|
text_detection_method='test',
|
|
confidence_avg=0.9
|
|
)
|
|
context = ContextLevel()
|
|
|
|
screen_state = ScreenState(
|
|
screen_state_id='test_123',
|
|
timestamp=datetime.now(),
|
|
session_id='session_123',
|
|
window=window,
|
|
raw=raw,
|
|
perception=perception,
|
|
context=context
|
|
)
|
|
|
|
# Vérifier que les alias fonctionnent
|
|
assert screen_state.state_id == 'test_123'
|
|
assert screen_state.raw_level == raw
|
|
assert screen_state.perception_level == perception
|
|
|
|
def test_lazy_imports_work(self):
|
|
"""Test que les lazy imports fonctionnent"""
|
|
from core.models import get_workflow, get_action, get_target_spec
|
|
|
|
Workflow = get_workflow()
|
|
Action = get_action()
|
|
TargetSpec = get_target_spec()
|
|
|
|
# Vérifier que ce sont les bonnes classes
|
|
assert Workflow.__name__ == 'Workflow'
|
|
assert Action.__name__ == 'Action'
|
|
assert TargetSpec.__name__ == 'TargetSpec'
|
|
|
|
# Test création d'objets
|
|
target_spec = TargetSpec(by_role='button', by_text='Test Button')
|
|
action = Action(type='mouse_click', target=target_spec)
|
|
|
|
assert action.type == 'mouse_click'
|
|
assert action.target.by_role == 'button'
|
|
|
|
def test_storage_manager_works(self):
|
|
"""Test que StorageManager fonctionne encore"""
|
|
from core.persistence.storage_manager import StorageManager
|
|
|
|
storage = StorageManager()
|
|
assert storage is not None
|
|
|
|
# Test que les méthodes existent
|
|
assert hasattr(storage, 'save_workflow')
|
|
assert hasattr(storage, 'load_workflow')
|
|
assert hasattr(storage, 'list_workflows')
|
|
|
|
def test_interfaces_available(self):
|
|
"""Test que les interfaces abstraites sont disponibles"""
|
|
from core.interfaces import ITargetResolver, IActionExecutor, IErrorHandler
|
|
|
|
# Vérifier qu'elles sont abstraites
|
|
assert hasattr(ITargetResolver, '__abstractmethods__')
|
|
assert hasattr(IActionExecutor, '__abstractmethods__')
|
|
assert hasattr(IErrorHandler, '__abstractmethods__')
|
|
|
|
# Vérifier qu'on ne peut pas les instancier
|
|
with pytest.raises(TypeError):
|
|
ITargetResolver()
|
|
with pytest.raises(TypeError):
|
|
IActionExecutor()
|
|
with pytest.raises(TypeError):
|
|
IErrorHandler()
|
|
|
|
def test_type_checking_works(self):
|
|
"""Test que TYPE_CHECKING fonctionne correctement"""
|
|
import core.models as models
|
|
|
|
# Les imports conditionnels ne devraient pas être disponibles à l'exécution
|
|
assert not hasattr(models, 'Workflow')
|
|
assert not hasattr(models, 'Action')
|
|
assert not hasattr(models, 'TargetSpec')
|
|
|
|
# Mais les lazy imports devraient être disponibles
|
|
assert hasattr(models, 'get_workflow')
|
|
assert hasattr(models, 'get_action')
|
|
assert hasattr(models, 'get_target_spec')
|
|
|
|
def test_existing_imports_still_work(self):
|
|
"""Test que les imports existants dans d'autres modules fonctionnent"""
|
|
# Ces imports directs devraient encore fonctionner
|
|
from core.models.workflow_graph import Workflow, Action, TargetSpec
|
|
from core.models.screen_state import ScreenState
|
|
from core.models.ui_element import UIElement
|
|
|
|
# Vérifier que ce sont les bonnes classes
|
|
assert Workflow.__name__ == 'Workflow'
|
|
assert Action.__name__ == 'Action'
|
|
assert TargetSpec.__name__ == 'TargetSpec'
|
|
assert ScreenState.__name__ == 'ScreenState'
|
|
assert UIElement.__name__ == 'UIElement'
|
|
|
|
def test_serialization_still_works(self):
|
|
"""Test que la sérialisation/désérialisation fonctionne encore"""
|
|
from core.models import get_action, get_target_spec
|
|
|
|
Action = get_action()
|
|
TargetSpec = get_target_spec()
|
|
|
|
# Créer un objet
|
|
target_spec = TargetSpec(by_role='button', by_text='Test Button')
|
|
action = Action(type='mouse_click', target=target_spec)
|
|
|
|
# Sérialiser
|
|
action_dict = action.to_dict()
|
|
assert action_dict['type'] == 'mouse_click'
|
|
assert action_dict['target']['by_role'] == 'button'
|
|
|
|
# Désérialiser
|
|
action_restored = Action.from_dict(action_dict)
|
|
assert action_restored.type == 'mouse_click'
|
|
assert action_restored.target.by_role == 'button'
|
|
|
|
|
|
if __name__ == "__main__":
|
|
pytest.main([__file__, "-v"]) |