import json import time import unittest from unittest.mock import patch from awslambdaric.lambda_context import LambdaContext from src import app class TestAppFailures(unittest.TestCase): @patch.object(time, "time") @patch.object(app, "samexporter_predict") @patch.object(app, "get_parsed_bbox_points") @patch.object(app, "get_parsed_request_body") def test_lambda_handler_400( self, get_parsed_request_body_mocked, get_parsed_bbox_points_mocked, samexporter_predict_mocked, time_mocked ): from src.app import lambda_handler time_mocked.return_value = 0 get_parsed_request_body_mocked.value = {} get_parsed_bbox_points_mocked.return_value = {"bbox": "bbox_object", "prompt": "prompt_object", "zoom": 1} samexporter_predict_mocked.side_effect = ValueError("I raise a value error!") event = {"body": {}, "version": 1.0} lambda_context = LambdaContext( invoke_id="test_invoke_id", client_context=None, cognito_identity=None, epoch_deadline_time_in_ms=time.time() ) expected_response_400 = '{"statusCode": 400, "header": {"Content-Type": "application/json"}, ' expected_response_400 += '"body": "{\\"duration_run\\": 0, \\"message\\": \\"Bad Request\\", ' expected_response_400 += '\\"request_id\\": \\"test_invoke_id\\"}", "isBase64Encoded": false}' response_400 = lambda_handler(event, lambda_context) assert response_400 == expected_response_400 @patch.object(time, "time") @patch.object(app, "get_parsed_request_body") def test_lambda_handler_500(self, get_parsed_request_body_mocked, time_mocked): from src.app import lambda_handler time_mocked.return_value = 0 get_parsed_request_body_mocked.return_value = {} event = {"body": {}, "version": 1.0} lambda_context = LambdaContext( invoke_id="test_invoke_id", client_context=None, cognito_identity=None, epoch_deadline_time_in_ms=time.time() ) response_500 = lambda_handler(event, lambda_context) check_500 = response_500 == ( '{"statusCode": 500, "header": {"Content-Type": "application/json"}, ' '"body": "{\\"duration_run\\": 0, \\"message\\": \\"Internal server error\\", ' '\\"request_id\\": \\"test_invoke_id\\"}", "isBase64Encoded": false}') print(f"test_lambda_handler_422:{check_500}.") assert check_500 print("check_500") @patch.object(time, "time") def test_lambda_handler_422(self, time_mocked): from src.app import lambda_handler time_mocked.return_value = 0 event = {"body": {}, "version": 1.0} lambda_context = LambdaContext( invoke_id="test_invoke_id", client_context=None, cognito_identity=None, epoch_deadline_time_in_ms=time.time() ) response_422 = lambda_handler(event, lambda_context) expected_response_422 = '{"statusCode": 422, "header": {"Content-Type": "application/json"}, ' expected_response_422 += '"body": "{\\"duration_run\\": 0, \\"message\\": \\"Missing required parameter\\", ' expected_response_422 += '\\"request_id\\": \\"test_invoke_id\\"}", "isBase64Encoded": false}' assert response_422 == expected_response_422 @patch.object(time, "time") @patch.object(app, "samexporter_predict") @patch.object(app, "get_response") @patch.object(app, "get_parsed_bbox_points") @patch.object(app, "get_parsed_request_body") def test_lambda_handler_200( self, get_parsed_request_body_mocked, get_parsed_bbox_points_mocked, get_response_mocked, samexporter_predict_mocked, time_mocked ): from src.app import lambda_handler from tests import TEST_EVENTS_FOLDER time_mocked.return_value = 0 get_parsed_request_body_mocked.value = {} get_parsed_bbox_points_mocked.return_value = {"bbox": "bbox_object", "prompt": "prompt_object", "zoom": 1} response_type = "200" with open(TEST_EVENTS_FOLDER / "get_response.json") as tst_json_get_response: get_response_io = json.load(tst_json_get_response) input_200 = { "bbox": { "ne": {"lat": 38.03932961278458, "lng": 15.36808069832851}, "sw": {"lat": 37.455509218936974, "lng": 14.632807441554068} }, "prompt": [{ "type": "point", "data": {"lat": 37.0, "lng": 15.0}, "label": 0 }], "zoom": 10, "source_type": "Satellite", "debug": True } samexporter_predict_output = get_response_io[response_type]["input"] samexporter_predict_mocked.return_value = samexporter_predict_output samexporter_predict_mocked.side_effect = None get_response_mocked.return_value = get_response_io[response_type]["output"] event = {"body": input_200, "version": 1.0} lambda_context = LambdaContext( invoke_id="test_invoke_id", client_context=None, cognito_identity=None, epoch_deadline_time_in_ms=time.time() ) response_200 = lambda_handler(event, lambda_context) expected_response_200 = get_response_io[response_type]["output"] print(f"types: response_200:{type(response_200)}, expected:{type(expected_response_200)}.") assert response_200 == expected_response_200