"""Tests for SQS logic.""" import json from unittest.mock import MagicMock from unittest.mock import patch import pytest @patch('src.logic.sqs.get_sqs_client') def test_send_message(mock_get_sqs_client): """Test send_message function.""" from src.logic.sqs import send_message mock_client = MagicMock() mock_response = {'MessageId': 'test-message-id-123'} mock_client.send_message.return_value = mock_response mock_get_sqs_client.return_value = mock_client queue_url = 'https://sqs.us-east-1.amazonaws.com/123456789012/test-queue' body = {'test_key': 'test_value', 'product_id': 123} response = send_message(queue_url, body) assert response == mock_response mock_client.send_message.assert_called_once_with( QueueUrl=queue_url, MessageBody=json.dumps(body) ) @patch('src.logic.sqs.send_message') @patch('src.logic.sqs.config') def test_add_to_store_product_queue(mock_config, mock_send_message): """Test add_to_store_product_queue function.""" from src.logic.sqs import add_to_store_product_queue mock_config.SQS_STORE_PRODUCT_QUEUE_URL = ( 'https://sqs.us-east-1.amazonaws.com/123456789012/store-product-queue' ) mock_response = {'MessageId': 'message-id-456'} mock_send_message.return_value = mock_response input_data = { 'product_id': 789, 'review_queue_id': 101, 'payload': {'id': 101, 'status': 'new'}, 'operation_type': 'add_to_index' } response = add_to_store_product_queue(input_data) assert response == mock_response mock_send_message.assert_called_once_with( 'https://sqs.us-east-1.amazonaws.com/123456789012/store-product-queue', input_data ) @patch('src.logic.sqs.boto3') def test_get_sqs_client(mock_boto3): """Test get_sqs_client function returns cached client.""" from src.logic.sqs import get_sqs_client # Clear the cache first get_sqs_client.cache_clear() mock_client = MagicMock() mock_boto3.client.return_value = mock_client # First call client1 = get_sqs_client() assert client1 == mock_client assert mock_boto3.client.call_count == 1 # Second call should use cache client2 = get_sqs_client() assert client2 == mock_client assert mock_boto3.client.call_count == 1 # Should still be 1 due to cache # Clear cache for cleanup get_sqs_client.cache_clear() @patch('src.logic.sqs.get_sqs_client') def test_send_message_error_handling(mock_get_sqs_client): """Test send_message raises exception on SQS error.""" from src.logic.sqs import send_message mock_client = MagicMock() mock_client.send_message.side_effect = Exception('SQS send failed') mock_get_sqs_client.return_value = mock_client queue_url = 'https://sqs.us-east-1.amazonaws.com/123456789012/test-queue' body = {'test': 'data'} with pytest.raises(Exception) as er: send_message(queue_url, body) assert str(er.value) == 'SQS send failed'