diff --git a/tests/utils/repository/test_model_repository.py b/tests/utils/repository/test_model_repository.py index 72b18d9..f909b4b 100644 --- a/tests/utils/repository/test_model_repository.py +++ b/tests/utils/repository/test_model_repository.py @@ -802,3 +802,66 @@ def test_generate_artifacts_header_not_found( with pytest.raises(FileNotFoundError, match='Header file does not exist'): repo._generate_artifacts(mock_train_result) + + +@patch('model_manager.utils.repository.model_repository.ModelServing') +@patch('model_manager.utils.repository.model_repository.json.dump') +@patch('model_manager.utils.repository.model_repository.Reports') +@patch('model_manager.utils.repository.model_repository.path.exists') +@patch('model_manager.utils.repository.model_repository.path.join') +@patch('model_manager.utils.repository.model_repository.os.makedirs') +@patch('model_manager.utils.repository.model_repository.shutil.copy') +@patch('builtins.open', create=True) +def test_generate_artifacts_full_success_path( + mock_open, + mock_copy, + mock_makedirs, + mock_path_join, + mock_exists, + mock_reports_class, + mock_json_dump, + mock_model_serving_class, + mock_logger, + mock_train_result, +): + """Test _generate_artifacts complete success path covering lines 147-148.""" + from model_manager.utils.repository.model_repository import ModelRepository + + repo = ModelRepository( + url='http://mlflow.test', username='user', password='pass', logger=mock_logger + ) + + # Mock all path operations + def join_side_effect(*args): + return '/'.join(str(arg) for arg in args) + + mock_path_join.side_effect = join_side_effect + + # Mock path.exists to return True for header file and other files + def exists_side_effect(path_arg): + if 'header.html' in str(path_arg): + return True # Header exists + if 'report.html' in str(path_arg): + return False # Report doesn't exist yet (will be created) + return False + + mock_exists.side_effect = exists_side_effect + + # Mock Reports class + mock_reports_instance = MagicMock() + mock_reports_instance.generate_report = MagicMock(return_value='report') + mock_reports_class.return_value = mock_reports_instance + + # Mock DataFrame.to_csv to avoid actual file I/O + with patch.object(pd.DataFrame, 'to_csv'): + result = repo._generate_artifacts(mock_train_result) + + # Verify the result is returned correctly + assert result == mock_train_result + + # Verify _setup_run_directory was called (line 147) + mock_makedirs.assert_called_once() + mock_copy.assert_called_once() + + # Verify _generate_report was called (line 148) + mock_reports_instance.generate_report.assert_called_once()