def test_auth_user_validates():
    longer_than_255 = "a" * 256
    exactly_255 = "a" * 255
    case = [
        ({'emailAddress': '*****@*****.**',
          'password': exactly_255}, True, "valid"),
        ({'emailAddress': 'thisthat.com',
          'password': exactly_255}, False, "invalid email thisthat.com"),
        ({'emailAddress': 'this@that',
          'password': exactly_255}, False, "invalid email this@that"),
        ({'emailAddress': 'this@[email protected]',
          'password': exactly_255}, False, "invalid email this@[email protected]"),
        ({'emailAddress': '',
          'password': exactly_255}, False, "Missing email"),
        ({'emailAddress': '*****@*****.**',
          'name': exactly_255}, False, "missing password"),
        ({'emailAddress': '*****@*****.**',
          'password': longer_than_255}, False, "too long password"),
        ({'emailAddress': '*****@*****.**',
          'password': longer_than_255}, False, "too short password"),
        ({'emailAddress': '*****@*****.**',
          'password': ''}, False, "too short password")
    ]

    for example, expected, message in case:
        result = validates_against_schema('users-auth', example)
        assert_equal(result, expected, message)
def test_updater_json_validates_correctly():
    """
    This schema currently allows extra fields as part of a 2 stage
    migration of API validatiopn rules. This test will change back to
    not allowing the invalid fields when the utils is updated.
    :return:
    """
    invalid_updater_no_fields = {}
    invalid_updater_extra_fields = {'updated_by': 'this', 'invalid': 'this'}
    invalid_updater_only_invalid_fields = {'invalid': 'this'}
    valid_updater = {'updated_by': 'this'}

    assert validates_against_schema('services-update', invalid_updater_no_fields) is False
    assert validates_against_schema('services-update', invalid_updater_extra_fields) is True
    assert validates_against_schema('services-update', invalid_updater_only_invalid_fields) is False
    assert validates_against_schema('services-update', valid_updater) is True
def test_auth_user_validates():
    longer_than_255 = "a" * 256
    exactly_255 = "a" * 255
    case = [
        ({'emailAddress': '*****@*****.**',
          'password': exactly_255}, True, "valid"),
        ({'emailAddress': 'thisthat.com',
          'password': exactly_255}, False, "invalid email thisthat.com"),
        ({'emailAddress': 'this@that',
          'password': exactly_255}, False, "invalid email this@that"),
        ({'emailAddress': 'this@[email protected]',
          'password': exactly_255}, False, "invalid email this@[email protected]"),
        ({'emailAddress': '',
          'password': exactly_255}, False, "Missing email"),
        ({'emailAddress': '*****@*****.**',
          'name': exactly_255}, False, "missing password"),
        ({'emailAddress': '*****@*****.**',
          'password': longer_than_255}, False, "too long password"),
        ({'emailAddress': '*****@*****.**',
          'password': longer_than_255}, False, "too short password"),
        ({'emailAddress': '*****@*****.**',
          'password': ''}, False, "too short password")
    ]

    for example, expected, message in case:
        result = validates_against_schema('users-auth', example)
        yield assert_equal, result, expected, message
def test_updater_json_validates_correctly():
    """
    This schema currently allows extra fields as part of a 2 stage
    migration of API validatiopn rules. This test will change back to
    not allowing the invalid fields when the utils is updated.
    :return:
    """
    invalid_updater_no_fields = {}
    invalid_updater_extra_fields = {'updated_by': 'this', 'invalid': 'this'}
    invalid_updater_only_invalid_fields = {'invalid': 'this'}
    valid_updater = {'updated_by': 'this'}

    assert validates_against_schema('services-update', invalid_updater_no_fields) is False
    assert validates_against_schema('services-update', invalid_updater_extra_fields) is True
    assert validates_against_schema('services-update', invalid_updater_only_invalid_fields) is False
    assert validates_against_schema('services-update', valid_updater) is True
def test_user_creation_validates():
    longer_than_255 = "a" * 256
    exactly_255 = "a" * 255
    case = [({
        'emailAddress': '*****@*****.**',
        'role': 'buyer',
        'name': exactly_255,
        'password': exactly_255
    }, True, "valid"),
            ({
                'emailAddress': 'thisthat.com',
                'role': 'buyer',
                'name': exactly_255,
                'password': exactly_255
            }, False, "invalid email thisthat.com"),
            ({
                'emailAddress': 'this@that',
                'role': 'buyer',
                'name': exactly_255,
                'password': exactly_255
            }, False, "invalid email this@that"),
            ({
                'emailAddress': 'this@[email protected]',
                'role': 'buyer',
                'name': exactly_255,
                'password': exactly_255
            }, False, "invalid email this@[email protected]"),
            ({
                'emailAddress': '',
                'role': 'buyer',
                'name': exactly_255,
                'password': exactly_255
            }, False, "Missing email"),
            ({
                'emailAddress': '*****@*****.**',
                'role': 'buyer',
                'password': exactly_255
            }, False, "missing name"),
            ({
                'emailAddress': '*****@*****.**',
                'role': 'buyer',
                'name': exactly_255
            }, False, "missing password"),
            ({
                'emailAddress': '*****@*****.**',
                'role': 'buyer',
                'name': exactly_255,
                'password': longer_than_255
            }, False, "too long password"),
            ({
                'emailAddress': '*****@*****.**',
                'role': 'buyer',
                'name': exactly_255,
                'password': longer_than_255
            }, False, "too short password"),
            ({
                'emailAddress': '*****@*****.**',
                'role': 'buyer',
                'name': exactly_255,
                'password': ''
            }, False, "too short password"),
            ({
                'emailAddress': '*****@*****.**',
                'role': 'buyer',
                'name': '',
                'password': exactly_255
            }, False, "too short name"),
            ({
                'emailAddress': '*****@*****.**',
                'role': 'buyer',
                'name': exactly_255,
                'password': exactly_255,
                'hashpw': True
            }, True, "valid with hashpw"),
            ({
                'emailAddress': '*****@*****.**',
                'role': 'buyer',
                'name': exactly_255,
                'password': exactly_255,
                'hashpw': False
            }, True, "valid with dont hashpw"),
            ({
                'emailAddress': '*****@*****.**',
                'role': 'buyer',
                'name': exactly_255,
                'password': exactly_255,
                'hashpw': 'dewdew'
            }, False, "invalid hashpw"),
            ({
                'emailAddress': '*****@*****.**',
                'role': 'invalid',
                'name': exactly_255,
                'password': exactly_255
            }, False, "invalid role"),
            ({
                'emailAddress': '*****@*****.**',
                'role': 'buyer',
                'name': exactly_255,
                'supplierCode': 123,
                'password': exactly_255
            }, True, "valid supplier id"),
            ({
                'emailAddress': '*****@*****.**',
                'role': 'buyer',
                'name': exactly_255,
                'supplierCode': '',
                'password': exactly_255
            }, False, "invalid supplier id (to short)"),
            ({
                'emailAddress': '*****@*****.**',
                'role': 'buyer',
                'name': exactly_255,
                'supplierCode': longer_than_255,
                'password': exactly_255
            }, False, "invalid supplier id (to long)")]

    for example, expected, message in case:
        result = validates_against_schema('users', example)
        assert_equal(result, expected, message)
def test_user_creation_validates():
    longer_than_255 = "a" * 256
    exactly_255 = "a" * 255
    case = [
        ({'emailAddress': '*****@*****.**',
          'role': 'buyer',
          'name': exactly_255,
          'password': exactly_255}, True, "valid"),
        ({'emailAddress': 'thisthat.com',
          'role': 'buyer',
          'name': exactly_255,
          'password': exactly_255}, False, "invalid email thisthat.com"),
        ({'emailAddress': 'this@that',
          'role': 'buyer',
          'name': exactly_255,
          'password': exactly_255}, False, "invalid email this@that"),
        ({'emailAddress': 'this@[email protected]',
          'role': 'buyer',
          'name': exactly_255,
          'password': exactly_255}, False, "invalid email this@[email protected]"),
        ({'emailAddress': '',
          'role': 'buyer',
          'name': exactly_255,
          'password': exactly_255}, False, "Missing email"),
        ({'emailAddress': '*****@*****.**',
          'role': 'buyer',
          'password': exactly_255}, False, "missing name"),
        ({'emailAddress': '*****@*****.**',
          'role': 'buyer',
          'name': exactly_255}, False, "missing password"),
        ({'emailAddress': '*****@*****.**',
          'role': 'buyer',
          'name': exactly_255,
          'password': longer_than_255}, False, "too long password"),
        ({'emailAddress': '*****@*****.**',
          'role': 'buyer',
          'name': exactly_255,
          'password': longer_than_255}, False, "too short password"),
        ({'emailAddress': '*****@*****.**',
          'role': 'buyer',
          'name': exactly_255,
          'password': ''}, False, "too short password"),
        ({'emailAddress': '*****@*****.**',
          'role': 'buyer',
          'name': '',
          'password': exactly_255}, False, "too short name"),
        ({'emailAddress': '*****@*****.**',
          'role': 'buyer',
          'name': exactly_255,
          'password': exactly_255,
          'hashpw': True}, True, "valid with hashpw"),
        ({'emailAddress': '*****@*****.**',
          'role': 'buyer',
          'name': exactly_255,
          'password': exactly_255,
          'hashpw': False}, True, "valid with dont hashpw"),
        ({'emailAddress': '*****@*****.**',
          'role': 'buyer',
          'name': exactly_255,
          'password': exactly_255,
          'hashpw': 'dewdew'}, False, "invalid hashpw"),
        ({'emailAddress': '*****@*****.**',
          'role': 'invalid',
          'name': exactly_255,
          'password': exactly_255}, False, "invalid role"),
        ({'emailAddress': '*****@*****.**',
          'role': 'buyer',
          'name': exactly_255,
          'supplierCode': 123,
          'password': exactly_255}, True, "valid supplier id"),
        ({'emailAddress': '*****@*****.**',
          'role': 'buyer',
          'name': exactly_255,
          'supplierCode': '',
          'password': exactly_255}, False, "invalid supplier id (to short)"),
        ({'emailAddress': '*****@*****.**',
          'role': 'buyer',
          'name': exactly_255,
          'supplierCode': longer_than_255,
          'password': exactly_255}, False, "invalid supplier id (to long)")
    ]

    for example, expected, message in case:
        result = validates_against_schema('users', example)
        assert_equal(result, expected, message)