Esempio n. 1
0
def test_multiple_invalid_fields_validation():
    input_schema = {
        "social_security_number":
        prop.String(validators=[validators.SocialSecurityNumber()]),
        "exact_length_string":
        prop.String(validators=[validators.ExactLength(3)]),
    }

    given_request = {
        "social_security_number": "578234",
        "exact_length_string": "not three long",
    }

    http_status, reject_dict = validate_input(given_request, input_schema)
    assert reject_dict == {
        'message': 'Multiple fields have an error.',
        'field_error_messages': {
            'exact_length_string':
            "String is not the correct length! "
            "The string 'not three long' is 14 characters long, not 3!",
            'social_security_number':
            '578234 is not a valid social security number!'
        }
    }

    assert http_status == HTTPStatus.BAD_REQUEST
Esempio n. 2
0
def test_validate_input_one_of_invalid():

    input_schema = {
        "id":
        prop_wrapper.OneOf([
            prop.String(validators=[validators.ExactLength(3)]),
            prop.String(validators=[validators.ExactLength(8)]),
            prop.Number()
        ])
    }

    given_request = {"id": "banana_phone"}

    http_status, reject_dict = validate_input(given_request, input_schema)
    assert reject_dict == {
        'message': 'A field has an error.',
        'field_error_messages': {
            'id':
            ("The value 'banana_phone' from field 'id' is not valid for one of the defined props for "
             "the following reasons: String is not the correct length! The string 'banana_phone' is "
             "12 characters long, not 3!, String is not the correct length! The string 'banana_phone' is "
             "12 characters long, not 8!, The value 'banana_phone' from field 'id' is the wrong "
             'type, expected: Number')
        }
    }

    assert http_status == HTTPStatus.BAD_REQUEST
Esempio n. 3
0
def test_validate_number_string():

    input_schema = {"id": prop.Number()}

    given_request = {"id": "1,000"}

    http_status, reject_dict = validate_input(given_request, input_schema)
    assert reject_dict == {}
    assert http_status is HTTPStatus.OK
Esempio n. 4
0
def test_validate_input_string_id_not_negative_number():

    input_schema = {
        "id": prop.Number(),
    }

    given_request = {"id": "-2"}

    http_status, reject_dict = validate_input(given_request, input_schema)
    assert reject_dict == {}
    assert http_status is HTTPStatus.OK
Esempio n. 5
0
def test_validate_input():

    input_schema = {
        "basic_string": prop.String(),
        "basic_boolean": prop.Boolean()
    }

    given_request = {
        "basic_string": "test string",
        "basic_boolean": True,
    }

    http_status, reject_dict = validate_input(given_request, input_schema)
    assert reject_dict == {}
    assert http_status is HTTPStatus.OK
Esempio n. 6
0
def test_validate_input_missing_field():

    input_schema = {
        "basic_string": prop.String(required=True),
        "basic_boolean": prop.Boolean()
    }

    given_request = {
        "basic_boolean": True,
    }

    http_status, reject_dict = validate_input(given_request, input_schema)
    assert reject_dict == {
        "message": "A required field is missing: basic_string"
    }
    assert http_status == HTTPStatus.BAD_REQUEST
Esempio n. 7
0
def test_validate_input_one_of():

    input_schema = {
        "id":
        prop_wrapper.OneOf([
            prop.String(validators=[validators.ExactLength(3)]),
            prop.String(validators=[validators.ExactLength(8)]),
            prop.Number()
        ])
    }

    given_request = {"id": "abc"}

    http_status, reject_dict = validate_input(given_request, input_schema)
    assert reject_dict == {}
    assert http_status is HTTPStatus.OK
Esempio n. 8
0
def test_validate_input_multiple_missing_fields():

    input_schema = {
        "basic_string": prop.String(required=True),
        "another_basic_string": prop.String(required=True),
        "basic_boolean": prop.Boolean()
    }

    given_request = {
        "basic_boolean": True,
    }

    http_status, reject_dict = validate_input(given_request, input_schema)
    assert reject_dict == {
        "message":
        "Required fields are missing: ['basic_string', 'another_basic_string']",
    }
    assert http_status == HTTPStatus.BAD_REQUEST
Esempio n. 9
0
def test_validate_input_unexpected_field():

    input_schema = {
        "basic_string": prop.String(),
        "basic_boolean": prop.Boolean()
    }

    given_request = {
        "basic_string": "test string",
        "basic_boolean": True,
        "what_the_heck": "is this????"
    }

    http_status, reject_dict = validate_input(given_request, input_schema)
    assert reject_dict == {
        "message": "An unexpected field was sent to the server: what_the_heck"
    }
    assert http_status == HTTPStatus.BAD_REQUEST
Esempio n. 10
0
def test_validate_input_string_id_not_a_number():

    input_schema = {
        "id": prop.Number(),
    }

    given_request = {"id": "banana_phone"}

    http_status, reject_dict = validate_input(given_request, input_schema)
    assert reject_dict == {
        'message': 'A field has an error.',
        'field_error_messages': {
            'id':
            "The value 'banana_phone' from field 'id' is "
            "the wrong type, expected: Number"
        }
    }

    assert http_status == HTTPStatus.BAD_REQUEST
Esempio n. 11
0
def test_validate_input_multiple_unexpected_fields():

    input_schema = {
        "basic_string": prop.String(),
        "basic_boolean": prop.Boolean()
    }

    given_request = {
        "basic_string": "test string",
        "basic_boolean": True,
        "what_the_heck": "is this????",
        "more_BS": "SQL INJECTION!!"
    }

    http_status, reject_dict = validate_input(given_request, input_schema)
    assert reject_dict == {
        "message":
        "Unexpected fields were sent to the server: [\'what_the_heck\', \'more_BS\']"
    }
    assert http_status == HTTPStatus.BAD_REQUEST
Esempio n. 12
0
def test_validate_number_social_security_number():
    input_schema = {
        "social_security_number":
        prop.Number(validators=[validators.SocialSecurityNumber()]),
    }

    given_request = {
        "social_security_number": "219099999",
    }

    http_status, reject_dict = validate_input(given_request, input_schema)
    assert reject_dict == {
        'message': 'A field has an error.',
        'field_error_messages': {
            'social_security_number':
            'SocialSecurityNumber is not supported for class Number!!'
        }
    }

    assert http_status == HTTPStatus.BAD_REQUEST
Esempio n. 13
0
def test_validate_input_exact_length_string():

    input_schema = {
        "basic_string": prop.String(validators=[validators.ExactLength(8)]),
    }

    given_request = {
        "basic_string": "noteightlong",
    }

    http_status, reject_dict = validate_input(given_request, input_schema)
    assert reject_dict == {
        'message': 'A field has an error.',
        'field_error_messages': {
            'basic_string':
            'String is not the correct length! The string \'noteightlong\' is 12 characters long, not 8!'
        }
    }

    assert http_status == HTTPStatus.BAD_REQUEST
Esempio n. 14
0
def test_impossible_validation():
    input_schema = {
        "social_security_number":
        prop.String(validators=[
            validators.SocialSecurityNumber(),
            validators.ExactLength(3)
        ]),
    }

    given_request = {
        "social_security_number": "578271234",
    }

    http_status, reject_dict = validate_input(given_request, input_schema)
    assert reject_dict == {
        'message': 'A field has an error.',
        'field_error_messages': {
            'social_security_number':
            'String is not the correct length! The string \'578271234\' is 9 characters long, not 3!'
        }
    }

    assert http_status == HTTPStatus.BAD_REQUEST
Esempio n. 15
0
def test_validate_input_exact_length_object():

    input_schema = {
        "basic_object":
        prop.Object(structure={"basic_string": prop.String()},
                    validators=[validators.ExactLength(8)]),
    }

    given_request = {
        "basic_object": {
            "basic_string": "this is irrelevant",
        }
    }

    http_status, reject_dict = validate_input(given_request, input_schema)
    assert reject_dict == {
        'message': 'A field has an error.',
        'field_error_messages': {
            'basic_object': 'ExactLength is not supported for class Object!!'
        }
    }

    assert http_status == HTTPStatus.BAD_REQUEST
Esempio n. 16
0
def test_validate_input_wrong_type():

    input_schema = {
        "basic_string": prop.String(),
        "basic_boolean": prop.Boolean()
    }

    given_request = {
        "basic_string": ["what", "the", "heck", "is", "this"],
        "basic_boolean": True,
    }

    http_status, reject_dict = validate_input(given_request, input_schema)
    assert reject_dict == {
        'message': 'A field has an error.',
        'field_error_messages': {
            'basic_string':
            "The value ['what', 'the', 'heck', 'is', 'this'] from field "
            "'basic_string' is the wrong type, expected: String"
        }
    }

    assert http_status == HTTPStatus.BAD_REQUEST