Skip to content

Commit

Permalink
Adding validator tests
Browse files Browse the repository at this point in the history
  • Loading branch information
adamcharnock committed Sep 2, 2015
1 parent 4284cba commit de119fc
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 8 deletions.
48 changes: 48 additions & 0 deletions repose/tests/test_validators.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
from booby.errors import ValidationError
from repose.tests import TestCase


class RangeValdiatorTestCase(TestCase):

def test_min_max(self):
from repose.validators import Range
v = Range(min=10, max=20)
v.validate(None)
v.validate(10)
v.validate(20)
self.assertRaises(ValidationError, v.validate, -1)
self.assertRaises(ValidationError, v.validate, 21)
self.assertRaises(ValidationError, v.validate, 'abc')

def test_min(self):
from repose.validators import Range
v = Range(min=10)
v.validate(None)
v.validate(10)
v.validate(20)
v.validate(10000)
self.assertRaises(ValidationError, v.validate, -1)
self.assertRaises(ValidationError, v.validate, 'abc')

def test_max(self):
from repose.validators import Range
v = Range(max=20)
v.validate(None)
v.validate(-1)
v.validate(10)
v.validate(20)
self.assertRaises(ValidationError, v.validate, 21)
self.assertRaises(ValidationError, v.validate, 'abc')


class DictionaryValidatorTestCase(TestCase):

def test_validate(self):
from repose.validators import Dictionary
v = Dictionary()
v.validate(None)
v.validate({})
v.validate({'a': 123})
self.assertRaises(ValidationError, v.validate, [])
self.assertRaises(ValidationError, v.validate, 213)
self.assertRaises(ValidationError, v.validate, 'abc')
28 changes: 20 additions & 8 deletions repose/validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,36 @@
class Range(Integer):
"""This validator forces fields values to be within a given range (inclusive)"""

def __init__(self, min, max):
def __init__(self, min=None, max=None):
self.min = min
self.max = max

@nullable
def validate(self, value):
if self.max is not None and value > self.max:
raise errors.ValidationError(
'Value {} exceeds maximum of {}'.format(value, self.max))
if self.max is not None:
try:
invalid = value > self.max
except TypeError:
raise errors.ValidationError('Invalid input data')

if self.min is not None and value < self.min:
raise errors.ValidationError(
'Value {} is below the minimum of {}'.format(value, self.min))
if invalid:
raise errors.ValidationError(
'Value {} exceeds maximum of {}'.format(value, self.max))

if self.min is not None:
try:
invalid = value < self.min
except TypeError:
raise errors.ValidationError('Invalid input data')

if invalid:
raise errors.ValidationError(
'Value {} is below the minimum of {}'.format(value, self.min))


class Dictionary(Validator):

@nullable
def validate(self, value):
if isinstance(value, dict):
if not isinstance(value, dict):
raise errors.ValidationError('value must be a dictionary')

0 comments on commit de119fc

Please sign in to comment.