"""Unit tests for DynamoDB task status management functions.""" from unittest.mock import patch, call from feed_ingestion.util import task_status @patch('feed_ingestion.util.task_status.garcon_feed_status') def test_get_completed_tasks(feed_status): """Test get_completed_tasks.""" # some tasks exist feed_status._get_item.return_value = { 'completed_tasks_status': 'foo,bar,baz'} tasks = task_status.get_completed_tasks('unit test', 'today') assert tasks == ['foo', 'bar', 'baz'] feed_status._get_item.assert_called_with('unit test', 'today') feed_status._get_item.return_value = {'completed_tasks_status': 'foo'} tasks = task_status.get_completed_tasks('unit test', 'today') assert tasks == ['foo'] # no tasks exist but DynamoDB item exists feed_status._get_item.return_value = {'completed_tasks_status': ''} tasks = task_status.get_completed_tasks('unit test', 'today') assert tasks == [] # DynamoDB item does not exists feed_status._get_item.return_value = False tasks = task_status.get_completed_tasks('unit test', 'today') assert tasks == [] @patch('feed_ingestion.util.task_status.garcon_feed_status') def test_is_completed_task(feed_status): """Test is_completed_task.""" feed_status._get_item.return_value = { 'completed_tasks_status': 'foo,bar,baz'} assert task_status.is_completed_task('unit test', 'today', 'foo') feed_status._get_item.assert_called_with('unit test', 'today') feed_status._get_item.return_value = { 'completed_tasks_status': 'foo,bar,baz'} assert not task_status.is_completed_task( 'unit test', 'today', 'does not exist') # no recorded item feed_status._get_item.return_value = False assert not task_status.is_completed_task( 'unit test', 'today', 'does not exist') @patch('feed_ingestion.util.task_status.garcon_feed_status') def test_mark_completed_task(feed_status): """Test mark_completed_task.""" # append additional task feed_status._get_item.return_value = {'completed_tasks_status': 'foo,bar'} task_status.mark_completed_task( 'unit test', 'today', 'baz') feed_status.set_status.assert_called_with( 'unit test', 'today', 'completed_tasks', 'foo,bar,baz') # first task feed_status._get_item.return_value = {'completed_tasks_status': ''} task_status.mark_completed_task( 'unit test', 'today', 'first') feed_status.set_status.assert_called_with( 'unit test', 'today', 'completed_tasks', 'first') feed_status._get_item.return_value = False task_status.mark_completed_task('unit test', 'today', 'first') feed_status.set_status.assert_called_with( 'unit test', 'today', 'completed_tasks', 'first') @patch('feed_ingestion.util.task_status.garcon_feed_status') def test_get_values(feed_status): """Test get_values.""" # some values exist feed_status._get_item.return_value = { 'test_fiels_status': 'foo,bar,baz'} tasks = task_status.get_values( 'test', '2018-01-01', 'test_fiels_status') assert tasks == ['foo', 'bar', 'baz'] feed_status._get_item.assert_called_with('test', '2018-01-01') feed_status._get_item.return_value = {'test_fiels_status': 'foo'} tasks = task_status.get_values('test', '2018-01-01', 'test_fiels_status') assert tasks == ['foo'] @patch('feed_ingestion.util.task_status.garcon_feed_status') def test_get_values_if_there_are_not_any_values(feed_status): """Test get_values if no values exist but DynamoDB item exists.""" # no tasks exist but DynamoDB item exists feed_status._get_item.return_value = {'test_fiels_status': ''} tasks = task_status.get_values('test', '2018-01-01', 'test_fiels_status') assert tasks == [] @patch('feed_ingestion.util.task_status.garcon_feed_status') def test_get_values_if_item_do_not_exist_at_all(feed_status): """Test get_values if DynamoDB item doesn't exist.""" feed_status._get_item.return_value = False tasks = task_status.get_values('test', '2018-01-01', 'test_fiels_status') assert tasks == [] @patch('feed_ingestion.util.task_status.garcon_feed_status') def test_set_values(feed_status): """Test set_values.""" task_status.set_values( 'test', '2018-01-01', 'test_fiels_status', ['foo', 'bar', 'baz']) feed_status.set_status.assert_called_with( 'test', '2018-01-01', 'test_fiels_status', 'foo,bar,baz') task_status.set_values( 'test', '2018-01-01', 'test_fiels_status', []) feed_status.set_status.assert_called_with( 'test', '2018-01-01', 'test_fiels_status', '') @patch('feed_ingestion.util.task_status.garcon_feed_status') def test_get_item(feed_status): """Test get_item.""" feed_status._get_item.return_value = { 'feed_name': 'test_name', 'date': '2018-01-01'} result = task_status.get_item('test', '2018-01-01') assert result == { 'feed_name': 'test_name', 'date': '2018-01-01'} feed_status._get_item.return_value = False result = task_status.get_item('test', '2018-01-01') assert result == {} @patch.object(task_status.garcon_feed_status, '_get_item') @patch.object(task_status.garcon_feed_status, 'set_overall_status') def test_soft_reload_update_status_clearing_tasks( mock_set_overall_status, mock__get_item): """Test soft_reload_update_status_clearing_tasks.""" feed_name = 'feed_name' date = '2016-01-01' mock__get_item.return_value = { 'feed_name': feed_name, 'date': date, 'status': 'INGESTED', 'completed_tasks_status': 'reporter_to_s3,load_staging_fact,load_fact_data,' 'load_aggregated_skips_and_saves,post_action' } task_status.soft_reload_update_status_clearing_tasks( context_date=date, feed_name=feed_name, ) assert mock_set_overall_status.call_args_list == [ call( feed_name=feed_name, date=date, overall_status='POPULATED_RAW_TABLE', attributes={ 'completed_tasks_status': 'reporter_to_s3,' 'post_action' } ) ] @patch.object(task_status.garcon_feed_status, '_get_item') @patch.object(task_status.garcon_feed_status, 'set_overall_status') def test_soft_reload_update_status_clearing_after( mock_set_overall_status, mock__get_item): """Test soft_reload_update_status_clearing_tasks.""" feed_name = 'feed_name' date = '2016-01-01' mock__get_item.return_value = { 'feed_name': feed_name, 'date': date, 'status': 'INGESTED', 'completed_tasks_status': 'reporter_to_s3,load_staging_fact,load_fact_data,' 'set_overall_status_POPULATED_RAW_TABLE,' 'load_aggregated_skips_and_saves,post_action' } task_status.soft_reload_update_status_clearing_after( context_date=date, feed_name=feed_name, ) assert mock_set_overall_status.call_args_list == [ call( feed_name=feed_name, date=date, overall_status='POPULATED_RAW_TABLE', attributes={ 'completed_tasks_status': 'reporter_to_s3,load_staging_fact,load_fact_data,' 'set_overall_status_POPULATED_RAW_TABLE' } ) ]