"""Unit tests for tasks for handling overall feed status in DynamoDB.""" from unittest.mock import MagicMock from unittest.mock import call from unittest.mock import patch from garcon import activity from garcon.contrib.dynamo_feed_status import \ feed_status_ingestion as feed_status from analytics_aggregation.tasks import overall_status_tasks from analytics_aggregation.util import common as common_utils @patch('analytics_aggregation.tasks.overall_status_tasks.feed_status') def test_set_overall_status(feed_status): """Test set_overall_status.""" params = [ activity.Activity(), 'testing', '2012-12-21_2012-12-28', 'testing status'] overall_status_tasks.set_overall_status(*params) for day in common_utils.list_of_dates('2012-12-21', '2012-12-28'): assert feed_status.set_overall_status.called_with( 'testing', day, 'testing status') @patch('analytics_aggregation.util.common') def test_check_workflow_status_ingested(common, monkeypatch): """Test test_check_workflow_status task when ingested.""" activity_mock = MagicMock() get_overall_feed_status_mock = MagicMock( return_value=feed_status.STATUS_INGESTED) monkeypatch.setattr( feed_status, 'get_overall_status', get_overall_feed_status_mock) overall_status_tasks.check_workflow_status( activity_mock, 'feed_name', '2017-01-01_2017-01-01', False) get_overall_feed_status_mock.assert_has_calls( [call('feed_name', '2017-01-01')]) assert common.exit_message.called_with( 'Data was already aggregated for 2017-01-01_2017-01-01 range') def test_check_workflow_status_not_ingested(monkeypatch): """Test test_check_workflow_status task when not ingested.""" activity_mock = MagicMock() logger_mock = MagicMock() activity_mock.logger.info = logger_mock get_overall_feed_status_mock = MagicMock( return_value='bullsquaw') monkeypatch.setattr( feed_status, 'get_overall_status', get_overall_feed_status_mock) overall_status_tasks.check_workflow_status( activity_mock, 'feed_name', '2017-01-01_2017-01-01', False) get_overall_feed_status_mock.assert_has_calls( [call('feed_name', '2017-01-01')]) assert logger_mock.info.called_with( 'No successful previous run found for 2017-01-01, ' 'proceeding to run range: 2017-01-01_2017-01-01')