"""Test sqs connector.""" from unittest.mock import call, patch from notifications.connectors import sqs @patch('uuid.uuid4') @patch('notifications.connectors.sqs.client') def test_send_messages(mock_client, mock_uuid): """Test basic message sending and result parsing.""" messages = [{'value': x} for x in range(0, 10)] mock_client.send_message_batch.side_effect = [ {'Successful': [x for x in range(0, 9)], 'Failed': [1]} ] results = sqs.send_messages('queue-url', messages) assert len(mock_client.send_message_batch.call_args_list) == 1 assert results == (9, 1) @patch('uuid.uuid4') @patch('notifications.connectors.sqs.client') def test_send_message_one_batch(mock_client, mock_uuid): """Test message one batch.""" len_messages = 5 messages = [{'value': x} for x in range(0, len_messages)] mock_uuid.side_effect = [f'UUID-{x}' for x in range(0, len_messages)] sqs.send_messages('queue-url', messages) assert len(mock_client.send_message_batch.call_args_list) == 1 assert mock_client.send_message_batch.call_args_list == [ call( Entries=[{'Id': f'UUID-{x}', 'MessageBody': f'{{"value": {x}}}'} for x in range(0, 5)], QueueUrl='queue-url', ) ] @patch('uuid.uuid4') @patch('notifications.connectors.sqs.client') def test_send_message_exact_batch(mock_client, mock_uuid): """Test message exactly one batch.""" len_messages = 10 messages = [{'value': x} for x in range(0, len_messages)] mock_uuid.side_effect = [f'UUID-{x}' for x in range(0, len_messages)] sqs.send_messages('queue-url', messages) assert len(mock_client.send_message_batch.call_args_list) == 1 assert mock_client.send_message_batch.call_args_list == [ call( Entries=[{'Id': f'UUID-{x}', 'MessageBody': f'{{"value": {x}}}'} for x in range(0, 10)], QueueUrl='queue-url', ) ] @patch('uuid.uuid4') @patch('notifications.connectors.sqs.client') def test_send_message_two_batch(mock_client, mock_uuid): """Test message two batches.""" len_messages = 15 messages = [{'value': x} for x in range(0, len_messages)] mock_uuid.side_effect = [f'UUID-{x}' for x in range(0, len_messages)] sqs.send_messages('queue-url', messages) assert len(mock_client.send_message_batch.call_args_list) == 2 assert mock_client.send_message_batch.call_args_list == [ call( Entries=[{'Id': f'UUID-{x}', 'MessageBody': f'{{"value": {x}}}'} for x in range(0, 10)], QueueUrl='queue-url', ), call( Entries=[ {'Id': f'UUID-{x}', 'MessageBody': f'{{"value": {x}}}'} for x in range(10, 15) ], QueueUrl='queue-url', ), ]