"""Unit tests for backload Snowflake SQL executor.""" from unittest.mock import MagicMock from unittest.mock import patch import pytest from snowflake import connector from feed_ingestion.bin import snowflake_executor from tests.conftest import SubstringMatcher @pytest.fixture def mock_backload_executor(sf_config_mock, monkeypatch): """Yield executor context.""" connect_mock = MagicMock() monkeypatch.setattr(connector, 'connect', connect_mock) executor = snowflake_executor.BackloadTasksExecutor(sf_config_mock) with patch.object(executor, 'execute', wraps=executor.execute) as \ executor.ex_mock: executor.fetchall = MagicMock() yield executor def test_insert_backload_tasks(mock_backload_executor): """Test insert backload tasks method.""" params = dict( licensor='sme', flow='amazon_music', date='2020-01-15', context='{"date": "2020-01-15"}' ) mock_backload_executor.insert_backload_tasks(**params) mock_backload_executor.ex_mock.assert_any_call( SubstringMatcher( containing=[ 'INSERT INTO test_db.test_schema.backload_tasks', ]), params=params) assert mock_backload_executor.ex_mock.call_count == 1 def test_delete_backload_tasks(mock_backload_executor): """Test delete backload tasks method.""" params = dict( licensor='sme', flow='amazon_music', period_start='2020-01-15', period_end='2020-01-17', ) mock_backload_executor.delete_backload_tasks(**params) mock_backload_executor.ex_mock.assert_any_call( SubstringMatcher( containing=[ 'DELETE FROM test_db.test_schema.backload_tasks', ]), params=params) assert mock_backload_executor.ex_mock.call_count == 1