From c13657dd31c8e0c3217e29b35556f9aa2be37268 Mon Sep 17 00:00:00 2001 From: Daniel Opitz Date: Tue, 21 Nov 2017 20:53:00 +0100 Subject: [PATCH 1/3] add failing test for #138 --- .../test_request_body_parameter_validation.py | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/tests/validation/request/test_request_body_parameter_validation.py b/tests/validation/request/test_request_body_parameter_validation.py index a6fe7c0..03b3502 100644 --- a/tests/validation/request/test_request_body_parameter_validation.py +++ b/tests/validation/request/test_request_body_parameter_validation.py @@ -112,3 +112,53 @@ def test_request_body_parameter_validation_with_invalid_value(user_post_schema): MESSAGES['format']['invalid_email'], err.value.detail, ) + + +def test_request_body_parameter_validation_invalid_without_ref(): + """ + Test validating the request body with a invalid post. + """ + schema = SchemaFactory( + paths={ + '/post/': { + 'post': { + 'consumes': ['application/json'], + 'parameters': [ + { + 'in': 'body', + 'name': 'body', + 'required': True, + 'schema': { + 'type': 'object', + 'required': ['name'], + 'properties': { + 'name': { + 'type': 'string' + } + } + } + } + ], + 'responses': {200: {'description': "Success"}}, + } + } + } + ) + + request = RequestFactory( + url='http://www.example.com/post/', + content_type='application/json', + body=json.dumps({}), + method=POST, + ) + + with pytest.raises(ValidationError) as err: + validate_request( + request=request, + schema=schema, + ) + + assert_message_in_errors( + MESSAGES['required']['required'], + err.value.detail, + ) From ee0a29167fe31939efcb50f8c6df3f88b9bd84de Mon Sep 17 00:00:00 2001 From: Daniel Opitz Date: Wed, 22 Nov 2017 16:53:47 +0100 Subject: [PATCH 2/3] add validators to existing validators to not omit any - fixes #138 --- flex/validation/parameter.py | 5 ++++- .../request/test_request_body_parameter_validation.py | 10 +++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/flex/validation/parameter.py b/flex/validation/parameter.py index 5bfb4cb..5ffd4d8 100644 --- a/flex/validation/parameter.py +++ b/flex/validation/parameter.py @@ -125,7 +125,10 @@ def construct_parameter_validators(parameter, context): if 'schema' in parameter: schema_validators = construct_schema_validators(parameter['schema'], context=context) for key, value in schema_validators.items(): - validators.setdefault(key, value) + if key in validators: + validators[key] += value + else: + validators.setdefault(key, value) return validators diff --git a/tests/validation/request/test_request_body_parameter_validation.py b/tests/validation/request/test_request_body_parameter_validation.py index 03b3502..a5c88f2 100644 --- a/tests/validation/request/test_request_body_parameter_validation.py +++ b/tests/validation/request/test_request_body_parameter_validation.py @@ -121,19 +121,19 @@ def test_request_body_parameter_validation_invalid_without_ref(): schema = SchemaFactory( paths={ '/post/': { - 'post': { + POST: { 'consumes': ['application/json'], 'parameters': [ { - 'in': 'body', - 'name': 'body', + 'in': BODY, + 'name': BODY, 'required': True, 'schema': { - 'type': 'object', + 'type': OBJECT, 'required': ['name'], 'properties': { 'name': { - 'type': 'string' + 'type': STRING } } } From 79eb3c44dd9710686870f3cc2ae4d80ccf94bada Mon Sep 17 00:00:00 2001 From: Daniel Opitz Date: Wed, 6 Dec 2017 21:52:24 +0100 Subject: [PATCH 3/3] clarify merge of validators --- flex/validation/parameter.py | 1 + 1 file changed, 1 insertion(+) diff --git a/flex/validation/parameter.py b/flex/validation/parameter.py index 5ffd4d8..aa9f479 100644 --- a/flex/validation/parameter.py +++ b/flex/validation/parameter.py @@ -125,6 +125,7 @@ def construct_parameter_validators(parameter, context): if 'schema' in parameter: schema_validators = construct_schema_validators(parameter['schema'], context=context) for key, value in schema_validators.items(): + # merge validators for those sharing the same key (like 'required') to not omit some if key in validators: validators[key] += value else: