"""Tests for physical_reporting flow.""" from unittest import mock from unittest.mock import MagicMock from feed_ingestion.flows.physical_reporting.flow import Flow def test_flow_decider_normal_execution(): """Test normal decider execution.""" flow = Flow() schedule = MagicMock() schedule_result_object = MagicMock() schedule_result_object.result = {} schedule.return_value = schedule_result_object flow.decider(schedule) schedule.assert_has_calls([ mock.call('check_feed_status', mock.ANY), mock.call('bootstrap', mock.ANY, requires=[mock.ANY]), mock.call('grab_drop_files', mock.ANY, requires=[mock.ANY]), mock.call('load_staging_raw_table', mock.ANY, requires=[mock.ANY]), mock.call('set_status_to_ingested', mock.ANY, requires=[mock.ANY]), ]) def test_flow_decider_stops_when_feed_already_ingested(): """Test decider stops when feed status check indicates already ingested.""" flow = Flow() schedule = MagicMock() schedule_result_object = MagicMock() schedule_result_object.result = { 'check_feed_status.stop': True, } schedule.return_value = schedule_result_object flow.decider(schedule) # Should only call check_feed_status and stop schedule.assert_has_calls([ mock.call('check_feed_status', mock.ANY), ]) # Verify no further tasks were scheduled assert schedule.call_count == 1 def test_flow_decider_stops_when_grab_drop_files_fails(): """Test decider stops when grab_drop_files task fails.""" flow = Flow() schedule = MagicMock() schedule_result_object = MagicMock() schedule_result_object.result = { 'grab_drop_files.stop': True, } schedule.return_value = schedule_result_object flow.decider(schedule) schedule.assert_has_calls([ mock.call('check_feed_status', mock.ANY), mock.call('bootstrap', mock.ANY, requires=[mock.ANY]), mock.call('grab_drop_files', mock.ANY, requires=[mock.ANY]), ]) # Should not schedule set_status_to_ingested assert schedule.call_count == 3