"""Test event processing logic.""" from unittest.mock import call from unittest.mock import patch from content_utils.exceptions import InvalidMessageException from content_utils.exceptions import InvalidProductException from kafka_utils.consumer.source.mapping import EventSourceMessage from src.logic.event_processing import process_event @patch('src.logic.event_processing.add_product_to_queue') @patch('src.logic.event_processing.filter_ineligible_products') @patch('src.logic.event_processing.extract_product_message_body') def test_process_event_logic( mock_extract, mock_filter_products, mock_add_product_to_queue, mock_msk_message, mock_avro_serializer, mock_create_event ): """Test process_event.""" mock_extract.return_value = { 'label_id': 1, 'label_owner': 'odd', 'company_brand': {'name': 'a-company-brand'}, 'distribution_format_id': 1, } create_message = EventSourceMessage(mock_create_event) for _, event in create_message: create_result = process_event(event.topic, event.value, mock_avro_serializer, 7777) assert create_result == { 'status': 'skip', 'product_id': 3998692, 'message': 'skip operations create' } mock_queue_ids = [4, 5, 6] mock_add_product_to_queue.side_effect = mock_queue_ids msk_message = EventSourceMessage(mock_msk_message) expected_results = [ { 'product_id': 1, 'review_queue_id': 4, 'status': 'success', 'message': 'Product 1 added to review queue 4' }, { 'product_id': 2, 'review_queue_id': 5, 'status': 'success', 'message': 'Product 2 added to review queue 5' }, { 'product_id': 3, 'review_queue_id': 6, 'status': 'success', 'message': 'Product 3 added to review queue 6' }] actual_results = [] for _, event in msk_message: result = process_event(event.topic, event.value, mock_avro_serializer, 7777) actual_results.append(result) assert mock_filter_products.call_count == 3 assert mock_add_product_to_queue.call_count == 3 expected_calls = [ call(1, 7777, None, '1975-04-09 09:17:24'), call(2, 7777, None, '1975-04-09 09:17:24'), call(3, 7777, None, '1975-04-09 09:17:24'), ] mock_add_product_to_queue.assert_has_calls(expected_calls) assert actual_results == expected_results @patch('src.logic.event_processing.handle_product_submission') def test_process_event_logic_exception( mock_handle_submission, mock_msk_message, mock_avro_serializer ): """Test process_event exception.""" mock_handle_submission.side_effect = [ InvalidMessageException('foo'), InvalidProductException('not ok'), Exception('some other exception') ] expected_results = [ { 'product_id': 1, 'status': 'skip', 'message': 'foo' }, { 'product_id': 2, 'status': 'skip', 'message': 'not ok' }, { 'product_id': 3, 'status': 'error', 'message': 'some other exception' } ] msk_message = EventSourceMessage(mock_msk_message) actual_results = [] for _, event in msk_message: result = process_event(event.topic, event.value, mock_avro_serializer, 7777) actual_results.append(result) assert mock_handle_submission.call_count == 3 assert actual_results == expected_results