"""Unit tests for YouTube Claim Workflow.""" from unittest.mock import MagicMock from garcon.activity import Activity from feed_ingestion.flows.youtube_claim.flow import Flow def test_decider_theorchard(): """Test decider method.""" activity_result = MagicMock() activity_result.result = { 'bootstrap.licensor': 'theorchard', } schedule = MagicMock() schedule.return_value = activity_result # list of activities activity_names = { 'bootstrap', 'check_assets_availability', 'grab_reports_files', 'source_files', 'set_status_to_downloaded', 'clean_staging_raw', 'populate_temp_staging_tables', 'populate_staging_raw', 'set_status_to_populated_raw_table', 'drop_temp_staging_tables', 'update_dim_claim', 'update_channel_names_table', 'load_staging_fact_table', 'load_fact_tables', } # test activities are called flow = Flow() flow.decider(schedule, {}) scheduled_activities = set() for (name, activity), _ in schedule.call_args_list: assert name in activity_names assert isinstance(activity, Activity) scheduled_activities.add(name) assert scheduled_activities == activity_names # test flow stops if data is already ingested schedule.reset_mock() activity_result.result = { 'bootstrap.stop': 'True', 'bootstrap.licensor': 'theorchard', } activity_names = {'bootstrap'} flow.decider(schedule, {}) scheduled_activities = set() for (name, activity), _ in schedule.call_args_list: assert name in activity_names assert isinstance(activity, Activity) scheduled_activities.add(name) assert scheduled_activities == activity_names def test_decider_sme(): """Test decider method with sme licensor.""" activity_result = MagicMock() activity_result.result = { 'bootstrap.licensor': 'sme', } schedule = MagicMock() schedule.return_value = activity_result # list of activities activity_names = { 'bootstrap', 'check_assets_availability', 'grab_reports_files', 'create_temp_staging_raw_table', 'load_temp_staging_raw_table', 'load_staging_raw_table', 'update_channel_names_table', 'set_overall_status_ingested' } # test activities are called flow = Flow() flow.decider(schedule, {}) scheduled_activities = set() for (name, activity), _ in schedule.call_args_list: assert name in activity_names assert isinstance(activity, Activity) scheduled_activities.add(name) assert scheduled_activities == activity_names # test flow stops if data is already ingested schedule.reset_mock() activity_result.result = { 'bootstrap.stop': 'True', 'bootstrap.licensor': 'sme', } activity_names = {'bootstrap'} flow.decider(schedule, {}) scheduled_activities = set() for (name, activity), _ in schedule.call_args_list: assert name in activity_names assert isinstance(activity, Activity) scheduled_activities.add(name) assert scheduled_activities == activity_names