"""Unit tests for Deezer specific Snowflake SQL executor.""" from unittest.mock import MagicMock from unittest.mock import patch import pytest from snowflake import connector from feed_ingestion.flows.deezer.snowflake_executor \ import DeezerSme, DeezerTheOrchard 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 = DeezerTheOrchard(sf_config_mock) with patch.object(executor, 'execute', wraps=executor.execute) as \ executor.ex_mock: yield executor @pytest.mark.parametrize( 'deezer_class, expected_staging_raw_table, expected_feed_name', ( (DeezerTheOrchard, 'staging_raw_deezer_v1', 'deezer_daily_theorchard'), (DeezerSme, 'staging_raw_deezer_v2', 'deezer_daily_sme'), ) ) def test_properties(monkeypatch, sf_config_mock, deezer_class, expected_staging_raw_table, expected_feed_name): """Test Deezer specific executor properties.""" monkeypatch.setattr(connector, 'connect', MagicMock()) assert deezer_class(sf_config_mock).feed_name \ == expected_feed_name assert deezer_class(sf_config_mock).storeid == 348 spec_version = int(expected_staging_raw_table[-1]) assert ( deezer_class(sf_config_mock).staging_raw_table(spec_version) == expected_staging_raw_table) def test_load_staging_fact_table(mock_executor): """Test load_staging_fact_table method.""" mock_executor.load_staging_fact_table('2017-01-01') assert mock_executor.ex_mock.call_count == 1 mock_executor.ex_mock.assert_any_call( SubstringMatcher( containing=[ 'test_db.test_schema.staging_fact_analytics_' 'deezer_daily_theorchard_20170101', 'test_db.test_schema.staging_raw_deezer_v1']), params={'reportdate': '2017-01-01', 'storeid': 348, 'feedid': 9}) def test_load_fact_error_data(mock_executor): """Test load_fact_error_data method.""" mock_executor.load_fact_error_data('2017-01-01') assert mock_executor.ex_mock.call_count == 1 mock_executor.ex_mock.assert_any_call( SubstringMatcher( containing=[ 'test_db.test_schema.staging_fact_analytics_' 'deezer_daily_theorchard_20170101', 'test_db.test_schema.staging_raw_deezer_v1', 'test_db.test_schema.fact_analytics_error']), params={'reportdate': '2017-01-01', 'storeid': 348, 'feedid': 9})