"""Tests for Snowflake src.logic.""" import pytest from unittest.mock import MagicMock from unittest.mock import patch from unittest.mock import mock_open from src.logic.snowflake import run_scripts from src.logic.snowflake import run_script from src.logic.snowflake import get_connection import config @pytest.fixture def mock_cursor(): """Mock Snowflake cursor.""" return MagicMock() @pytest.fixture def mock_snowflake_creds(): """Mock Snowflake credentials.""" return 'test_user', '/tmp/test_key.p8', 'test_password' @patch('src.logic.snowflake.get_connection') @patch('src.logic.snowflake.glob.glob') @patch('builtins.open', new_callable=mock_open, read_data='SELECT 1;') def test_run_scripts( mock_open, mock_glob, mock_get_conn, mock_snowflake_creds ): """Test running SQL scripts from a directory.""" mock_conn = MagicMock() mock_get_conn.return_value = mock_conn mock_cursor = MagicMock() mock_conn.cursor.return_value.__enter__.return_value = mock_cursor mock_glob.return_value = ['/tmp/sql/script1.sql', '/tmp/sql/script2.sql'] scripts_run = run_scripts('/tmp/sql', *mock_snowflake_creds) assert scripts_run == 2 assert mock_cursor.execute.call_count == 2 @patch('builtins.open', new_callable=mock_open, read_data='SELECT 1;') @patch('src.logic.snowflake.sqlparse.split') def test_run_script(mock_sqlparse, mock_open, mock_cursor): """Test executing a single SQL script.""" mock_sqlparse.return_value = ['SELECT 1;', 'SELECT 2;'] run_script(mock_cursor, '/tmp/sql/script1.sql') mock_cursor.execute.assert_any_call('SELECT 1;') mock_cursor.execute.assert_any_call('SELECT 2;') @patch('tempfile.NamedTemporaryFile') @patch('src.logic.snowflake.sc.connect') def test_get_connection(mock_connect, mock_tempfile, mock_snowflake_creds): """Test establishing a connection to Snowflake.""" username, private_key, private_key_pwd = mock_snowflake_creds mock_tempfile.return_value.name = '/tmp/test_key.p8' mock_connect.return_value = MagicMock() conn = get_connection( username, mock_tempfile.return_value.name, private_key_pwd ) mock_connect.assert_called_with( account=config.SNOWFLAKE_ACCOUNT, user=username, private_key_file='/tmp/test_key.p8', private_key_file_pwd=private_key_pwd, ) assert conn is not None