def handler(event, context, **kwargs): """ Handler. Handle the lambda function event and return a response with a body containing the url and the key, if it exists. response body: '{"url": <string>, "key": <string>}' """ squrlifier = kwargs.get("squrl", Squrl(getenv("S3_BUCKET"))) registry = kwargs.get( "registry", { "GET": squrlifier.get, "POST": squrlifier.create, "PUT": squrlifier.create }, ) method, body = ApiHandler.parse_event(event) if method not in registry.keys(): error = ValueError(f"Unsupported method: {method}") return ApiHandler.get_response(error=error) else: url = unquote_plus(body["url"]) key = registry[method](url) return ApiHandler.get_response(response={"url": url, "key": key})
def test_call_handler(event, context): key = "response" mock_handler = MagicMock(return_value=key) api_handler = ApiHandler(mock_handler) response = api_handler(event, context) mock_handler.assert_called_once_with(event, context) assert response == key
def test_get_response_ok(response): expected_response = { "statusCode": "200", "body": dumps(response), "headers": { "Content-Type": "application/json", }, } actual_response = ApiHandler.get_response(response=response) assert expected_response == actual_response
def test_parse_event(event, method, url): event["httpMethod"] = method if method == "GET": event["queryStringParameters"] = dumps({"url": url}) else: event["body"] = dumps({"url": url}) method, body = ApiHandler.parse_event(event) assert method == method assert body["url"] == url
def test_get_response_error(): error = ValueError("test-error") expected_response = { "statusCode": "400", "body": str(error), "headers": { "Content-Type": "application/json", }, } actual_response = ApiHandler.get_response(error=error) assert expected_response == actual_response
def test_handler_post(post_event, context, squrl_create): api_handler = ApiHandler(handler) response = api_handler(post_event, context, squrl=squrl_create) assert response["statusCode"] == "200"
def test_handler_get(get_event, context, squrl_get): api_handler = ApiHandler(handler) response = api_handler(get_event, context, squrl=squrl_get) assert response["statusCode"] == "200"
def test_handler_error(unsupported_event, context): api_handler = ApiHandler(handler) response = api_handler(unsupported_event, context) assert response["statusCode"] == "400"