samgis / tests /test_app.py
aletrn's picture
[test] add test case for lambda_handler
4fed430
raw
history blame
5.68 kB
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