"""Unit tests for Deezer Marketshare Snowflake SQL executor.""" from unittest.mock import MagicMock from unittest.mock import patch import pytest from snowflake import connector from feed_ingestion.flows.deezer_marketshare. \ snowflake_executor import DeezerMarketshareSF from feed_ingestion.flows.deezer_marketshare.stage_loader import DeezerMSSL 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 = DeezerMarketshareSF(sf_config_mock) with patch.object(executor, 'execute', wraps=executor.execute) as \ executor.ex_mock: yield executor @pytest.fixture def mock_sql_loader(): """Return sql_loader mock.""" sql_loader_path = ( 'feed_ingestion.flows.deezer_marketshare.' 'snowflake_executor.sql_loader') with patch(sql_loader_path) as sql_loader: yield sql_loader @pytest.fixture def mock_stage_loader(mock_sql_loader): """Yield executor context.""" stage_loader = DeezerMSSL(MagicMock(), mock_sql_loader) stage_loader.resolve_sql_loader_and_execute = MagicMock() yield stage_loader 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': 348})