From 66605acaf02d46eb899f495137afb4f9ff127ff0 Mon Sep 17 00:00:00 2001 From: Ian Dash Date: Thu, 7 Mar 2013 17:29:25 +0000 Subject: Errors during deserializing lists now return a list of tuples with index of bad item in data plus usual errors dict --- rest_framework/tests/serializer.py | 45 +++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'rest_framework/tests/serializer.py') diff --git a/rest_framework/tests/serializer.py b/rest_framework/tests/serializer.py index 51065017..33910936 100644 --- a/rest_framework/tests/serializer.py +++ b/rest_framework/tests/serializer.py @@ -268,7 +268,16 @@ class ValidationTests(TestCase): data = ['i am', 'a', 'list'] serializer = CommentSerializer(self.comment, data=data, many=True) self.assertEqual(serializer.is_valid(), False) - self.assertEqual(serializer.errors, {'non_field_errors': ['Invalid data']}) + self.assertTrue(isinstance(serializer.errors, list)) + + self.assertEqual( + serializer.errors, + [ + (0, {'non_field_errors': ['Invalid data']}), + (1, {'non_field_errors': ['Invalid data']}), + (2, {'non_field_errors': ['Invalid data']}) + ] + ) data = 'and i am a string' serializer = CommentSerializer(self.comment, data=data) @@ -1072,3 +1081,37 @@ class NestedSerializerContextTests(TestCase): # This will raise RuntimeError if context doesn't get passed correctly to the nested Serializers AlbumCollectionSerializer(album_collection, context={'context_item': 'album context'}).data + + +class DeserializeListTestCase(TestCase): + + def setUp(self): + self.data = { + 'email': 'nobody@nowhere.com', + 'content': 'This is some test content', + 'created': datetime.datetime(2013, 3, 7), + } + + def test_no_errors(self): + data = [self.data.copy() for x in range(0, 3)] + serializer = CommentSerializer(data=data) + self.assertTrue(serializer.is_valid()) + self.assertTrue(isinstance(serializer.object, list)) + self.assertTrue( + all((isinstance(item, Comment) for item in serializer.object)) + ) + + def test_errors_return_as_list(self): + invalid_item = self.data.copy() + invalid_item['email'] = '' + data = [self.data.copy(), invalid_item, self.data.copy()] + + serializer = CommentSerializer(data=data) + self.assertFalse(serializer.is_valid()) + self.assertTrue(isinstance(serializer.errors, list)) + self.assertEqual(1, len(serializer.errors)) + expected = (1, {'email': ['This field is required.']}) + self.assertEqual( + serializer.errors[0], + expected + ) -- cgit v1.2.3 From 68683b2ea2907f367fdff60de91656504a242a14 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 8 Mar 2013 22:19:09 +0000 Subject: Tweak implementation, and use FormSet style errors --- rest_framework/tests/serializer.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) (limited to 'rest_framework/tests/serializer.py') diff --git a/rest_framework/tests/serializer.py b/rest_framework/tests/serializer.py index 33910936..394af827 100644 --- a/rest_framework/tests/serializer.py +++ b/rest_framework/tests/serializer.py @@ -273,9 +273,9 @@ class ValidationTests(TestCase): self.assertEqual( serializer.errors, [ - (0, {'non_field_errors': ['Invalid data']}), - (1, {'non_field_errors': ['Invalid data']}), - (2, {'non_field_errors': ['Invalid data']}) + {'non_field_errors': ['Invalid data']}, + {'non_field_errors': ['Invalid data']}, + {'non_field_errors': ['Invalid data']} ] ) @@ -1108,10 +1108,5 @@ class DeserializeListTestCase(TestCase): serializer = CommentSerializer(data=data) self.assertFalse(serializer.is_valid()) - self.assertTrue(isinstance(serializer.errors, list)) - self.assertEqual(1, len(serializer.errors)) - expected = (1, {'email': ['This field is required.']}) - self.assertEqual( - serializer.errors[0], - expected - ) + expected = [{}, {'email': [u'This field is required.']}, {}] + self.assertEqual(serializer.errors, expected) -- cgit v1.2.3 From 28ae26466e1b1493feeba19480c6eb148d603330 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 8 Mar 2013 22:43:46 +0000 Subject: Py3k fixes. --- rest_framework/tests/serializer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'rest_framework/tests/serializer.py') diff --git a/rest_framework/tests/serializer.py b/rest_framework/tests/serializer.py index 394af827..beb372c2 100644 --- a/rest_framework/tests/serializer.py +++ b/rest_framework/tests/serializer.py @@ -1108,5 +1108,5 @@ class DeserializeListTestCase(TestCase): serializer = CommentSerializer(data=data) self.assertFalse(serializer.is_valid()) - expected = [{}, {'email': [u'This field is required.']}, {}] + expected = [{}, {'email': ['This field is required.']}, {}] self.assertEqual(serializer.errors, expected) -- cgit v1.2.3