Skip to content

Commit

Permalink
fix openapi3 path and query validation and tests (spec-first#821)
Browse files Browse the repository at this point in the history
  • Loading branch information
dtkav authored and jmcs committed Dec 18, 2018
1 parent d8cd116 commit 9b76bbc
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
1 change: 1 addition & 0 deletions connexion/decorators/validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ def validate_parameter(parameter_type, value, param, param_name=None):
return str(e)

param = copy.deepcopy(param)
param = param.get('schema', param)
if 'required' in param:
del param['required']
try:
Expand Down
26 changes: 25 additions & 1 deletion tests/decorators/test_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,31 @@ def test_get_valid_parameter_with_required_attr():
assert result is None


def test_get_valid_path_parameter():
param = {'required': True, 'schema': {'type': 'number'}, 'name': 'foobar'}
result = ParameterValidator.validate_parameter('path', 20, param)
assert result is None


def test_get_missing_required_parameter():
param = {'type': 'number', 'required': True, 'name': 'foo'}
result = ParameterValidator.validate_parameter('formdata', None, param)
assert result == "Missing formdata parameter 'foo'"


def test_get_nullable_parameter():
def test_get_x_nullable_parameter():
param = {'type': 'number', 'required': True, 'name': 'foo', 'x-nullable': True}
result = ParameterValidator.validate_parameter('formdata', 'None', param)
assert result is None


def test_get_nullable_parameter():
param = {'schema': {'type': 'number', 'nullable': True},
'required': True, 'name': 'foo'}
result = ParameterValidator.validate_parameter('query', 'null', param)
assert result is None


def test_invalid_type(monkeypatch):
logger = MagicMock()
monkeypatch.setattr('connexion.decorators.validation.logger', logger)
Expand All @@ -52,6 +65,17 @@ def test_invalid_type_value_error(monkeypatch):
result = ParameterValidator.validate_parameter('formdata', value, {'type': 'boolean', 'name': 'foo'})
assert result == "Wrong type, expected 'boolean' for formdata parameter 'foo'"


def test_enum_error(monkeypatch):
logger = MagicMock()
monkeypatch.setattr('connexion.decorators.validation.logger', logger)
value = 'INVALID'
param = {'schema': {'type': 'string', 'enum': ['valid']},
'name': 'test_path_param'}
result = ParameterValidator.validate_parameter('path', value, param)
assert result.startswith("'INVALID' is not one of ['valid']")


def test_support_nullable_properties():
schema = {
"type": "object",
Expand Down

0 comments on commit 9b76bbc

Please sign in to comment.