SIENTIAPDE-1350: Configure cleanup test script and improve test isolation. This commit configures the cleanup test script to load environment variables from a .env file and use them for Temporal connection. It also adds a fixture to clean up temporary directories created by tests, ensuring better test isolation and preventing potential conflicts. Additionally, it adds the 'uri' property to the MongoDB config.

This commit is contained in:
Bruno Domingues
2025-11-25 00:44:55 -03:00
parent 463906073e
commit f3c88885ea
4 changed files with 79 additions and 13 deletions

View File

@@ -1,6 +1,7 @@
"""Unit tests for ModelRepository with 100% coverage."""
import os
import shutil
from unittest.mock import MagicMock, patch
import numpy as np
@@ -8,6 +9,29 @@ import pandas as pd
import pytest
@pytest.fixture(autouse=True)
def cleanup_temp_directories():
"""Clean up temporary directories after each test."""
# Get the temp directory path
current_file_dir = os.path.dirname(os.path.abspath(__file__))
model_manager_dir = os.path.dirname(os.path.dirname(os.path.dirname(current_file_dir)))
temp_dir = os.path.join(model_manager_dir, 'reports', 'temp')
# Run the test
yield
# Clean up after test
if os.path.exists(temp_dir):
for item in os.listdir(temp_dir):
item_path = os.path.join(temp_dir, item)
if os.path.isdir(item_path) and item.startswith('test_run_'):
try:
shutil.rmtree(item_path)
except (OSError, PermissionError):
# Ignore cleanup errors
pass
@pytest.fixture
def mock_logger():
"""Create a mock logger."""
@@ -79,6 +103,9 @@ def test_save_model_success(mock_model_serving_class, mock_logger, mock_train_re
url='http://mlflow.test', username='user', password='pass', logger=mock_logger
)
# Reset mock after initialization to focus on method-specific calls
mock_logger.reset_mock()
repo._get_next_run_name = MagicMock(return_value='test_experiment-1')
repo._generate_artifacts = MagicMock(return_value=mock_train_result)
repo._save_run = MagicMock()
@@ -105,6 +132,9 @@ def test_cleanup_run_directory_exists(
url='http://mlflow.test', username='user', password='pass', logger=mock_logger
)
# Reset mock after initialization to focus on method-specific calls
mock_logger.reset_mock()
mock_exists.return_value = True
repo.cleanup_run_directory('/tmp/test_run') # noqa: S108
@@ -124,6 +154,9 @@ def test_cleanup_run_directory_not_exists(mock_exists, mock_model_serving_class,
url='http://mlflow.test', username='user', password='pass', logger=mock_logger
)
# Reset mock after initialization to focus on method-specific calls
mock_logger.reset_mock()
mock_exists.return_value = False
repo.cleanup_run_directory('/tmp/test_run') # noqa: S108
@@ -141,6 +174,9 @@ def test_cleanup_run_directory_empty_path(mock_model_serving_class, mock_logger)
url='http://mlflow.test', username='user', password='pass', logger=mock_logger
)
# Reset mock after initialization to focus on method-specific calls
mock_logger.reset_mock()
repo.cleanup_run_directory('')
mock_logger.info.assert_called_once_with('No run directory specified, skipping cleanup')
@@ -756,9 +792,14 @@ def test_generate_artifacts_no_run_name(
)
mock_train_result.run_name = None
mock_exists.return_value = True # Mock reports directory exists
with pytest.raises(ValueError, match='run_name must be set'):
repo._generate_artifacts(mock_train_result)
# Mock _create_run_directory to avoid creating real directories
with patch.object(repo, '_create_run_directory') as mock_create_dir:
mock_create_dir.return_value = '/mock/run/dir'
with pytest.raises(ValueError, match='run_name must be set'):
repo._generate_artifacts(mock_train_result)
@patch('model_manager.utils.repository.model_repository.ModelServing')
@@ -800,8 +841,12 @@ def test_generate_artifacts_header_not_found(
mock_exists.side_effect = exists_side_effect
with pytest.raises(FileNotFoundError, match='Header file does not exist'):
repo._generate_artifacts(mock_train_result)
# Mock _create_run_directory to avoid creating real directories
with patch.object(repo, '_create_run_directory') as mock_create_dir:
mock_create_dir.return_value = '/mock/run/dir'
with pytest.raises(FileNotFoundError, match='Header file does not exist'):
repo._generate_artifacts(mock_train_result)
@patch('model_manager.utils.repository.model_repository.ModelServing')