test_assorted.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. # -*- coding: utf-8 -*-
  2. from decimal import Decimal
  3. from pytest import mark
  4. from cerberus import TypeDefinition, Validator
  5. from cerberus.tests import assert_fail, assert_success
  6. from cerberus.utils import validator_factory
  7. from cerberus.validator import BareValidator
  8. def test_clear_cache(validator):
  9. assert len(validator._valid_schemas) > 0
  10. validator.clear_caches()
  11. assert len(validator._valid_schemas) == 0
  12. def test_docstring(validator):
  13. assert validator.__doc__
  14. # Test that testing with the sample schema works as expected
  15. # as there might be rules with side-effects in it
  16. @mark.parametrize('test,document', ((assert_fail, {'an_integer': 60}),
  17. (assert_success, {'an_integer': 110})))
  18. def test_that_test_fails(test, document):
  19. try:
  20. test(document)
  21. except AssertionError:
  22. pass
  23. else:
  24. raise AssertionError("test didn't fail")
  25. def test_dynamic_types():
  26. decimal_type = TypeDefinition('decimal', (Decimal,), ())
  27. document = {'measurement': Decimal(0)}
  28. schema = {'measurement': {'type': 'decimal'}}
  29. validator = Validator()
  30. validator.types_mapping['decimal'] = decimal_type
  31. assert_success(document, schema, validator)
  32. class MyValidator(Validator):
  33. types_mapping = Validator.types_mapping.copy()
  34. types_mapping['decimal'] = decimal_type
  35. validator = MyValidator()
  36. assert_success(document, schema, validator)
  37. def test_mro():
  38. assert Validator.__mro__ == (Validator, BareValidator, object), \
  39. Validator.__mro__
  40. def test_mixin_init():
  41. class Mixin(object):
  42. def __init__(self, *args, **kwargs):
  43. kwargs['test'] = True
  44. super(Mixin, self).__init__(*args, **kwargs)
  45. MyValidator = validator_factory('MyValidator', Mixin)
  46. validator = MyValidator()
  47. assert validator._config['test']
  48. def test_sub_init():
  49. class MyValidator(Validator):
  50. def __init__(self, *args, **kwargs):
  51. kwargs['test'] = True
  52. super(MyValidator, self).__init__(*args, **kwargs)
  53. validator = MyValidator()
  54. assert validator._config['test']