Exemplo n.º 1
0
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
Exemplo n.º 2
0
def test_invalid_type_value_error(monkeypatch):
    logger = MagicMock()
    monkeypatch.setattr('specific.decorators.validation.logger', logger)
    value = {'test': 1, 'second': 2}
    result = ParameterValidator.validate_parameter('formdata', value, {
        'type': 'boolean',
        'name': 'foo'
    })
    assert result == "Wrong type, expected 'boolean' for formdata parameter 'foo'"
Exemplo n.º 3
0
def test_parameter_validator(monkeypatch):
    request = MagicMock(name='request')
    request.args = {}
    request.headers = {}
    request.params = {}
    app = MagicMock(name='app')

    app.response_class = flask.Response
    monkeypatch.setattr('flask.request', request)
    monkeypatch.setattr('flask.current_app', app)

    def orig_handler(*args, **kwargs):
        return 'OK'

    params = [{'name': 'p1', 'in': 'path', 'type': 'integer', 'required': True},
              {'name': 'h1', 'in': 'header', 'type': 'string', 'enum': ['a', 'b']},
              {'name': 'q1', 'in': 'query', 'type': 'integer', 'maximum': 3},
              {'name': 'a1', 'in': 'query', 'type': 'array', 'minItems': 2, 'maxItems': 3,
               'items': {'type': 'integer', 'minimum': 0}}]
    validator = ParameterValidator(params, FlaskApi)
    handler = validator(orig_handler)

    kwargs = {'query': {}, 'headers': {}}
    request = MagicMock(path_params={}, **kwargs)
    assert json.loads(handler(request).data.decode())['detail'] == "Missing path parameter 'p1'"
    request = MagicMock(path_params={'p1': '123'}, **kwargs)
    assert handler(request) == 'OK'
    request = MagicMock(path_params={'p1': ''}, **kwargs)
    assert json.loads(handler(request).data.decode())['detail'] == "Wrong type, expected 'integer' for path parameter 'p1'"
    request = MagicMock(path_params={'p1': 'foo'}, **kwargs)
    assert json.loads(handler(request).data.decode())['detail'] == "Wrong type, expected 'integer' for path parameter 'p1'"
    request = MagicMock(path_params={'p1': '1.2'}, **kwargs)
    assert json.loads(handler(request).data.decode())['detail'] == "Wrong type, expected 'integer' for path parameter 'p1'"

    request = MagicMock(path_params={'p1': 1}, query={'q1': '4'}, headers={})
    assert json.loads(handler(request).data.decode())['detail'].startswith('4 is greater than the maximum of 3')
    request = MagicMock(path_params={'p1': 1}, query={'q1': '3'}, headers={})
    assert handler(request) == 'OK'

    request = MagicMock(path_params={'p1': 1}, query={'a1': ['1', '2']}, headers={})
    assert handler(request) == "OK"
    request = MagicMock(path_params={'p1': 1}, query={'a1': ['1', 'a']}, headers={})
    assert json.loads(handler(request).data.decode())['detail'].startswith("'a' is not of type 'integer'")
    request = MagicMock(path_params={'p1': 1}, query={'a1': ['1', '-1']}, headers={})
    assert json.loads(handler(request).data.decode())['detail'].startswith("-1 is less than the minimum of 0")
    request = MagicMock(path_params={'p1': 1}, query={'a1': ['1']}, headers={})
    assert json.loads(handler(request).data.decode())['detail'].startswith("[1] is too short")
    request = MagicMock(path_params={'p1': 1}, query={'a1': ['1', '2', '3', '4']}, headers={})
    assert json.loads(handler(request).data.decode())['detail'].startswith("[1, 2, 3, 4] is too long")

    request = MagicMock(path_params={'p1': '123'}, query={}, headers={'h1': 'a'})
    assert handler(request) == 'OK'

    request = MagicMock(path_params={'p1': '123'}, query={}, headers={'h1': 'x'})
    assert json.loads(handler(request).data.decode())['detail'].startswith("'x' is not one of ['a', 'b']")
Exemplo n.º 4
0
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
Exemplo n.º 5
0
def test_enum_error(monkeypatch):
    logger = MagicMock()
    monkeypatch.setattr('specific.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']")
Exemplo n.º 6
0
def test_invalid_type(monkeypatch):
    logger = MagicMock()
    monkeypatch.setattr('specific.decorators.validation.logger', logger)
    result = ParameterValidator.validate_parameter('formdata', 20, {
        'type': 'string',
        'name': 'foo'
    })
    expected_result = """20 is not of type 'string'

Failed validating 'type' in schema:
    {'name': 'foo', 'type': 'string'}

On instance:
    20"""
    assert result == expected_result
    logger.info.assert_called_once()
Exemplo n.º 7
0
def test_get_valid_parameter():
    result = ParameterValidator.validate_parameter('formdata', 20, {
        'type': 'number',
        'name': 'foobar'
    })
    assert result is None
Exemplo n.º 8
0
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'"
Exemplo n.º 9
0
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
Exemplo n.º 10
0
def test_get_valid_parameter_with_required_attr():
    param = {'type': 'number', 'required': True, 'name': 'foobar'}
    result = ParameterValidator.validate_parameter('formdata', 20, param)
    assert result is None