"""Lambda test module.""" from unittest.mock import patch import pytest from src import app from src import service from src.logic.product import PRODUCT_QUERY from src.logic.product import REVIEW_QUEUE_ITEM_QUERY @patch('src.logic.product.gql_connector.execute') def test_handler_success( mock_graphql_conn, request_engine, mock_event, mock_review_queue_item, mock_product ): """Test send notification success.""" request_engine[service.OWS_NOTIFICATIONS].add_spec( 'POST', '/content-review/notify-escalation-complete', status=202, response={'foo': 'bar'} ) mock_graphql_conn.side_effect = [mock_review_queue_item, mock_product] result = app.handler(mock_event, None) mock_graphql_conn.assert_any_call( PRODUCT_QUERY, { 'id': '22222' }) mock_graphql_conn.assert_any_call( REVIEW_QUEUE_ITEM_QUERY, { 'reviewQueueId': 10101, 'status': 'complete' }) assert result == {'status': 'success'} @patch('src.logic.product.gql_connector.execute') def test_handler_error( mock_graphql_conn, request_engine, mock_event, mock_review_queue_item, mock_product ): """Test send notification failure.""" request_engine[service.OWS_NOTIFICATIONS].add_spec( 'POST', '/content-review/notify-escalation-complete', status=403, response={'foo': 'bar'} ) mock_graphql_conn.side_effect = [mock_review_queue_item, mock_product] expected_error_message = ( 'Failed to send content review escalation complete notification for product_id 22222.\n' 'Status code: 403, Error: {"foo": "bar"}' ) with pytest.raises(Exception) as excinfo: app.handler(mock_event, None) mock_graphql_conn.assert_any_call( PRODUCT_QUERY, { 'id': '22222' }) mock_graphql_conn.assert_any_call( REVIEW_QUEUE_ITEM_QUERY, { 'reviewQueueId': 10101, 'status': 'complete' }) assert excinfo.value.args[0] == expected_error_message @patch('src.logic.product.gql_connector.execute') def test_skip_ineligible_event(mock_graphql_conn, mock_ineligible_event): """Test skip ineligible event.""" app.handler(mock_ineligible_event, None) mock_graphql_conn.assert_not_called() @patch('src.logic.product.gql_connector.execute') def test_skip_invalid_product(mock_graphql_conn, mock_event, mock_invalid_review_queue_item): """Test skip invalid product.""" mock_graphql_conn.return_value = mock_invalid_review_queue_item app.handler(mock_event, None) mock_graphql_conn.assert_called_once_with( REVIEW_QUEUE_ITEM_QUERY, { 'reviewQueueId': 10101, 'status': 'complete' })