mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-27 03:54:01 +03:00
Add separate test for failed custom validation
This commit is contained in:
parent
2250ab6418
commit
f0071dbccd
|
@ -162,7 +162,6 @@ class BasicTests(TestCase):
|
||||||
"""
|
"""
|
||||||
Attempting to update fields set as read_only should have no effect.
|
Attempting to update fields set as read_only should have no effect.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
serializer = PersonSerializer(self.person, data={'name': 'dwight', 'age': 99})
|
serializer = PersonSerializer(self.person, data={'name': 'dwight', 'age': 99})
|
||||||
self.assertEquals(serializer.is_valid(), True)
|
self.assertEquals(serializer.is_valid(), True)
|
||||||
instance = serializer.save()
|
instance = serializer.save()
|
||||||
|
@ -183,8 +182,7 @@ class ValidationTests(TestCase):
|
||||||
'content': 'x' * 1001,
|
'content': 'x' * 1001,
|
||||||
'created': datetime.datetime(2012, 1, 1)
|
'created': datetime.datetime(2012, 1, 1)
|
||||||
}
|
}
|
||||||
self.actionitem = ActionItem(title='Some to do item',
|
self.actionitem = ActionItem(title='Some to do item',)
|
||||||
)
|
|
||||||
|
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
serializer = CommentSerializer(data=self.data)
|
serializer = CommentSerializer(data=self.data)
|
||||||
|
@ -216,39 +214,6 @@ class ValidationTests(TestCase):
|
||||||
self.assertEquals(serializer.is_valid(), True)
|
self.assertEquals(serializer.is_valid(), True)
|
||||||
self.assertEquals(serializer.errors, {})
|
self.assertEquals(serializer.errors, {})
|
||||||
|
|
||||||
def test_field_validation(self):
|
|
||||||
|
|
||||||
class CommentSerializerWithFieldValidator(CommentSerializer):
|
|
||||||
|
|
||||||
def validate_content(self, attrs, source):
|
|
||||||
value = attrs[source]
|
|
||||||
if "test" not in value:
|
|
||||||
raise serializers.ValidationError("Test not in value")
|
|
||||||
return attrs
|
|
||||||
|
|
||||||
data = {
|
|
||||||
'email': 'tom@example.com',
|
|
||||||
'content': 'A test comment',
|
|
||||||
'created': datetime.datetime(2012, 1, 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
serializer = CommentSerializerWithFieldValidator(data=data)
|
|
||||||
self.assertTrue(serializer.is_valid())
|
|
||||||
|
|
||||||
data['content'] = 'This should not validate'
|
|
||||||
|
|
||||||
serializer = CommentSerializerWithFieldValidator(data=data)
|
|
||||||
self.assertFalse(serializer.is_valid())
|
|
||||||
self.assertEquals(serializer.errors, {'content': [u'Test not in value']})
|
|
||||||
|
|
||||||
incomplete_data = {
|
|
||||||
'email': 'tom@example.com',
|
|
||||||
'created': datetime.datetime(2012, 1, 1)
|
|
||||||
}
|
|
||||||
serializer = CommentSerializerWithFieldValidator(data=incomplete_data)
|
|
||||||
self.assertFalse(serializer.is_valid())
|
|
||||||
self.assertEquals(serializer.errors, {'content': [u'This field is required.']})
|
|
||||||
|
|
||||||
def test_bad_type_data_is_false(self):
|
def test_bad_type_data_is_false(self):
|
||||||
"""
|
"""
|
||||||
Data of the wrong type is not valid.
|
Data of the wrong type is not valid.
|
||||||
|
@ -318,12 +283,69 @@ class ValidationTests(TestCase):
|
||||||
self.assertEquals(serializer.errors, {'info': [u'Ensure this value has at most 12 characters (it has 13).']})
|
self.assertEquals(serializer.errors, {'info': [u'Ensure this value has at most 12 characters (it has 13).']})
|
||||||
|
|
||||||
|
|
||||||
|
class CustomValidationTests(TestCase):
|
||||||
|
class CommentSerializerWithFieldValidator(CommentSerializer):
|
||||||
|
|
||||||
|
def validate_email(self, attrs, source):
|
||||||
|
value = attrs[source]
|
||||||
|
|
||||||
|
return attrs
|
||||||
|
|
||||||
|
def validate_content(self, attrs, source):
|
||||||
|
value = attrs[source]
|
||||||
|
if "test" not in value:
|
||||||
|
raise serializers.ValidationError("Test not in value")
|
||||||
|
return attrs
|
||||||
|
|
||||||
|
def test_field_validation(self):
|
||||||
|
data = {
|
||||||
|
'email': 'tom@example.com',
|
||||||
|
'content': 'A test comment',
|
||||||
|
'created': datetime.datetime(2012, 1, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
serializer = self.CommentSerializerWithFieldValidator(data=data)
|
||||||
|
self.assertTrue(serializer.is_valid())
|
||||||
|
|
||||||
|
data['content'] = 'This should not validate'
|
||||||
|
|
||||||
|
serializer = self.CommentSerializerWithFieldValidator(data=data)
|
||||||
|
self.assertFalse(serializer.is_valid())
|
||||||
|
self.assertEquals(serializer.errors, {'content': [u'Test not in value']})
|
||||||
|
|
||||||
|
def test_missing_data(self):
|
||||||
|
"""
|
||||||
|
Make sure that validate_content isn't called if the field is missing
|
||||||
|
"""
|
||||||
|
incomplete_data = {
|
||||||
|
'email': 'tom@example.com',
|
||||||
|
'created': datetime.datetime(2012, 1, 1)
|
||||||
|
}
|
||||||
|
serializer = self.CommentSerializerWithFieldValidator(data=incomplete_data)
|
||||||
|
self.assertFalse(serializer.is_valid())
|
||||||
|
self.assertEquals(serializer.errors, {'content': [u'This field is required.']})
|
||||||
|
|
||||||
|
def test_wrong_data(self):
|
||||||
|
"""
|
||||||
|
Make sure that validate_content isn't called if the field input is wrong
|
||||||
|
"""
|
||||||
|
wrong_data = {
|
||||||
|
'email': 'not an email',
|
||||||
|
'content': 'A test comment',
|
||||||
|
'created': datetime.datetime(2012, 1, 1)
|
||||||
|
}
|
||||||
|
serializer = self.CommentSerializerWithFieldValidator(data=wrong_data)
|
||||||
|
self.assertFalse(serializer.is_valid())
|
||||||
|
self.assertEquals(serializer.errors, {'email': [u'Enter a valid e-mail address.']})
|
||||||
|
|
||||||
|
|
||||||
class PositiveIntegerAsChoiceTests(TestCase):
|
class PositiveIntegerAsChoiceTests(TestCase):
|
||||||
def test_positive_integer_in_json_is_correctly_parsed(self):
|
def test_positive_integer_in_json_is_correctly_parsed(self):
|
||||||
data = {'some_integer':1}
|
data = {'some_integer': 1}
|
||||||
serializer = PositiveIntegerAsChoiceSerializer(data=data)
|
serializer = PositiveIntegerAsChoiceSerializer(data=data)
|
||||||
self.assertEquals(serializer.is_valid(), True)
|
self.assertEquals(serializer.is_valid(), True)
|
||||||
|
|
||||||
|
|
||||||
class ModelValidationTests(TestCase):
|
class ModelValidationTests(TestCase):
|
||||||
def test_validate_unique(self):
|
def test_validate_unique(self):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue
Block a user