"""Tests for the Proper changed releases workflow.""" from unittest import mock from unittest.mock import MagicMock from feed_sender.flows.proper_changed_releases import flow def run_proper_flow_decider(context, error_result=None): """Test normal decider execution.""" proper_flow = flow.Flow() proper_flow.return_value = MagicMock() schedule = MagicMock() schedule_result_object = MagicMock() schedule_result_object.result = {} schedule.return_value = schedule_result_object proper_flow.create = MagicMock() if not error_result: error_result = {} else: schedule_result_object.result = error_result proper_flow.decider(schedule, context) if context.get('proper_in_vector'): schedule.assert_any_call('bootstrap', mock.ANY) schedule.assert_any_call( 'clean_up_old_files', mock.ANY, requires=mock.ANY) schedule.assert_any_call( 'set_status_to_processing', mock.ANY, requires=mock.ANY) schedule.assert_any_call( 'obtain_jobs', mock.ANY, requires=mock.ANY) if error_result.get('obtain_jobs.error'): schedule.assert_any_call( 'set_status_to_completed', mock.ANY) assert schedule.call_count == 5 else: schedule.assert_any_call( 'set_job_status_to_encoding', mock.ANY, requires=mock.ANY) schedule.assert_any_call( 'generate_feed_for_changed_releases', mock.ANY, requires=mock.ANY) schedule.assert_any_call( 'set_job_status_to_encoded', mock.ANY, requires=mock.ANY) schedule.assert_any_call( 'set_job_status_to_delivering', mock.ANY, requires=mock.ANY) if 's3_only' in context: schedule.assert_any_call( 'set_status_to_uploaded_to_s3', mock.ANY, requires=mock.ANY) else: schedule.assert_any_call( 'transport_to_sftp', mock.ANY, requires=mock.ANY) if error_result.get('upload_to_sftp.error'): schedule.assert_any_call( 'set_job_status_to_delivery_failure', mock.ANY, requires=mock.ANY) else: schedule.assert_any_call( 'set_job_status_to_delivered', mock.ANY, requires=mock.ANY) schedule.assert_any_call( 'set_status_to_completed', mock.ANY, requires=mock.ANY) if 's3_only' in context: assert schedule.call_count == 10 else: assert schedule.call_count == 11 else: schedule.assert_any_call('bootstrap', mock.ANY) schedule.assert_any_call( 'clean_up_old_files', mock.ANY, requires=mock.ANY) schedule.assert_any_call( 'set_status_to_processing', mock.ANY, requires=mock.ANY) schedule.assert_any_call( 'generate_feed_for_changed_releases', mock.ANY, requires=mock.ANY) if 's3_only' in context: schedule.assert_any_call( 'set_status_to_uploaded_to_s3', mock.ANY, requires=mock.ANY) else: schedule.assert_any_call( 'transport_to_ftp', mock.ANY, requires=mock.ANY) schedule.assert_any_call( 'update_delivery_history', mock.ANY, requires=mock.ANY) schedule.assert_any_call( 'set_status_to_completed', mock.ANY, requires=mock.ANY) if 's3_only' in context: assert schedule.call_count == 5 else: assert schedule.call_count == 7 def test_proper_flow_decider_with_context(): """Test dryrun decider execution.""" run_proper_flow_decider({'s3_only': "doesn't matter what value this has"}) def test_proper_flow_decider_without_context(): """Test normal decider execution.""" run_proper_flow_decider({}) def test_proper_flow_in_vector(): """Test normal decider execution in vector.""" run_proper_flow_decider({'proper_in_vector': True}) def test_proper_flow_in_vector_sftp_failure(): """Test normal decider execution in vector.""" run_proper_flow_decider( {'proper_in_vector': True}, {'upload_to_sftp.error': 'permission denied'}) def test_proper_flow_in_vector_queue_error(): """Test normal decider execution in vector.""" run_proper_flow_decider( {'proper_in_vector': True}, {'obtain_jobs.error': 'no jobs'})