"""Lambda test module.""" from unittest.mock import patch from content_utils.exceptions import NoReviewQueueItemDataException import pytest from src import app from src import service from src.logic.product import PRODUCT_QUERY @patch('src.logic.product.gql_connector.execute') @patch('src.logic.product.gql_connector.fetch_review_queue_item_data') def test_handler_success( mock_fetch_item, mock_gql_conn, request_engine, mock_event, mock_product, mock_review_queue_item ): """Test handler success.""" request_engine[service.OWS_NOTIFICATIONS].add_spec( 'POST', '/content-review/escalate', status=202, response={'foo': 'bar'} ) mock_fetch_item.return_value = mock_review_queue_item mock_gql_conn.return_value = mock_product result = app.handler(mock_event, None) mock_fetch_item.assert_called_once_with(111) mock_gql_conn.assert_called_once_with(PRODUCT_QUERY, {'id': '1'}) assert result == {'status': 'success'} @patch('src.logic.product.gql_connector.execute') @patch('src.logic.product.gql_connector.fetch_review_queue_item_data') def test_handler_error( mock_fetch_item, mock_gql_conn, request_engine, mock_event, mock_product, mock_review_queue_item ): """Test handler error.""" request_engine[service.OWS_NOTIFICATIONS].add_spec( 'POST', '/content-review/escalate', status=403, response='na' ) mock_fetch_item.return_value = mock_review_queue_item mock_gql_conn.return_value = mock_product expected_error_msg = ( 'Failed to send escalate notification ' 'for product_id 1.\nStatus code: 403, Error: "na"' ) with pytest.raises(Exception) as excinfo: app.handler(mock_event, None) mock_fetch_item.assert_called_once_with(111) mock_gql_conn.assert_called_once_with(PRODUCT_QUERY, {'id': '1'}) assert excinfo.value.args[0] == expected_error_msg @patch('src.logic.event_handling.move_target_notify_escalation') @patch('src.logic.product.gql_connector.execute') def test_handler_skip( mock_gql_conn, mock_notification, mock_ineligible_event_list ): """Test handler skip.""" for mock_event in mock_ineligible_event_list: result = app.handler(mock_event, None) mock_gql_conn.assert_not_called() mock_notification.assert_not_called() assert result == {'status': 'skip'} @patch('src.app.process_event') def test_no_review_queue_item(mock_process_event, mock_event): """Test no review queue item.""" mock_process_event.side_effect = NoReviewQueueItemDataException result = app.handler(mock_event, None) assert result == {'status': 'skip'} @patch('src.logic.event_handling.move_target_notify_de_escalation') @patch('src.logic.product.gql_connector.execute') @patch('src.logic.product.gql_connector.fetch_review_queue_item_data') def test_de_escalate_event( mock_fetch_item, mock_gql_conn, request_engine, mock_de_escalate_event, mock_product, mock_review_queue_item ): """Test handling a de-escalate event.""" request_engine[service.OWS_NOTIFICATIONS].add_spec( 'POST', '/content-review/de-escalate', status=202, response={'foo': 'bar'} ) mock_fetch_item.return_value = mock_review_queue_item mock_gql_conn.return_value = mock_product result = app.handler(mock_de_escalate_event, None) mock_fetch_item.assert_called_once_with(111) mock_gql_conn.assert_called_once_with(PRODUCT_QUERY, {'id': '1'}) assert result == {'status': 'success'}