"""Lambda test module.""" from unittest import mock import pytest from src import app from src.logic import event_handling def test_handler_functional(mock_event, mocker, mock_logger, mock_connectors): """Test handler function (functional test).""" fetch_review_queue_item_data_mock, patch_product_mock_os, \ expected_product_patch = mock_connectors mocker.spy(app, 'process_event') result = app.handler(mock_event, None) fetch_review_queue_item_data_mock.assert_called_once_with(10063) patch_product_mock_os.assert_has_calls(expected_product_patch) app.process_event.assert_called_once() mock_logger.start.assert_called_once() mock_logger.set_data.assert_called_once_with(status='success', result='index updated') mock_logger.end.assert_called_once_with() assert result == {'status': 'success'} def test_process_event_no_value(mocker, mock_event, mock_logger, mock_event_source_message): """Test process_event with no message value.""" mocker.patch.object( mock_event_source_message.__class__, 'value', mock.PropertyMock(return_value=None), ) mocker.patch.object(event_handling, 'processing_logic') result = app.process_event(mock_event_source_message, app.deserializer) event_handling.processing_logic.assert_not_called() mock_logger.set_data.assert_called_once_with(status='skip', result='no_message_body') assert result is None @pytest.mark.parametrize('skipped_exception', app.SKIPPED_EXCEPTIONS) def test_process_event_skipped_exceptions( mocker, mock_event, mock_logger, mock_event_source_message, skipped_exception, ): """Test process_event with SKIPPED_EXCEPTIONS.""" mocker.patch.object( event_handling, 'processing_logic', side_effect=skipped_exception('some message'), autospec=True, ) result = app.process_event(mock_event_source_message, app.deserializer) event_handling.processing_logic.assert_called_once_with( mock_event_source_message.topic, mock_event_source_message.value, app.deserializer) mock_logger.set_data.assert_called_once_with( status='skip', result='some message') assert result is None def test_process_event_error(mocker, mock_event, mock_logger, mock_event_source_message): """Test process_event with error.""" mocker.patch.object( event_handling, 'processing_logic', side_effect=Exception('some error message'), autospec=True, ) with pytest.raises(Exception, match='some error message'): app.process_event(mock_event_source_message, app.deserializer) event_handling.processing_logic.assert_called_once_with( mock_event_source_message.topic, mock_event_source_message.value, app.deserializer) mock_logger.set_data.assert_called_once_with( status='error', result='some error message') def test_process_event_success(mocker, mock_event, mock_logger, mock_event_source_message): """Test process_event success.""" mocker.patch.object(event_handling, 'processing_logic', autospec=True) result = app.process_event(mock_event_source_message, app.deserializer) event_handling.processing_logic.assert_called_once_with( mock_event_source_message.topic, mock_event_source_message.value, app.deserializer) mock_logger.set_data.assert_called_once_with(status='success', result='index updated') assert result is None