"""Unit tests for the flow.""" import pytest from activity_detector.flows.playlist_placements.flow import Flow class TestFlow(object): """Test for the flow.""" @pytest.fixture def flow(self): """Create flow.""" return Flow() @pytest.fixture def run_flow(self, flow, mock_schedule, mock_context): """Fixture to kick-off flow.""" flow.decider(mock_schedule, mock_context) @pytest.mark.parametrize( ('input_dsp', 'expected_output'), [ ('spotify', 'playlist_placements-spotify'), ('Spotify', 'playlist_placements-spotify'), ('itunes/apple', 'playlist_placements-itunes_apple'), ('iTunes/Apple', 'playlist_placements-itunes_apple') ] ) def test_flow_id(self, flow, input_dsp, expected_output): """Test workflow id generated and sanitized based on dsp.""" output = flow.workflow_id({'dsp': input_dsp}) assert output == expected_output def test_decider_schedule(self, mock_schedule, run_flow): """Test flow steps run as expected.""" def _get_activity(index): (name, activity), _ = mock_schedule.call_args_list[index] tasks = [ { 'requirements': x.__garcon__['requirements'], 'name': x.__name__ } for x in activity.runner.tasks ] return (name, tasks) assert len(mock_schedule.call_args_list) == 4 (name, tasks) = _get_activity(0) assert name == 'bootstrap' assert tasks == [ { 'name': 'bootstrap', 'requirements': ['dsp', 'execution.run_id'] } ] (name, tasks) = _get_activity(1) assert name == 'check_dynamo_status' assert tasks == [ { 'name': 'check_dynamo_status', 'requirements': ['bootstrap.dsp'] } ] (name, tasks) = _get_activity(2) assert name == 'detect_placements' assert tasks == [ { 'name': 'detect_placements', 'requirements': [ 'bootstrap.dsp', 'check_dynamo_status.last_timestamp' ] } ] (name, tasks) = _get_activity(3) assert tasks == [ { 'name': 'set_dynamo_status', 'requirements': [ 'bootstrap.dsp', 'detect_placements.last_timestamp', 'detect_placements.failures' ] } ]