"""Unit tests for main_market_share generic Snowflake SQL executor.""" from unittest.mock import MagicMock import pytest from snowflake_connector.etl_connector import connector from feed_ingestion.common.marketshare_sf.base_executor import \ SnowflakeSQLExecutorMS def feed_name(self): """Return value to mock the property.""" return 'google_play_marketshare' def storeid(self): """Return value to mock the property.""" return 0 def staging_raw_table(self): """Return value to mock the property.""" return 'staging_raw_google_play_marketshare' def test_notimplemented_properties(monkeypatch, sf_config_mock): """Test properties to be implemented in feed specific executors.""" monkeypatch.setattr(connector, 'connect', MagicMock()) with pytest.raises(NotImplementedError): SnowflakeSQLExecutorMS(sf_config_mock).feed_name with pytest.raises(NotImplementedError): SnowflakeSQLExecutorMS(sf_config_mock).storeid with pytest.raises(NotImplementedError): SnowflakeSQLExecutorMS(sf_config_mock).staging_raw_table def test_marketshare_properties(monkeypatch, sf_config_mock): """Test market share tables names properties.""" monkeypatch.setattr(connector, 'connect', MagicMock()) assert ( SnowflakeSQLExecutorMS(sf_config_mock).main_marketshare_table == 'fact_market_share') def test_notimplemented_methods(monkeypatch, sf_config_mock): """Test not implemented methods.""" connect_mock = MagicMock() monkeypatch.setattr(connector, 'connect', connect_mock) with pytest.raises(NotImplementedError): SnowflakeSQLExecutorMS( sf_config_mock).load_marketshare_data('2017-08-02') def test__delete_from_marketshare_table(monkeypatch, sf_config_mock): """Test _delete_from_marketshare_table method.""" connect_mock = MagicMock() monkeypatch.setattr(connector, 'connect', connect_mock) monkeypatch.setattr( SnowflakeSQLExecutorMS, 'feed_name', property(feed_name)) monkeypatch.setattr(SnowflakeSQLExecutorMS, 'storeid', property(storeid)) SnowflakeSQLExecutorMS(sf_config_mock)._delete_from_marketshare_table( 'fact_market_share', '2017-08-02') assert connect_mock.return_value.cursor.return_value.execute.\ call_count == 1 def test_delete_from_marketshare_table(monkeypatch, sf_config_mock): """Test delete_from_marketshare_table method.""" connect_mock = MagicMock() monkeypatch.setattr(connector, 'connect', connect_mock) monkeypatch.setattr( SnowflakeSQLExecutorMS, 'feed_name', property(feed_name)) monkeypatch.setattr(SnowflakeSQLExecutorMS, 'storeid', property(storeid)) SnowflakeSQLExecutorMS( sf_config_mock).delete_from_marketshare_table('2017-08-02') assert connect_mock.return_value.cursor.return_value.execute.\ call_count == 1