"""Test event hanlding.""" import pytest from unittest.mock import call from unittest.mock import patch from content_utils.exceptions import IndexingFailedError mock_review_queue_items = [{'reviewQueueId': 1, 'productId': 1}] @patch('src.logic.event_handling.sqs') def test_sync_products_add(mock_sqs): """Test sync adding products to index.""" from src.logic.event_handling import sync_products response = sync_products(mock_review_queue_items, [], True) assert response == [] mock_sqs.add_product.assert_called_once_with(1, 1) mock_sqs.delete_product.assert_not_called() @patch('src.logic.event_handling.sqs') def test_sync_products_remove(mock_sqs): """Test sync adding products to index.""" from src.logic.event_handling import sync_products response = sync_products(mock_review_queue_items, [], False) assert response == [] mock_sqs.add_product.assert_not_called() mock_sqs.delete_product.assert_called_once_with(1) @patch('src.logic.event_handling.sqs') def test_sync_products_skip(mock_sqs): """Test sync adding products to index.""" from src.logic.event_handling import sync_products response = sync_products( mock_review_queue_items, mock_review_queue_items, False) assert response == [] mock_sqs.add_product.assert_not_called() mock_sqs.delete_product.assert_not_called() @patch('src.logic.event_handling.sqs') def test_sync_products_failure(mock_sqs): """Test sync adding products to index.""" from src.logic.event_handling import sync_products mock_sqs.add_product.side_effect = [Exception] response = sync_products( mock_review_queue_items, [], True) assert response == [1] mock_sqs.add_product.assert_called_once_with(1, 1) mock_sqs.delete_product.assert_not_called() @patch('src.logic.event_handling.sync_products') @patch('src.logic.event_handling.metadata_lookup') @patch('src.logic.event_handling.indexing') def test_processing_logic_clear_index_success( mock_indexing, mock_lookup, mock_sync_products ): """Test processing logic succeeds.""" from src.logic.event_handling import processing_logic mock_lookup.get_review_queue_products.return_value = mock_review_queue_items mock_sync_products.return_value = [] processing_logic(True, False) mock_indexing.drop_index.assert_called_once() mock_lookup.get_review_queue_products.assert_called_once() mock_indexing.get_all_items.assert_not_called() mock_calls = [ call([], mock_review_queue_items, False), call(mock_review_queue_items, [], True, False), ] mock_sync_products.assert_has_calls(mock_calls) @patch('src.logic.event_handling.sync_products') @patch('src.logic.event_handling.metadata_lookup') @patch('src.logic.event_handling.indexing') def test_processing_logic_clear_index_failure( mock_indexing, mock_lookup, mock_sync_products ): """Test processing logic succeeds.""" from src.logic.event_handling import processing_logic mock_lookup.get_review_queue_products.return_value = mock_review_queue_items mock_error = {'reviewQueueId': 1, 'productId': 2, 'error': 'whoops'} mock_sync_products.side_effect = ([], [mock_error]) with pytest.raises(IndexingFailedError) as e: processing_logic(True, False) mock_error_message = f'failed to index products: {[mock_error]} \n' assert mock_error_message in str(e.value) mock_indexing.drop_index.assert_called_once() mock_lookup.get_review_queue_products.assert_called_once() mock_indexing.get_all_items.assert_not_called() mock_calls = [ call([], mock_review_queue_items, False), call(mock_review_queue_items, [], True, False), ] mock_sync_products.assert_has_calls(mock_calls) @patch('src.logic.event_handling.sync_products') @patch('src.logic.event_handling.metadata_lookup') @patch('src.logic.event_handling.indexing') def test_processing_logic_keep_index_success( mock_indexing, mock_lookup, mock_sync_products ): """Test processing logic succeeds.""" from src.logic.event_handling import processing_logic mock_lookup.get_review_queue_products.return_value = mock_review_queue_items mock_indexing.get_all_items.return_value = [] mock_sync_products.return_value = [] processing_logic(False, False) mock_indexing.drop_index.assert_not_called() mock_lookup.get_review_queue_products.assert_called_once() mock_indexing.get_all_items.assert_called_once() mock_calls = [ call([], mock_review_queue_items, False), call(mock_review_queue_items, [], True, False), ] mock_sync_products.assert_has_calls(mock_calls) @patch('src.logic.event_handling.sync_products') @patch('src.logic.event_handling.metadata_lookup') @patch('src.logic.event_handling.indexing') def test_processing_logic_keep_index_failure( mock_indexing, mock_lookup, mock_sync_products ): """Test processing logic succeeds.""" from src.logic.event_handling import processing_logic mock_lookup.get_review_queue_products.return_value = mock_review_queue_items mock_indexing.get_all_items.return_value = [] mock_error = {'reviewQueueId': 1, 'productId': 2, 'error': 'whoops'} mock_sync_products.side_effect = ([mock_error], []) with pytest.raises(IndexingFailedError) as e: processing_logic(False, False) mock_error_message = f'failed to remove products: {[mock_error]}' assert mock_error_message in str(e.value) mock_indexing.drop_index.assert_not_called() mock_lookup.get_review_queue_products.assert_called_once() mock_indexing.get_all_items.assert_called_once() mock_calls = [ call([], mock_review_queue_items, False), call(mock_review_queue_items, [], True, False), ] mock_sync_products.assert_has_calls(mock_calls) @patch('src.logic.event_handling.indexing') @patch('src.logic.event_handling.sqs') @patch('src.logic.event_handling.metadata_lookup') def test_processing_logic_update_products(mock_lookup, mock_sqs, mock_indexing): """Test processing logic with update products flag.""" from src.logic.event_handling import processing_logic mock_lookup.get_review_queue_products.return_value = [ {'reviewQueueId': 1, 'productId': 1}, {'reviewQueueId': 2, 'productId': 2} ] mock_indexing.get_all_items.return_value = [ {'reviewQueueId': 2, 'productId': 2}, {'reviewQueueId': 3, 'productId': 3} ] processing_logic(False, True) mock_indexing.drop_index.assert_not_called() mock_lookup.get_review_queue_products.assert_called_once() mock_indexing.get_all_items.assert_called_once() mock_sqs.add_product.assert_called_once_with(1, 1) mock_sqs.update_product.assert_called_once_with(2, 2) mock_sqs.delete_product.assert_called_once_with(3)