"""Tests for SnowflakeClient.""" from unittest.mock import patch from unittest.mock import MagicMock import pytest from src.connectors.snowflake import SnowflakeClient class TestSnowflakeClient: """Test SnowflakeClient class.""" @pytest.fixture(autouse=True, scope='class') def config(self): """Set mock config.""" with patch('src.connectors.snowflake.config') as mock_config: mock_config.SNOWFLAKE_USER = 'test_user' mock_config.SNOWFLAKE_ACCOUNT = 'test_account' mock_config.SNOWFLAKE_ROLE = 'test_role' mock_config.SNOWFLAKE_WAREHOUSE = 'test_warehouse' yield mock_config @pytest.fixture(autouse=True) def secrets_manager(self): """Mock secrets manager.""" with (patch('src.connectors.snowflake.SecretsManagerClient') as mock_secrets_manager): mock_secrets_manager_instance = MagicMock() mock_secrets_manager_instance.get_secret.return_value = 'dGVzdA==' mock_secrets_manager.return_value = mock_secrets_manager_instance yield mock_secrets_manager_instance @patch('src.connectors.snowflake.snowflake.connector') def test_init(self, mock_snowflake_connector, config, secrets_manager): """Test initialization of SnowflakeClient.""" mock_snowflake_connector.connect.return_value = 'test_connection' snowflake_client = SnowflakeClient() assert snowflake_client.conn == 'test_connection' assert mock_snowflake_connector.connect.call_args.kwargs == { 'user': 'test_user', 'account': 'test_account', 'role': 'test_role', 'private_key': b'test', 'warehouse': 'test_warehouse', } secrets_manager.get_secret.assert_called_once() @patch('src.connectors.snowflake.snowflake.connector') def test_execute_query(self, mock_snowflake_connector, config, secrets_manager): """Test execute_query function.""" mock_connector = MagicMock() mock_snowflake_connector.connect.return_value = mock_connector mock_cursor = MagicMock() mock_connector.cursor.return_value = mock_cursor mock_cursor.description = [('column1',), ('column2',)] mock_cursor.__iter__.return_value = [('value1', 'value2')] snowflake_client = SnowflakeClient() result = snowflake_client.execute_query('test_query') assert result.to_dict() == { 'column1': {0: 'value1'}, 'column2': {0: 'value2'} } mock_cursor.execute.assert_called_once_with('test_query') mock_cursor.close.assert_called_once()