"""Unit tests for Youtube Weekly SQL executor.""" import datetime from unittest.mock import MagicMock from unittest.mock import patch import pytest from snowflake import connector from feed_ingestion.flows.youtube_weekly.snowflake_executor \ import YoutubeWeekly from tests.conftest import SubstringMatcher @pytest.fixture def mock_sql_loader(): """Return sql_loader mock.""" sql_loader_path = ( 'feed_ingestion.flows.youtube_weekly.snowflake_executor.sql_loader') with patch(sql_loader_path) as sql_loader: yield sql_loader @pytest.fixture def mock_executor(sf_config_mock, monkeypatch): """Yield executor context.""" connect_mock = MagicMock() monkeypatch.setattr(connector, 'connect', connect_mock) executor = YoutubeWeekly(sf_config_mock) with patch.object(executor, 'execute', wraps=executor.execute) as \ executor.ex_mock: executor.fetchall = MagicMock() yield executor def test_load_staging_fact_table(mock_executor): """Test load_staging_fact_table method.""" mock_executor.load_staging_fact_table('2018-02-12') assert mock_executor.ex_mock.call_count == 1 mock_executor.ex_mock.assert_any_call( SubstringMatcher( containing=[ 'test_db.test_schema.staging_fact_analytics_' 'youtube_weekly_20180212', 'test_db.test_schema.staging_raw_youtube_v11']), params={ 'reportdate': '2018-02-12', 'storeid': 453, 'feedid': 6, 'from_date': datetime.date(2018, 2, 12), 'to_date': datetime.date(2018, 2, 18), }) def test_load_fact_error_data(mock_executor): """Test load_fact_error_data method.""" mock_executor.load_fact_error_data('2018-02-12') assert mock_executor.ex_mock.call_count == 1 mock_executor.ex_mock.assert_any_call( SubstringMatcher( containing=[ 'test_db.test_schema.staging_fact_analytics_' 'youtube_weekly_20180212', 'test_db.test_schema.staging_raw_youtube_v11', 'test_db.test_schema.fact_analytics_error']), params={ 'reportdate': '2018-02-12', 'storeid': 453, 'feedid': 6, 'from_date': datetime.date(2018, 2, 12), 'to_date': datetime.date(2018, 2, 18), }) def test_load_fact_data(mock_executor): """Test load_fact_data method.""" mock_executor.load_fact_data('2018-02-12') assert mock_executor.ex_mock.call_count == 1 mock_executor.ex_mock.assert_any_call( SubstringMatcher( containing=[ 'test_db.test_schema.staging_fact_analytics_' 'youtube_weekly_20180212', 'test_db.test_schema.staging_raw_youtube_v11', 'test_db.test_schema.fact_analytics']), params={ 'from_date': datetime.date(2018, 2, 12), 'to_date': datetime.date(2018, 2, 18), })