"""Tests for S3 connector.""" from typing import Any, Generator from unittest.mock import MagicMock, patch import pytest from vectororder.connectors import s3 as s3_connector @pytest.fixture(autouse=True) def reset_s3_client_after_test() -> Generator[None, Any, None]: """Reset cached connectors before and after each test.""" s3_connector.get_s3_client.cache_clear() yield s3_connector.get_s3_client.cache_clear() @patch("boto3.client") @patch("vectororder.connectors.s3.Config") def test_get_s3_client(mock_config: MagicMock, mock_boto3_client: MagicMock) -> None: """Test get_s3_client.""" result = s3_connector.get_s3_client() mock_config.assert_called_once_with(s3={"use_accelerate_endpoint": False}) mock_boto3_client.assert_called_once_with("s3", config=mock_config.return_value) assert result == mock_boto3_client.return_value @patch("boto3.client") @patch("vectororder.connectors.s3.Config") def test_get_s3_client_with_transfer_acceleration( mock_config: MagicMock, mock_boto3_client: MagicMock ) -> None: """Test get_s3_client with transfer acceleration.""" result = s3_connector.get_s3_client(use_accelerate_endpoint=True) mock_config.assert_called_once_with(s3={"use_accelerate_endpoint": True}) mock_boto3_client.assert_called_once_with("s3", config=mock_config.return_value) assert result == mock_boto3_client.return_value @patch("boto3.client") @patch("vectororder.connectors.s3.Config") def test_get_s3_client_cached( mock_config: MagicMock, mock_boto3_client: MagicMock ) -> None: """Test get_s3_client cached.""" initial_client = s3_connector.get_s3_client() result = s3_connector.get_s3_client() mock_config.assert_called_once_with(s3={"use_accelerate_endpoint": False}) mock_boto3_client.assert_called_once_with("s3", config=mock_config.return_value) assert result is initial_client