def test_if_request_is_valid_with_no_validator(self): ctx = ApiInvocationContext("POST", "/", b"", {}) ctx.api_id = "deadbeef" ctx.resource = { "resourceMethods": { "POST": { "requestValidatorId": " " } } } validator = RequestValidator(ctx, None) self.assertTrue(validator.is_request_valid())
def test_request_validate_body_with_no_request_model(self): apigateway_client = self._mock_client() apigateway_client.get_request_validator.return_value = { "validateRequestBody": True } ctx = ApiInvocationContext("POST", "/", '{"id":"1"}', {}) ctx.api_id = "deadbeef" ctx.resource = { "resourceMethods": { "POST": { "requestValidatorId": "112233", "requestModels": None, } } } validator = RequestValidator(ctx, apigateway_client) self.assertFalse(validator.is_request_valid())
def test_apply_template_no_json_payload(self): api_context = ApiInvocationContext( method="POST", path="/foo/bar?baz=test", data=b'"#foobar123"', headers={"content-type": APPLICATION_JSON}, stage="local", ) api_context.integration = { "requestTemplates": { APPLICATION_JSON: "$util.escapeJavaScript($input.json('$.message'))" }, } rendered_request = RequestTemplates().render(api_context=api_context) self.assertEqual("[]", rendered_request)
def test_apply_template(self): api_context = ApiInvocationContext( method="POST", path="/foo/bar?baz=test", data='{"action":"$default","message":"foobar"}', headers={"content-type": APPLICATION_JSON}, stage="local", ) api_context.response = requests_response({}) api_context.integration = { "requestTemplates": { APPLICATION_JSON: "$util.escapeJavaScript($input.json('$.message'))" }, } rendered_request = RequestTemplates().render(api_context=api_context) self.assertEqual('"foobar"', rendered_request)
def test_request_validate_body_with_no_model_for_schema_name(self): apigateway_client = Mock(boto3.client(service_name="apigateway")) apigateway_client.get_request_validator.return_value = { "validateRequestBody": True } apigateway_client.get_model.return_value = None ctx = ApiInvocationContext("POST", "/", '{"id":"1"}', {}) ctx.api_id = "deadbeef" ctx.resource = { "resourceMethods": { "POST": { "requestValidatorId": "112233", "requestModels": { "application/json": "schemaName" }, } } } validator = RequestValidator(ctx, apigateway_client) self.assertFalse(validator.is_request_valid())
def test_if_request_has_body_validator(self): apigateway_client = self._mock_client() apigateway_client.get_request_validator.return_value = { "validateRequestBody": True } apigateway_client.get_model.return_value = { "schema": '{"type": "object"}' } ctx = ApiInvocationContext("POST", "/", '{"id":"1"}', {}) ctx.api_id = "deadbeef" ctx.resource = { "resourceMethods": { "POST": { "requestValidatorId": "112233", "requestModels": { "application/json": "schemaName" }, } } } validator = RequestValidator(ctx, apigateway_client) self.assertTrue(validator.is_request_valid())
def test_render_custom_template(self, template): api_context = ApiInvocationContext( method="POST", path="/foo/bar?baz=test", data=b'{"spam": "eggs"}', headers={"content-type": APPLICATION_JSON}, stage="local", ) api_context.integration = { "requestTemplates": { APPLICATION_JSON: RESPONSE_TEMPLATE }, "integrationResponses": { "200": { "responseTemplates": { APPLICATION_JSON: RESPONSE_TEMPLATE } } }, } api_context.resource_path = "/{proxy+}" api_context.path_params = {"id": "bar"} api_context.response = requests_response({"spam": "eggs"}) api_context.context = { "httpMethod": api_context.method, "stage": api_context.stage, "authorizer": { "principalId": "12233" }, "identity": { "accountId": "00000", "apiKey": "11111" }, "resourcePath": api_context.resource_path, } api_context.stage_variables = { "stageVariable1": "value1", "stageVariable2": "value2" } rendered_request = template.render(api_context=api_context) result_as_json = json.loads(rendered_request) assert result_as_json.get("body") == {"spam": "eggs"} assert result_as_json.get("method") == "POST" assert result_as_json.get("principalId") == "12233" assert result_as_json.get("stage") == "local" assert result_as_json.get("enhancedAuthContext") == { "principalId": "12233" } assert result_as_json.get("identity") == { "accountId": "00000", "apiKey": "11111" } assert result_as_json.get("headers") == { "content-type": APPLICATION_JSON } assert result_as_json.get("query") == {"baz": "test"} assert result_as_json.get("path") == {"id": "bar"} assert result_as_json.get("stageVariables") == { "stageVariable1": "value1", "stageVariable2": "value2", }
def test_if_request_is_valid_with_no_matching_method(self): ctx = ApiInvocationContext("POST", "/", b"", {}) ctx.resource = {"resourceMethods": {"GET": {}}} validator = RequestValidator(ctx, None) self.assertTrue(validator.is_request_valid())
def test_if_request_is_valid_with_no_resource_methods(self): ctx = ApiInvocationContext("POST", "/", b"", {}) validator = RequestValidator(ctx, None) self.assertTrue(validator.is_request_valid())