"""Unit tests for analytics digest workflow activities.""" from garcon.activity import Activity import pytest from activity_detector.flows.analytics_digest.flow import Flow class TestFlow(object): """Tests for Flow.""" @pytest.fixture def flow(self): """Create flow.""" return Flow() @pytest.fixture def run_flow(self, flow, mock_schedule, mock_context): """Run flow.""" flow.decider(mock_schedule, mock_context) @pytest.fixture def run_flow_with_label_ids( self, flow, mock_schedule, mock_context_with_label_ids): """Run flow with label ids.""" flow.decider(mock_schedule, mock_context_with_label_ids) def test_decider_schedules_get_date_range( self, mock_schedule, run_flow): """Test decider schedules activity get_date_range.""" (name, activity), _ = mock_schedule.call_args_list[0] assert name == 'get_date_range' assert isinstance(activity, Activity) assert activity.runner.tasks[0].__name__ == 'get_date_range' def test_decider_schedules_fetch_last_available_date_per_store( self, mock_schedule, run_flow): """Test decider schedules activity last date.""" (name, activity), _ = mock_schedule.call_args_list[1] assert name == 'fetch_last_available_date_per_store' assert isinstance(activity, Activity) assert activity.runner.tasks[0].__name__ == \ 'fetch_last_available_date_per_store' def test_decider_schedules_get_growth_date_range( self, mock_schedule, run_flow): """Test decider schedules activity get_growth_date_range.""" (name, activity), _ = mock_schedule.call_args_list[2] assert name == 'get_growth_date_range' assert isinstance(activity, Activity) assert activity.runner.tasks[0].__name__ == 'get_growth_date_range' def test_decider_schedules_create_tables( self, mock_schedule, run_flow): """Test decider schedules activity create_tables.""" (name, activity), _ = mock_schedule.call_args_list[3] assert name == 'create_tables' assert isinstance(activity, Activity) assert activity.runner.tasks[0].__name__ == \ 'create_label_top_releases_table' assert activity.runner.tasks[1].__name__ == \ 'create_label_top_tracks_table' assert activity.runner.tasks[2].__name__ == \ 'create_label_top_new_releases_table' def test_decider_schedules_generate_digests( self, mock_schedule, run_flow): """Test decider schedules activity generate_digests.""" (name, activity), _ = mock_schedule.call_args_list[4] assert name == 'generate_digests' assert isinstance(activity, Activity) assert activity.runner.tasks[0].__name__ == 'generate_label_digest' def test_decider_schedules_generate_label_digests( self, mock_schedule, run_flow_with_label_ids): """Test decider schedules activity generate_label_digests.""" (name, activity), _ = mock_schedule.call_args_list[4] assert name == 'generate_label_digests' assert isinstance(activity, Activity) assert activity.runner.tasks[0].__name__ == 'generate_label_digest' def test_workflow_id_contains_view_name(self, flow, mock_context): """Test workflow_id contains view name.""" workflow_id = flow.workflow_id(mock_context) assert workflow_id == '{flow_name}-{date}'.format( flow_name=flow.name, date=mock_context['date'])