"""Tests for util module.""" import gzip import json from unittest.mock import MagicMock from unittest.mock import Mock from unittest.mock import patch from flows import s3 from flows.digital import util @patch('flows.digital.util.boto3') @patch('flows.digital.util.flow_config') def test_send_success_notification(config, boto): """Test send_success_notification function.""" config.SNS_ACTION_SUCCESS = 'test passed' config.SNS_SOURCE = 'py.test' config.SNS_TOPIC_ARN = 'a unit test' sns = Mock() sns.publish.return_value = {'foo': 'bar'} boto.client.return_value = sns correlation_id = '0123-4567-8910-1112' date_end = 'yesterday' date_start = 'last year' upcs = ['123', '456'] result = util.send_success_notification( correlation_id, date_end, date_start, upcs) assert result == {'foo': 'bar'} expected_payload = { 'action': config.SNS_ACTION_SUCCESS, 'correlation_id': correlation_id, 'date_end': date_end, 'date_start': date_start, 'source': config.SNS_SOURCE, 'upcs': upcs} params = sns.publish.call_args_list[0][1] assert params['TopicArn'] == config.SNS_TOPIC_ARN assert params['Subject'] == config.SNS_ACTION_SUCCESS assert json.loads(params['Message']) == expected_payload @patch('flows.digital.util.boto3') @patch('flows.digital.util.flow_config') def test_queue_build_cache(config, boto): """Test queue_build_cache function.""" config.SQS_BUILD_CACHE_ACTION = 'test-function' config.SQS_BUILD_CACHE_REGION_NAME = 'unit-test-1' config.SQS_BUILD_CACHE_SOURCE = 'unit-test:digital' config.SQS_BUILD_CACHE_URL = 'https://unittest.example.com/ft-etl' sqs = Mock() sqs.send_message.return_value = {'foo': 'bar'} boto.client.return_value = sqs correlation_id = '0123-4567-8910-1112' date_end = 'yesterday' date_start = 'last year' upcs = ['123', '456'] result = util.queue_build_cache(correlation_id, date_end, date_start, upcs) assert result == {'foo': 'bar'} expected_payload = { 'action': config.SQS_BUILD_CACHE_ACTION, 'correlation_id': correlation_id, 'date_end': date_end, 'date_start': date_start, 'source': config.SQS_BUILD_CACHE_SOURCE, 'upcs': upcs} params = sqs.send_message.call_args_list[0][1] assert params['QueueUrl'] == config.SQS_BUILD_CACHE_URL assert json.loads(params['MessageBody']) == expected_payload def test_read_csv_from_s3(monkeypatch): """Test read_csv_from_s3 function.""" s3_path = 's3://some_path' gzipped_csv_data = gzip.compress( bytes('a,b,c\n1,2,3\n\n', encoding='utf-8')) object_mock = MagicMock() object_mock.return_value.\ get.return_value.\ __getitem__.return_value.\ read.return_value = gzipped_csv_data monkeypatch.setattr(s3, 'get_object', object_mock) result = list(util.read_csv_from_s3(s3_path)) s3.get_object.assert_called_once_with(s3_path) assert result == [ ['a', 'b', 'c'], ['1', '2', '3'] ]