"""Unit tests for tasks of Deezer Marketshare Workflow.""" from unittest.mock import MagicMock, Mock from garcon_contrib.dynamo_feed_status import garcon_feed_status import pytest from feed_ingestion.flows.deezer_marketshare import tasks from feed_ingestion.util import task_status from feed_ingestion.util.aws import s3 as s3utils import feed_ingestion.util.deezer_zephir_utils as zephir _date = '2018-05-01' @pytest.fixture def expected_bootstrap_response(): """Response for bootstrap task.""" return { 'feed_name': 'deezer_marketshare', 'secrets_path': 'deezer_marketshare', 'date': '2018-05-01', 's3_archive_path': 's3://dev-cucumbers/DeezerMarketShare/archives/2018-05/', 's3_temp_staging_raw_bucket': 's3://dev-cucumbers/DeezerMarketShare/processed/2018-05/', 'zephir_path': '/external/download?file=invoices/', 'zephir_zip_pattern': 'TheOrchard_201805_(adjustment_)?\\d{4,5}.zip', 'drop_file_name': 'summary_v1.csv', 'staging_raw_table': 'staging_raw_deezer_market_share' } def test_bootstrap( expected_bootstrap_response): """Test bootstrap task.""" result = tasks.bootstrap( activity=MagicMock(), date=_date, reload=None) assert result == expected_bootstrap_response def test_fetch_from_drop_location_download_failure(monkeypatch): """Test fetch_from_drop_location: zephir fetch failure.""" # setup mocks/fixtures activity_mock = MagicMock() monkeypatch.setattr( garcon_feed_status, 'get_overall_status', value=MagicMock()) input_date, expected_date = _date, _date context = tasks.bootstrap(activity_mock, input_date, 'theorchard') upload_to_s3 = MagicMock(return_value='16157363') delete_s3_obj = MagicMock(return_value='file deleted') # mock download_invoice_from_zephir response download_invoice_from_zephir = Mock(side_effect=FileNotFoundError()) monkeypatch.setattr(task_status, 'is_completed_task', MagicMock( return_value=False)) monkeypatch.setattr( garcon_feed_status, 'set_missing_files', value=MagicMock()) monkeypatch.setattr( garcon_feed_status, 'set_overall_status', value=MagicMock()) monkeypatch.setattr(task_status, 'mark_completed_task', value=MagicMock()) monkeypatch.setattr( zephir, 'download_invoice_from_zephir', download_invoice_from_zephir) monkeypatch.setattr( s3utils, 'upload_to_s3', upload_to_s3) monkeypatch.setattr( s3utils, 'delete_s3_obj', delete_s3_obj) tasks.fetch_from_drop_location( activity_mock, context.get('date'), context.get('feed_name'), context.get('source_path'), context.get('target_s3_path'), context.get('filename_pattern') ) assert task_status.is_completed_task.called assert download_invoice_from_zephir.called garcon_feed_status.set_overall_status.assert_called_with( expected_date, context.get('feed_name'), garcon_feed_status.STATUS_NOT_AVAILABLE) assert not task_status.mark_completed_task.called