"""Tests for the deezer flow.""" from unittest import mock from unittest.mock import MagicMock import pytest from feed_ingestion.flows.deezer.flow import Flow def test_deezer_flow_decider_theorchard(): """Test normal decider execution.""" deezer_flow = Flow() schedule = MagicMock() schedule_result_object = MagicMock() schedule_result_object.result = { 'bootstrap.licensor': 'theorchard', 'bootstrap.spec_version': 1, } schedule.return_value = schedule_result_object deezer_flow.decider(schedule, {'context_date': '2017-08-27'}) schedule.assert_has_calls([ mock.call('bootstrap', mock.ANY), mock.call('grab_drop_files', mock.ANY, requires=[mock.ANY]), mock.call('set_status_to_downloaded', mock.ANY, requires=[mock.ANY]), mock.call('unzip_and_clean', mock.ANY, requires=[mock.ANY]), mock.call('load_staging_raw_table', mock.ANY, requires=mock.ANY), mock.call('load_staging_fact_table', mock.ANY, requires=mock.ANY), mock.call('load_fact_tables', mock.ANY, requires=mock.ANY), ]) def test_deezer_flow_decider_stopped_theorchard(): """Test decider execution when it must be stopped.""" deezer_flow = Flow() schedule = MagicMock() schedule_result_object = MagicMock() schedule_result_object.result = { 'bootstrap.licensor': 'theorchard', 'grab_drop_files.stop': True } schedule.return_value = schedule_result_object deezer_flow.decider(schedule, {'context_date': '2016-08-27'}) schedule.assert_any_call('bootstrap', mock.ANY) schedule.assert_any_call( 'grab_drop_files', mock.ANY, requires=[mock.ANY]) with pytest.raises(AssertionError): schedule.assert_any_call( 'unzip_and_clean', mock.ANY, requires=mock.ANY) def test_deezer_flow_decider_sme(): """Test decider execution when it must be stopped.""" deezer_flow = Flow() schedule = MagicMock() schedule_result_object = MagicMock() schedule_result_object.result = { 'bootstrap.licensor': 'sme', 'bootstrap.spec_version': 2, } schedule.return_value = schedule_result_object deezer_flow.decider(schedule, {'context_date': '2016-08-27'}) schedule.assert_has_calls([ mock.call('bootstrap', mock.ANY), mock.call('grab_drop_files', mock.ANY, requires=[mock.ANY]), mock.call('set_status_to_downloaded', mock.ANY, requires=[mock.ANY]), mock.call('unzip_and_clean', mock.ANY, requires=[mock.ANY]), mock.call('load_staging_raw_table', mock.ANY, requires=mock.ANY), mock.call('update_dim_tables', mock.ANY, requires=mock.ANY), mock.call('load_staging_fact_table', mock.ANY, requires=mock.ANY), mock.call('load_fact_tables', mock.ANY, requires=mock.ANY), ]) def test_deezer_flow_decider_stopped_sme(): """Test decider execution when it must be stopped.""" deezer_flow = Flow() schedule = MagicMock() schedule_result_object = MagicMock() schedule_result_object.result = { 'bootstrap.licensor': 'sme', 'grab_drop_files.stop': True } schedule.return_value = schedule_result_object deezer_flow.decider(schedule, {'context_date': '2016-08-27'}) schedule.assert_any_call('bootstrap', mock.ANY) schedule.assert_any_call( 'grab_drop_files', mock.ANY, requires=[mock.ANY]) with pytest.raises(AssertionError): schedule.assert_any_call( 'unzip_and_clean', mock.ANY, requires=mock.ANY)