"""Unit tests for Amazon Unlimited Marketshare Snowflake SQL executor.""" from unittest.mock import MagicMock from unittest.mock import patch import pytest from snowflake import connector from feed_ingestion.flows.amazon_unlimited_marketshare. \ snowflake_executor import AmazonUnlimitedMarketshareSF from tests.conftest import SubstringMatcher @pytest.fixture def mock_executor(sf_config_mock, monkeypatch): """Yield executor context.""" connect_mock = MagicMock() monkeypatch.setattr(connector, 'connect', connect_mock) executor = AmazonUnlimitedMarketshareSF(sf_config_mock) with patch.object(executor, 'execute', wraps=executor.execute) as \ executor.ex_mock: yield executor def test_create_temp_staging_raw_table(mock_executor): """Test create_temp_staging_raw_table method.""" mock_executor.create_temp_staging_raw_table('temp_staging_raw_table') assert mock_executor.ex_mock.call_count == 1 mock_executor.ex_mock.assert_any_call( SubstringMatcher( containing=[ 'test_db.test_schema.temp_staging_raw_table', 'CREATE OR REPLACE TRANSIENT TABLE']), params={}) def test_load_marketshare_data(mock_executor): """Test load_marketshare_data method.""" mock_executor.load_marketshare_data('2018-05-01') assert mock_executor.ex_mock.call_count == 1 mock_executor.ex_mock.assert_any_call( SubstringMatcher( containing=[ 'INSERT INTO', 'test_db.test_schema.fact_market_share']), params={'date': '2018-05-01', 'storeid': 716})