Beispiel #1
0
    def test_invalid(self):
        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdate='20160202'), ec)
        self.assertEqual(1, len(ec.all_errors()))
        self.assertHasError(ec.all_errors(), apilib.CommonErrorCodes.INVALID_VALUE, 'fdate')

        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdate='January 1 2012'), ec)
        self.assertEqual(1, len(ec.all_errors()))
        self.assertHasError(ec.all_errors(), apilib.CommonErrorCodes.INVALID_VALUE, 'fdate')

        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdate='2016-0202'), ec)
        self.assertEqual(1, len(ec.all_errors()))
        self.assertHasError(ec.all_errors(), apilib.CommonErrorCodes.INVALID_VALUE, 'fdate')

        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdate='01/12/2018'), ec)
        self.assertEqual(1, len(ec.all_errors()))
        self.assertHasError(ec.all_errors(), apilib.CommonErrorCodes.INVALID_VALUE, 'fdate')

        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdate='2016-20-03'), ec)
        self.assertEqual(1, len(ec.all_errors()))
        self.assertHasError(ec.all_errors(), apilib.CommonErrorCodes.INVALID_VALUE, 'fdate')

        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdate='2016-04-35'), ec)
        self.assertEqual(1, len(ec.all_errors()))
        self.assertHasError(ec.all_errors(), apilib.CommonErrorCodes.INVALID_VALUE, 'fdate')

        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdatetime='2016-04-12 15:37:37.739018+00:00'), ec)
        self.assertEqual(1, len(ec.all_errors()))
        self.assertHasError(ec.all_errors(), apilib.CommonErrorCodes.INVALID_VALUE, 'fdatetime')

        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdatetime='2016-04-12T15:37+00:00'), ec)
        self.assertEqual(1, len(ec.all_errors()))
        self.assertHasError(ec.all_errors(), apilib.CommonErrorCodes.INVALID_VALUE, 'fdatetime')

        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdatetime='2016-04-12T15:37:00.+00:00'), ec)
        self.assertEqual(1, len(ec.all_errors()))
        self.assertHasError(ec.all_errors(), apilib.CommonErrorCodes.INVALID_VALUE, 'fdatetime')

        m = self.Model.from_json(dict(fdatetime='2023-12-12T15:37:37+06:00'), ec)
        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdatetime='2023-1-12T15:37:37+06:00'), ec)
        self.assertEqual(1, len(ec.all_errors()))
        self.assertHasError(ec.all_errors(), apilib.CommonErrorCodes.INVALID_VALUE, 'fdatetime')
Beispiel #2
0
    def test_unique_fields_validator(self):
        UniqueFields = apilib.UniqueFields
        DUPLICATE_VALUE = apilib.CommonErrorCodes.DUPLICATE_VALUE
        M = self.UniqueFieldsModel

        self.run_validator_test_for_context(UniqueFields('id'), None, None)
        self.run_validator_test_for_context(UniqueFields('id'), [], None)
        self.run_validator_test_for_context(UniqueFields('id'), [M()], None)
        self.run_validator_test_for_context(UniqueFields('id'), [M(), M()],
                                            None)
        self.run_validator_test_for_context(UniqueFields('id'), [M(id=None)],
                                            None)
        self.run_validator_test_for_context(UniqueFields('id'),
                                            [M(id=None), M()], None)
        self.run_validator_test_for_context(
            UniqueFields('id'), [M(id=None), M(id=None)], None)
        self.run_validator_test_for_context(UniqueFields('id'),
                                            [M(id=1), M()], None)
        self.run_validator_test_for_context(UniqueFields('id'),
                                            [M(id=1), M(id=None)], None)
        self.run_validator_test_for_context(UniqueFields('id'),
                                            [M(id=1), M(id=2)], None)
        self.run_validator_test_for_context(
            UniqueFields('id'), [M(id=1), M(), M(id=3)], None)

        errors = self.validate(UniqueFields('id'), [M(id=1), M(id=1)],
                               apilib.ErrorContext().extend(field='lfoo'))
        self.assertEqual(1, len(errors))
        self.assertEqual(DUPLICATE_VALUE, errors[0].code)
        self.assertEqual('lfoo[1].id', errors[0].path)

        errors = self.validate(
            UniqueFields('id'),
            [M(id=1), M(id=1), None, M(id=1)],
            apilib.ErrorContext().extend(field='lfoo'))
        self.assertEqual(2, len(errors))
        self.assertEqual(DUPLICATE_VALUE, errors[0].code)
        self.assertEqual('lfoo[1].id', errors[0].path)
        self.assertEqual(DUPLICATE_VALUE, errors[1].code)
        self.assertEqual('lfoo[3].id', errors[1].path)

        errors = self.validate(UniqueFields('foo'),
                               [M(foo='a'), M(foo='a')],
                               apilib.ErrorContext().extend(field='lfoo'))
        self.assertEqual(1, len(errors))
        self.assertEqual(DUPLICATE_VALUE, errors[0].code)
        self.assertEqual('lfoo[1].foo', errors[0].path)

        value = UniqueFields('id').validate([M(id=1), M(id=1)],
                                            apilib.ErrorContext(), None)
        self.assertIsNone(value)
Beispiel #3
0
 def run_test(self, obj, service=None, method=None, operator=None):
     ec = apilib.ErrorContext()
     vc = apilib.ValidationContext(service=service,
                                   method=method,
                                   operator=operator)
     m = self.Model.from_json(obj, ec, vc)
     return m, ec.all_errors()
Beispiel #4
0
 def test_nested_error_field_paths(self):
     ec = apilib.ErrorContext()
     m = ErrorFieldTestParent.from_json(
         {
             'fchild': {
                 'lstring': [None, None, -1],
                 'fint': 'invalid'
             },
             'lchild':
             [None, {
                 'lstring': [None, None, None, -1],
                 'fint': 'invalid'
             }],
             'dchild': {
                 'a': {
                     'lstring': [-1],
                     'fint': 'invalid'
                 }
             },
         }, ec)
     self.assertIsNone(m)
     errors = ec.all_errors()
     self.assertEqual(6, len(errors))
     self.assertHasError(errors, 'INVALID_TYPE', 'fchild.lstring[2]')
     self.assertHasError(errors, 'INVALID_TYPE', 'fchild.fint')
     self.assertHasError(errors, 'INVALID_TYPE', 'lchild[1].lstring[3]')
     self.assertHasError(errors, 'INVALID_TYPE', 'lchild[1].fint')
     self.assertHasError(errors, 'INVALID_TYPE', 'dchild["a"].lstring[0]')
     self.assertHasError(errors, 'INVALID_TYPE', 'dchild["a"].fint')
Beispiel #5
0
    def test_simple_valid(self):
        ec = apilib.ErrorContext()
        m = SimpleValidationModel.from_json(None, ec, apilib.ValidationContext())
        self.assertIsNone(m)
        self.assertFalse(ec.has_errors())

        ec = apilib.ErrorContext()
        m = SimpleValidationModel.from_json({'fstring': None}, ec, apilib.ValidationContext())
        self.assertIsNotNone(m)
        self.assertEqual(None, m.fstring)
        self.assertFalse(ec.has_errors())

        ec = apilib.ErrorContext()
        m = SimpleValidationModel.from_json({'fstring': 'foo'}, ec, apilib.ValidationContext())
        self.assertIsNotNone(m)
        self.assertEqual('foo', m.fstring)
        self.assertFalse(ec.has_errors())
Beispiel #6
0
 def test_no_validation_if_no_context(self):
     ec = apilib.ErrorContext()
     m = SimpleValidationModel.from_json(
         {'fstring': 'EvIL'},
         ec,
     )
     self.assertIsNotNone(m)
     self.assertEqual('EvIL', m.fstring)
     self.assertFalse(ec.has_errors())
Beispiel #7
0
 def test_simple_invalid(self):
     ec = apilib.ErrorContext()
     m = SimpleValidationModel.from_json({'fstring': 'EvIL'}, ec, apilib.ValidationContext())
     self.assertIsNone(m)
     self.assertTrue(ec.has_errors())
     errors = ec.all_errors()
     self.assertEqual(1, len(errors))
     self.assertEqual('EVIL_VALUE',errors[0].code)
     self.assertEqual('fstring', errors[0].path)
     self.assertEqual('An evil value was found', errors[0].msg)
Beispiel #8
0
    def test_nonempty_elements_validator(self):
        NonemptyElements = apilib.NonemptyElements
        NONEMPTY_ITEM_REQUIRED = apilib.CommonErrorCodes.NONEMPTY_ITEM_REQUIRED

        self.run_validator_test_for_context(NonemptyElements(), None, None)
        self.run_validator_test_for_context(NonemptyElements(), [], None)
        self.run_validator_test_for_context(NonemptyElements(), ['a'], None)
        self.run_validator_test_for_context(NonemptyElements(), [1, 2, 3],
                                            None)
        self.run_validator_test_for_context(NonemptyElements(), [0], None)
        self.run_validator_test_for_context(NonemptyElements(), [False], None)
        self.run_validator_test_for_context(NonemptyElements(), [[None]], None)
        self.run_validator_test_for_context(NonemptyElements(), [{
            'a': None
        }], None)

        self.run_validator_test_for_context(NonemptyElements(), [None], None,
                                            NONEMPTY_ITEM_REQUIRED)
        self.run_validator_test_for_context(NonemptyElements(), [[]], None,
                                            NONEMPTY_ITEM_REQUIRED)
        self.run_validator_test_for_context(NonemptyElements(), [{}], None,
                                            NONEMPTY_ITEM_REQUIRED)
        self.run_validator_test_for_context(NonemptyElements(),
                                            [1, 2, 3, None], None,
                                            NONEMPTY_ITEM_REQUIRED)
        self.run_validator_test_for_context(NonemptyElements(), [1, 2, 3, []],
                                            None, NONEMPTY_ITEM_REQUIRED)
        self.run_validator_test_for_context(NonemptyElements(), [1, 2, 3, {}],
                                            None, NONEMPTY_ITEM_REQUIRED)

        ec = apilib.ErrorContext().extend(field='lint')
        value = NonemptyElements().validate([1, None], ec, None)
        self.assertIsNone(value)
        self.assertEqual(1, len(ec.all_errors()))
        self.assertEqual('lint[1]', ec.all_errors()[0].path)

        ec = apilib.ErrorContext().extend(field='llist')
        value = NonemptyElements().validate([[1], [2], [3], []], ec, None)
        self.assertIsNone(value)
        self.assertEqual(1, len(ec.all_errors()))
        self.assertEqual('llist[3]', ec.all_errors()[0].path)
Beispiel #9
0
    def test_valid(self):
        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdate='2016-04-03'), ec)
        self.assertFalse(ec.has_errors())
        self.assertEqual(datetime.date(2016, 4, 3), m.fdate)

        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdate='2016-4-5'), ec)
        self.assertFalse(ec.has_errors())
        self.assertEqual(datetime.date(2016, 4, 5), m.fdate)

        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdatetime='2016-04-12T15:37:37.739018+00:00'), ec)
        self.assertFalse(ec.has_errors())
        self.assertEqual(datetime.datetime(2016, 4, 12, 15, 37, 37, 739018, tzinfo=tz.tzutc()), m.fdatetime)

        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdatetime='2016-04-12T15:37:37+00:00'), ec)
        self.assertFalse(ec.has_errors())
        self.assertEqual(datetime.datetime(2016, 4, 12, 15, 37, 37, tzinfo=tz.tzutc()), m.fdatetime)

        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdatetime='2016-04-12T15:37:37-07:00'), ec)
        self.assertFalse(ec.has_errors())
        self.assertEqual(datetime.datetime(2016, 4, 12, 15, 37, 37, tzinfo=tz.tzoffset(None, -25200)), m.fdatetime)

        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdatetime='2023-12-12T15:37:37+06:00'), ec)
        self.assertFalse(ec.has_errors())
        self.assertEqual(datetime.datetime(2023, 12, 12, 15, 37, 37, tzinfo=tz.tzoffset(None, 21600)), m.fdatetime)

        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdatetime='2023-12-12T15:37:37'), ec)
        self.assertFalse(ec.has_errors())
        self.assertEqual(datetime.datetime(2023, 12, 12, 15, 37, 37, tzinfo=None), m.fdatetime)

        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdatetime='2023-12-12T15:37:37.123'), ec)
        self.assertFalse(ec.has_errors())
        self.assertEqual(datetime.datetime(2023, 12, 12, 15, 37, 37, 123000, tzinfo=None), m.fdatetime)

        ec = apilib.ErrorContext()
        m = self.Model.from_json(dict(fdatetime='2023-12-12T15:37:37.123Z'), ec)
        self.assertFalse(ec.has_errors())
        self.assertEqual(datetime.datetime(2023, 12, 12, 15, 37, 37, 123000, tzinfo=tz.tzutc()), m.fdatetime)
Beispiel #10
0
 def run_validator_test_for_context(self, validator, value, context,
                                    *error_codes):
     error_context = apilib.ErrorContext()
     validator.validate(value, error_context, context)
     errors = error_context.all_errors()
     if error_codes:
         self.assertTrue(errors)
         self.assertEqual(len(error_codes), len(errors))
         for error_code in error_codes:
             self.assertHasErrorCode(error_code, errors)
     else:
         self.assertFalse(errors)
     return errors
Beispiel #11
0
 def run_test(self,
              model_type,
              obj,
              service=None,
              method=None,
              operator=None):
     ec = apilib.ErrorContext()
     vc = apilib.ValidationContext(service=service,
                                   method=method,
                                   operator=operator)
     m = model_type.from_json(obj, ec, vc)
     sorted_errors = sorted(
         ec.all_errors(), key=lambda e:
         (e.code, e.path))  # So as not to rely on iteration order
     return m, sorted_errors
Beispiel #12
0
    def test_unique_validator(self):
        Unique = apilib.Unique
        DUPLICATE_VALUE = apilib.CommonErrorCodes.DUPLICATE_VALUE

        self.run_validator_test_for_context(Unique(), None, None)
        self.run_validator_test_for_context(Unique(), [], None)
        self.run_validator_test_for_context(Unique(), ['a'], None)
        self.run_validator_test_for_context(Unique(), [1], None)
        self.run_validator_test_for_context(Unique(), [None], None)
        self.run_validator_test_for_context(Unique(), [False], None)
        self.run_validator_test_for_context(Unique(), [True], None)
        self.run_validator_test_for_context(Unique(), [''], None)
        self.run_validator_test_for_context(Unique(), ['a', 'b'], None)
        self.run_validator_test_for_context(Unique(), ['b', 'a', 'c'], None)
        self.run_validator_test_for_context(Unique(), [3, 2, 1], None)
        self.run_validator_test_for_context(Unique(), [False, True], None)

        errors = self.validate(Unique(), [2, 1, 2],
                               apilib.ErrorContext().extend(field='fint'))
        self.assertEqual(1, len(errors))
        self.assertEqual(DUPLICATE_VALUE, errors[0].code)
        self.assertEqual('fint[2]', errors[0].path)

        errors = self.validate(Unique(), [9, 8, 7, 6, 7, 8, 9],
                               apilib.ErrorContext().extend(field='fint'))
        self.assertEqual(3, len(errors))
        self.assertEqual(DUPLICATE_VALUE, errors[0].code)
        self.assertEqual('fint[4]', errors[0].path)
        self.assertEqual(DUPLICATE_VALUE, errors[1].code)
        self.assertEqual('fint[5]', errors[1].path)
        self.assertEqual(DUPLICATE_VALUE, errors[2].code)
        self.assertEqual('fint[6]', errors[2].path)

        errors = self.validate(Unique(), ['a', 'a', 'b', 'a'],
                               apilib.ErrorContext().extend(field='fstring'))
        self.assertEqual(2, len(errors))
        self.assertEqual(DUPLICATE_VALUE, errors[0].code)
        self.assertEqual('fstring[1]', errors[0].path)
        self.assertEqual(DUPLICATE_VALUE, errors[1].code)
        self.assertEqual('fstring[3]', errors[1].path)

        errors = self.validate(Unique(), ['foo', 'a', '', ''],
                               apilib.ErrorContext().extend(field='fstring'))
        self.assertEqual(1, len(errors))
        self.assertEqual(DUPLICATE_VALUE, errors[0].code)
        self.assertEqual('fstring[3]', errors[0].path)

        errors = self.validate(Unique(), ['foo', 'a', None, None],
                               apilib.ErrorContext().extend(field='fstring'))
        self.assertEqual(1, len(errors))
        self.assertEqual(DUPLICATE_VALUE, errors[0].code)
        self.assertEqual('fstring[3]', errors[0].path)

        value = Unique().validate([2, 1, 2], apilib.ErrorContext(), None)
        self.assertIsNone(value)
Beispiel #13
0
    def test_required_validator(self):
        Required = apilib.Required
        REQUIRED = apilib.CommonErrorCodes.REQUIRED

        self.run_validator_test(Required(), None, REQUIRED)
        self.run_validator_test(Required(), '', REQUIRED)
        self.run_validator_test(Required(), u'', REQUIRED)
        self.run_validator_test(Required(), [], REQUIRED)
        self.run_validator_test(Required(), {}, REQUIRED)
        self.run_validator_test(Required(), 'abc')
        self.run_validator_test(Required(), 123)
        self.run_validator_test(Required(), 0)
        self.run_validator_test(Required(), 0.0)
        self.run_validator_test(Required(), u'abc')
        self.run_validator_test(Required(), ['abc'])
        self.run_validator_test(Required(), [1, 2, 3])
        self.run_validator_test(Required(), [None])

        self.run_validator_test(Required(True), None, REQUIRED)
        self.run_validator_test(Required(True), '', REQUIRED)
        self.run_validator_test(Required(True), u'', REQUIRED)
        self.run_validator_test(Required(True), [], REQUIRED)
        self.run_validator_test(Required(True), {}, REQUIRED)
        self.run_validator_test(Required(True), 'abc')
        self.run_validator_test(Required(True), 123)
        self.run_validator_test(Required(True), 0)
        self.run_validator_test(Required(True), 0.0)
        self.run_validator_test(Required(True), u'abc')
        self.run_validator_test(Required(True), ['abc'])
        self.run_validator_test(Required(True), [1, 2, 3])
        self.run_validator_test(Required(True), [None])

        self.run_validator_test_for_method(Required(['insert']), None,
                                           'insert', REQUIRED)
        self.run_validator_test_for_method(Required(['insert']), '', 'insert',
                                           REQUIRED)
        self.run_validator_test_for_method(Required(['insert']), [], 'insert',
                                           REQUIRED)
        self.run_validator_test_for_method(Required(['insert']), {}, 'insert',
                                           REQUIRED)
        self.run_validator_test_for_method(Required(['insert']), None,
                                           'update')
        self.run_validator_test_for_method(Required(['insert']), [], 'update')
        self.run_validator_test_for_method(Required(['insert']), {}, 'update')
        self.run_validator_test_for_method(Required(['insert']), 123, 'insert')
        self.run_validator_test_for_method(Required(['insert']), 'abc',
                                           'insert')
        self.run_validator_test_for_method(Required(['insert']), [1], 'insert')

        self.run_validator_test_for_method(Required(['get', 'insert']), None,
                                           'insert', REQUIRED)
        self.run_validator_test_for_method(Required(['get', 'insert']), '',
                                           'insert', REQUIRED)
        self.run_validator_test_for_method(Required(['get', 'insert']), [],
                                           'insert', REQUIRED)
        self.run_validator_test_for_method(Required(['get', 'insert']), {},
                                           'insert', REQUIRED)
        self.run_validator_test_for_method(Required(['get', 'insert']), None,
                                           'update')
        self.run_validator_test_for_method(Required(['get', 'insert']), [],
                                           'update')
        self.run_validator_test_for_method(Required(['get', 'insert']), {},
                                           'update')
        self.run_validator_test_for_method(Required(['get', 'insert']), 123,
                                           'insert')
        self.run_validator_test_for_method(Required(['get', 'insert']), 'abc',
                                           'insert')
        self.run_validator_test_for_method(Required(['get', 'insert']), [1],
                                           'insert')

        self.run_validator_test_for_method(Required('insert'), None, 'insert',
                                           REQUIRED)
        self.run_validator_test_for_method(Required('insert'), '', 'insert',
                                           REQUIRED)
        self.run_validator_test_for_method(Required('insert'), [], 'insert',
                                           REQUIRED)
        self.run_validator_test_for_method(Required('insert'), {}, 'insert',
                                           REQUIRED)
        self.run_validator_test_for_method(Required('insert'), None, 'update')
        self.run_validator_test_for_method(Required('insert'), [], 'update')
        self.run_validator_test_for_method(Required('insert'), {}, 'update')
        self.run_validator_test_for_method(Required('insert'), 123, 'insert')
        self.run_validator_test_for_method(Required('insert'), 'abc', 'insert')
        self.run_validator_test_for_method(Required('insert'), [1], 'insert')

        VC = apilib.ValidationContext
        self.run_validator_test_for_context(
            Required('insert/ADD'), None, VC(method='insert', operator='ADD'),
            REQUIRED)
        self.run_validator_test_for_context(
            Required('insert/ADD'), None, VC(method='insert',
                                             operator='UPDATE'))
        self.run_validator_test_for_context(Required('insert/ADD'), None,
                                            VC(method='insert', operator=None))
        self.run_validator_test_for_context(
            Required('fooservice.insert/ADD'), None,
            VC(service='fooservice', method='insert', operator='ADD'),
            REQUIRED)
        self.run_validator_test_for_context(
            Required('fooservice.insert/ADD'), None,
            VC(service=None, method='insert', operator='ADD'))
        self.run_validator_test_for_context(
            Required('fooservice.insert'), None,
            VC(service='fooservice', method='insert', operator='ADD'),
            REQUIRED)
        self.run_validator_test_for_context(
            Required('fooservice.insert'), None,
            VC(service='fooservice', method='insert'), REQUIRED)

        ec = apilib.ErrorContext().extend(field='fstring')
        Required().validate(None, ec, VC())
        self.assertEqual(1, len(ec.all_errors()))
        self.assertEqual('fstring', ec.all_errors()[0].path)
Beispiel #14
0
    def test_range_validator(self):
        Range = apilib.Range
        VALUE_NOT_IN_RANGE = apilib.CommonErrorCodes.VALUE_NOT_IN_RANGE

        self.run_validator_test_for_context(Range(min_=1), 1, None)
        self.run_validator_test_for_context(Range(min_=1), 2, None)
        self.run_validator_test_for_context(Range(min_=1), 1.1, None)
        self.run_validator_test_for_context(Range(min_=1), 1e6, None)
        self.run_validator_test_for_context(Range(min_=-0.5), -0.1, None)
        self.run_validator_test_for_context(Range(min_=1, max_=3), 1, None)
        self.run_validator_test_for_context(Range(min_=1, max_=3), 2, None)
        self.run_validator_test_for_context(Range(min_=1, max_=3), 2.9, None)
        self.run_validator_test_for_context(Range(min_=1, max_=3), 3, None)
        self.run_validator_test_for_context(Range(max_=3), 1, None)
        self.run_validator_test_for_context(Range(max_=3), 2, None)
        self.run_validator_test_for_context(Range(max_=3), 2.9, None)
        self.run_validator_test_for_context(Range(max_=3), 3, None)
        self.run_validator_test_for_context(Range(max_=-1), -2, None)
        self.run_validator_test_for_context(Range(min_='a'), 'b', None)
        self.run_validator_test_for_context(Range(min_='a', max_='c'), 'b',
                                            None)

        self.run_validator_test_for_context(Range(min_=1), 0, None,
                                            VALUE_NOT_IN_RANGE)
        self.run_validator_test_for_context(Range(min_=1), 0.9, None,
                                            VALUE_NOT_IN_RANGE)
        self.run_validator_test_for_context(Range(min_=1), -1, None,
                                            VALUE_NOT_IN_RANGE)
        self.run_validator_test_for_context(Range(min_=1), -1e6, None,
                                            VALUE_NOT_IN_RANGE)
        self.run_validator_test_for_context(Range(min_=-5), -10.5, None,
                                            VALUE_NOT_IN_RANGE)
        self.run_validator_test_for_context(Range(min_=-5), -5.0000001, None,
                                            VALUE_NOT_IN_RANGE)
        self.run_validator_test_for_context(Range(min_=1, max_=3), 0.9, None,
                                            VALUE_NOT_IN_RANGE)
        self.run_validator_test_for_context(Range(min_=1, max_=3), 3.1, None,
                                            VALUE_NOT_IN_RANGE)
        self.run_validator_test_for_context(Range(min_=1, max_=3), -10, None,
                                            VALUE_NOT_IN_RANGE)
        self.run_validator_test_for_context(Range(min_=1, max_=3), 0, None,
                                            VALUE_NOT_IN_RANGE)
        self.run_validator_test_for_context(Range(max_=3), 3.1, None,
                                            VALUE_NOT_IN_RANGE)
        self.run_validator_test_for_context(Range(max_=3), 4, None,
                                            VALUE_NOT_IN_RANGE)
        self.run_validator_test_for_context(Range(max_=3), 9e5, None,
                                            VALUE_NOT_IN_RANGE)
        self.run_validator_test_for_context(Range(min_='a', max_='c'), 'd',
                                            None, VALUE_NOT_IN_RANGE)

        ec = apilib.ErrorContext().extend(field='foo')
        value = Range(min_=1).validate(0, ec, None)
        self.assertIsNone(value)

        errors = self.validate(Range(min_=1), 0,
                               apilib.ErrorContext().extend(field='foo'))
        self.assertEqual(1, len(errors))
        self.assertEqual('foo', errors[0].path)
        self.assertEqual('Value 0 is less than 1', errors[0].msg)

        errors = self.validate(Range(max_=10), 15.5,
                               apilib.ErrorContext().extend(field='foo'))
        self.assertEqual(1, len(errors))
        self.assertEqual('foo', errors[0].path)
        self.assertEqual('Value 15.5 is greater than 10', errors[0].msg)

        errors = self.validate(Range(min_=5, max_=10), 4,
                               apilib.ErrorContext().extend(field='foo'))
        self.assertEqual(1, len(errors))
        self.assertEqual('foo', errors[0].path)
        self.assertEqual('Value 4 is less than 5', errors[0].msg)

        errors = self.validate(Range(min_=5, max_=10), 11,
                               apilib.ErrorContext().extend(field='foo'))
        self.assertEqual(1, len(errors))
        self.assertEqual('foo', errors[0].path)
        self.assertEqual('Value 11 is greater than 10', errors[0].msg)
Beispiel #15
0
    def test_readonly_validator(self):
        Readonly = apilib.Readonly

        self.assertEqual(
            None,
            Readonly(True).validate('foo', None, VC(method='insert')))
        self.assertEqual(
            None,
            Readonly('insert').validate('foo', None, VC(method='insert')))
        self.assertEqual(
            None,
            Readonly(['insert']).validate('foo', None, VC(method='insert')))
        self.assertEqual(
            None,
            Readonly(['update', 'insert']).validate('foo', None,
                                                    VC(method='insert')))
        self.assertEqual(
            None,
            Readonly(['insert'
                      ]).validate('foo', None,
                                  VC(service='service', method='insert')))
        self.assertEqual(
            None,
            Readonly(['insert']).validate(
                'foo', None,
                VC(service='service', method='insert', operator='ADD')))
        self.assertEqual(
            None,
            Readonly(['insert/ADD']).validate(
                'foo', None,
                VC(service='service', method='insert', operator='ADD')))
        self.assertEqual(
            None,
            Readonly(['service.insert/ADD']).validate(
                'foo', None,
                VC(service='service', method='insert', operator='ADD')))

        self.assertEqual(
            'foo',
            Readonly('insert').validate('foo', None, VC(method='update')))
        self.assertEqual(
            'foo',
            Readonly('insert').validate('foo', None,
                                        VC(service='service',
                                           method='update')))
        self.assertEqual(
            'foo',
            Readonly('insert').validate(
                'foo', None,
                VC(service='service', method='update', operator='ADD')))
        self.assertEqual(
            'foo',
            Readonly(['service.insert/ADD']).validate(
                'foo', None,
                VC(service='service', method='insert', operator='UPDATE')))
        self.assertEqual(
            'foo',
            Readonly(['service.insert/ADD']).validate(
                'foo', None, VC(service=None, method='insert',
                                operator='ADD')))

        ec = apilib.ErrorContext().extend(field='fstring')
        apilib.Readonly().validate('foo', ec, VC())
        self.assertFalse(ec.has_errors())