diff options
| author | Ben Konrath | 2012-11-06 03:22:25 +0100 | 
|---|---|---|
| committer | Ben Konrath | 2012-11-06 03:22:25 +0100 | 
| commit | 09f39bd23b3c688c89551845d665395e1aabbfab (patch) | |
| tree | 67de86ddb90c4e91e66ee276252e9086064231da /rest_framework/tests | |
| parent | 01564fb1e5727134d2ceb4b3ab79e013af1b4807 (diff) | |
| parent | 455a8cedcf5aa1f265ae95d4f3bff359d51910c0 (diff) | |
| download | django-rest-framework-09f39bd23b3c688c89551845d665395e1aabbfab.tar.bz2 | |
Merge branch 'master' into restframework2-filter
Diffstat (limited to 'rest_framework/tests')
| -rw-r--r-- | rest_framework/tests/genericrelations.py | 2 | ||||
| -rw-r--r-- | rest_framework/tests/hyperlinkedserializers.py | 59 | ||||
| -rw-r--r-- | rest_framework/tests/models.py | 16 | ||||
| -rw-r--r-- | rest_framework/tests/pagination.py | 4 | ||||
| -rw-r--r-- | rest_framework/tests/pk_relations.py | 187 | ||||
| -rw-r--r-- | rest_framework/tests/renderers.py | 89 | ||||
| -rw-r--r-- | rest_framework/tests/serializer.py | 79 | 
7 files changed, 398 insertions, 38 deletions
diff --git a/rest_framework/tests/genericrelations.py b/rest_framework/tests/genericrelations.py index 1d7e33bc..bc7378e1 100644 --- a/rest_framework/tests/genericrelations.py +++ b/rest_framework/tests/genericrelations.py @@ -25,7 +25,7 @@ class TestGenericRelations(TestCase):                  model = Bookmark                  exclude = ('id',) -        serializer = BookmarkSerializer(instance=self.bookmark) +        serializer = BookmarkSerializer(self.bookmark)          expected = {              'tags': [u'django', u'python'],              'url': u'https://www.djangoproject.com/' diff --git a/rest_framework/tests/hyperlinkedserializers.py b/rest_framework/tests/hyperlinkedserializers.py index 92c3691e..f71e2e28 100644 --- a/rest_framework/tests/hyperlinkedserializers.py +++ b/rest_framework/tests/hyperlinkedserializers.py @@ -2,17 +2,26 @@ from django.conf.urls.defaults import patterns, url  from django.test import TestCase  from django.test.client import RequestFactory  from rest_framework import generics, status, serializers -from rest_framework.tests.models import Anchor, BasicModel, ManyToManyModel, BlogPost, BlogPostComment +from rest_framework.tests.models import Anchor, BasicModel, ManyToManyModel, BlogPost, BlogPostComment, Album, Photo  factory = RequestFactory() -class BlogPostCommentSerializer(serializers.Serializer): +class BlogPostCommentSerializer(serializers.ModelSerializer):      text = serializers.CharField() -    blog_post_url = serializers.HyperlinkedRelatedField(source='blog_post', view_name='blogpost-detail', queryset=BlogPost.objects.all()) +    blog_post_url = serializers.HyperlinkedRelatedField(source='blog_post', view_name='blogpost-detail') + +    class Meta: +        model = BlogPostComment +        fields = ('text', 'blog_post_url') + + +class PhotoSerializer(serializers.Serializer): +    description = serializers.CharField() +    album_url = serializers.HyperlinkedRelatedField(source='album', view_name='album-detail', queryset=Album.objects.all(), slug_field='title', slug_url_kwarg='title')      def restore_object(self, attrs, instance=None): -        return BlogPostComment(**attrs) +        return Photo(**attrs)  class BasicList(generics.ListCreateAPIView): @@ -42,12 +51,22 @@ class ManyToManyDetail(generics.RetrieveAPIView):  class BlogPostCommentListCreate(generics.ListCreateAPIView):      model = BlogPostComment -    model_serializer_class = BlogPostCommentSerializer +    serializer_class = BlogPostCommentSerializer  class BlogPostDetail(generics.RetrieveAPIView):      model = BlogPost + +class PhotoListCreate(generics.ListCreateAPIView): +    model = Photo +    model_serializer_class = PhotoSerializer + + +class AlbumDetail(generics.RetrieveAPIView): +    model = Album + +  urlpatterns = patterns('',      url(r'^basic/$', BasicList.as_view(), name='basicmodel-list'),      url(r'^basic/(?P<pk>\d+)/$', BasicDetail.as_view(), name='basicmodel-detail'), @@ -55,7 +74,9 @@ urlpatterns = patterns('',      url(r'^manytomany/$', ManyToManyList.as_view(), name='manytomanymodel-list'),      url(r'^manytomany/(?P<pk>\d+)/$', ManyToManyDetail.as_view(), name='manytomanymodel-detail'),      url(r'^posts/(?P<pk>\d+)/$', BlogPostDetail.as_view(), name='blogpost-detail'), -    url(r'^comments/$', BlogPostCommentListCreate.as_view(), name='blogpostcomment-list') +    url(r'^comments/$', BlogPostCommentListCreate.as_view(), name='blogpostcomment-list'), +    url(r'^albums/(?P<title>\w[\w-]*)/$', AlbumDetail.as_view(), name='album-detail'), +    url(r'^photos/$', PhotoListCreate.as_view(), name='photo-list')  ) @@ -163,6 +184,30 @@ class TestCreateWithForeignKeys(TestCase):          request = factory.post('/comments/', data=data)          response = self.create_view(request).render() -        self.assertEqual(response.status_code, 201) +        self.assertEqual(response.status_code, status.HTTP_201_CREATED)          self.assertEqual(self.post.blogpostcomment_set.count(), 1)          self.assertEqual(self.post.blogpostcomment_set.all()[0].text, 'A test comment') + + +class TestCreateWithForeignKeysAndCustomSlug(TestCase): +    urls = 'rest_framework.tests.hyperlinkedserializers' + +    def setUp(self): +        """ +        Create an Album +        """ +        self.post = Album.objects.create(title='test-album') +        self.list_create_view = PhotoListCreate.as_view() + +    def test_create_photo(self): + +        data = { +            'description': 'A test photo', +            'album_url': 'http://testserver/albums/test-album/' +        } + +        request = factory.post('/photos/', data=data) +        response = self.list_create_view(request).render() +        self.assertEqual(response.status_code, status.HTTP_201_CREATED) +        self.assertEqual(self.post.photo_set.count(), 1) +        self.assertEqual(self.post.photo_set.all()[0].description, 'A test photo') diff --git a/rest_framework/tests/models.py b/rest_framework/tests/models.py index 9efedbc4..a2aba5be 100644 --- a/rest_framework/tests/models.py +++ b/rest_framework/tests/models.py @@ -125,10 +125,26 @@ class BlogPostComment(RESTFrameworkModel):      blog_post = models.ForeignKey(BlogPost) +class Album(RESTFrameworkModel): +    title = models.CharField(max_length=100, unique=True) + + +class Photo(RESTFrameworkModel): +    description = models.TextField() +    album = models.ForeignKey(Album) + +  class Person(RESTFrameworkModel):      name = models.CharField(max_length=10)      age = models.IntegerField(null=True, blank=True) +    @property +    def info(self): +        return { +            'name': self.name, +            'age': self.age, +        } +  # Model for issue #324  class BlankFieldModel(RESTFrameworkModel): diff --git a/rest_framework/tests/pagination.py b/rest_framework/tests/pagination.py index 170515a7..7a2134e0 100644 --- a/rest_framework/tests/pagination.py +++ b/rest_framework/tests/pagination.py @@ -141,13 +141,13 @@ class UnitTestPagination(TestCase):          self.last_page = paginator.page(3)      def test_native_pagination(self): -        serializer = pagination.PaginationSerializer(instance=self.first_page) +        serializer = pagination.PaginationSerializer(self.first_page)          self.assertEquals(serializer.data['count'], 26)          self.assertEquals(serializer.data['next'], '?page=2')          self.assertEquals(serializer.data['previous'], None)          self.assertEquals(serializer.data['results'], self.objects[:10]) -        serializer = pagination.PaginationSerializer(instance=self.last_page) +        serializer = pagination.PaginationSerializer(self.last_page)          self.assertEquals(serializer.data['count'], 26)          self.assertEquals(serializer.data['next'], None)          self.assertEquals(serializer.data['previous'], '?page=2') diff --git a/rest_framework/tests/pk_relations.py b/rest_framework/tests/pk_relations.py new file mode 100644 index 00000000..94709810 --- /dev/null +++ b/rest_framework/tests/pk_relations.py @@ -0,0 +1,187 @@ +from django.db import models +from django.test import TestCase +from rest_framework import serializers + + +# ManyToMany + +class ManyToManyTarget(models.Model): +    name = models.CharField(max_length=100) + + +class ManyToManySource(models.Model): +    name = models.CharField(max_length=100) +    targets = models.ManyToManyField(ManyToManyTarget, related_name='sources') + + +class ManyToManyTargetSerializer(serializers.ModelSerializer): +    sources = serializers.ManyPrimaryKeyRelatedField() + +    class Meta: +        model = ManyToManyTarget + + +class ManyToManySourceSerializer(serializers.ModelSerializer): +    class Meta: +        model = ManyToManySource + + +# ForeignKey + +class ForeignKeyTarget(models.Model): +    name = models.CharField(max_length=100) + + +class ForeignKeySource(models.Model): +    name = models.CharField(max_length=100) +    target = models.ForeignKey(ForeignKeyTarget, related_name='sources') + + +class ForeignKeyTargetSerializer(serializers.ModelSerializer): +    sources = serializers.ManyPrimaryKeyRelatedField(read_only=True) + +    class Meta: +        model = ForeignKeyTarget + + +class ForeignKeySourceSerializer(serializers.ModelSerializer): +    class Meta: +        model = ForeignKeySource + + +# TODO: Add test that .data cannot be accessed prior to .is_valid + +class PrimaryKeyManyToManyTests(TestCase): +    def setUp(self): +        for idx in range(1, 4): +            target = ManyToManyTarget(name='target-%d' % idx) +            target.save() +            source = ManyToManySource(name='source-%d' % idx) +            source.save() +            for target in ManyToManyTarget.objects.all(): +                source.targets.add(target) + +    def test_many_to_many_retrieve(self): +        queryset = ManyToManySource.objects.all() +        serializer = ManyToManySourceSerializer(queryset) +        expected = [ +                {'id': 1, 'name': u'source-1', 'targets': [1]}, +                {'id': 2, 'name': u'source-2', 'targets': [1, 2]}, +                {'id': 3, 'name': u'source-3', 'targets': [1, 2, 3]} +        ] +        self.assertEquals(serializer.data, expected) + +    def test_reverse_many_to_many_retrieve(self): +        queryset = ManyToManyTarget.objects.all() +        serializer = ManyToManyTargetSerializer(queryset) +        expected = [ +            {'id': 1, 'name': u'target-1', 'sources': [1, 2, 3]}, +            {'id': 2, 'name': u'target-2', 'sources': [2, 3]}, +            {'id': 3, 'name': u'target-3', 'sources': [3]} +        ] +        self.assertEquals(serializer.data, expected) + +    def test_many_to_many_update(self): +        data = {'id': 1, 'name': u'source-1', 'targets': [1, 2, 3]} +        instance = ManyToManySource.objects.get(pk=1) +        serializer = ManyToManySourceSerializer(instance, data=data) +        self.assertTrue(serializer.is_valid()) +        self.assertEquals(serializer.data, data) +        serializer.save() + +        # Ensure source 1 is updated, and everything else is as expected +        queryset = ManyToManySource.objects.all() +        serializer = ManyToManySourceSerializer(queryset) +        expected = [ +                {'id': 1, 'name': u'source-1', 'targets': [1, 2, 3]}, +                {'id': 2, 'name': u'source-2', 'targets': [1, 2]}, +                {'id': 3, 'name': u'source-3', 'targets': [1, 2, 3]} +        ] +        self.assertEquals(serializer.data, expected) + +    def test_reverse_many_to_many_update(self): +        data = {'id': 1, 'name': u'target-1', 'sources': [1]} +        instance = ManyToManyTarget.objects.get(pk=1) +        serializer = ManyToManyTargetSerializer(instance, data=data) +        self.assertTrue(serializer.is_valid()) +        self.assertEquals(serializer.data, data) +        serializer.save() + +        # Ensure target 1 is updated, and everything else is as expected +        queryset = ManyToManyTarget.objects.all() +        serializer = ManyToManyTargetSerializer(queryset) +        expected = [ +            {'id': 1, 'name': u'target-1', 'sources': [1]}, +            {'id': 2, 'name': u'target-2', 'sources': [2, 3]}, +            {'id': 3, 'name': u'target-3', 'sources': [3]} +        ] +        self.assertEquals(serializer.data, expected) + + +class PrimaryKeyForeignKeyTests(TestCase): +    def setUp(self): +        target = ForeignKeyTarget(name='target-1') +        target.save() +        new_target = ForeignKeyTarget(name='target-2') +        new_target.save() +        for idx in range(1, 4): +            source = ForeignKeySource(name='source-%d' % idx, target=target) +            source.save() + +    def test_foreign_key_retrieve(self): +        queryset = ForeignKeySource.objects.all() +        serializer = ForeignKeySourceSerializer(queryset) +        expected = [ +            {'id': 1, 'name': u'source-1', 'target': 1}, +            {'id': 2, 'name': u'source-2', 'target': 1}, +            {'id': 3, 'name': u'source-3', 'target': 1} +        ] +        self.assertEquals(serializer.data, expected) + +    def test_reverse_foreign_key_retrieve(self): +        queryset = ForeignKeyTarget.objects.all() +        serializer = ForeignKeyTargetSerializer(queryset) +        expected = [ +            {'id': 1, 'name': u'target-1', 'sources': [1, 2, 3]}, +            {'id': 2, 'name': u'target-2', 'sources': []}, +        ] +        self.assertEquals(serializer.data, expected) + +    def test_foreign_key_update(self): +        data = {'id': 1, 'name': u'source-1', 'target': 2} +        instance = ForeignKeySource.objects.get(pk=1) +        serializer = ForeignKeySourceSerializer(instance, data=data) +        self.assertTrue(serializer.is_valid()) +        self.assertEquals(serializer.data, data) +        serializer.save() + +        # # Ensure source 1 is updated, and everything else is as expected +        queryset = ForeignKeySource.objects.all() +        serializer = ForeignKeySourceSerializer(queryset) +        expected = [ +            {'id': 1, 'name': u'source-1', 'target': 2}, +            {'id': 2, 'name': u'source-2', 'target': 1}, +            {'id': 3, 'name': u'source-3', 'target': 1} +        ] +        self.assertEquals(serializer.data, expected) + +    # reverse foreign keys MUST be read_only +    # In the general case they do not provide .remove() or .clear() +    # and cannot be arbitrarily set. + +    # def test_reverse_foreign_key_update(self): +    #     data = {'id': 1, 'name': u'target-1', 'sources': [1]} +    #     instance = ForeignKeyTarget.objects.get(pk=1) +    #     serializer = ForeignKeyTargetSerializer(instance, data=data) +    #     self.assertTrue(serializer.is_valid()) +    #     self.assertEquals(serializer.data, data) +    #     serializer.save() + +    #     # Ensure target 1 is updated, and everything else is as expected +    #     queryset = ForeignKeyTarget.objects.all() +    #     serializer = ForeignKeyTargetSerializer(queryset) +    #     expected = [ +    #         {'id': 1, 'name': u'target-1', 'sources': [1]}, +    #         {'id': 2, 'name': u'target-2', 'sources': []}, +    #     ] +    #     self.assertEquals(serializer.data, expected) diff --git a/rest_framework/tests/renderers.py b/rest_framework/tests/renderers.py index 48d8d9bd..9be4b114 100644 --- a/rest_framework/tests/renderers.py +++ b/rest_framework/tests/renderers.py @@ -1,6 +1,8 @@ +import pickle  import re  from django.conf.urls.defaults import patterns, url, include +from django.core.cache import cache  from django.test import TestCase  from django.test.client import RequestFactory @@ -83,6 +85,7 @@ class HTMLView1(APIView):  urlpatterns = patterns('',      url(r'^.*\.(?P<format>.+)$', MockView.as_view(renderer_classes=[RendererA, RendererB])),      url(r'^$', MockView.as_view(renderer_classes=[RendererA, RendererB])), +    url(r'^cache$', MockGETView.as_view()),      url(r'^jsonp/jsonrenderer$', MockGETView.as_view(renderer_classes=[JSONRenderer, JSONPRenderer])),      url(r'^jsonp/nojsonrenderer$', MockGETView.as_view(renderer_classes=[JSONPRenderer])),      url(r'^html$', HTMLView.as_view()), @@ -416,3 +419,89 @@ class XMLRendererTestCase(TestCase):          self.assertTrue(xml.startswith('<?xml version="1.0" encoding="utf-8"?>\n<root>'))          self.assertTrue(xml.endswith('</root>'))          self.assertTrue(string in xml, '%r not in %r' % (string, xml)) + + +# Tests for caching issue, #346 +class CacheRenderTest(TestCase): +    """ +    Tests specific to caching responses +    """ + +    urls = 'rest_framework.tests.renderers' + +    cache_key = 'just_a_cache_key' + +    @classmethod +    def _get_pickling_errors(cls, obj, seen=None): +        """ Return any errors that would be raised if `obj' is pickled +        Courtesy of koffie @ http://stackoverflow.com/a/7218986/109897 +        """ +        if seen == None: +            seen = [] +        try: +            state = obj.__getstate__() +        except AttributeError: +            return +        if state == None: +            return +        if isinstance(state,tuple): +            if not isinstance(state[0],dict): +                state=state[1] +            else: +                state=state[0].update(state[1]) +        result = {} +        for i in state: +            try: +                pickle.dumps(state[i],protocol=2) +            except pickle.PicklingError: +                if not state[i] in seen: +                    seen.append(state[i]) +                    result[i] = cls._get_pickling_errors(state[i],seen) +        return result + +    def http_resp(self, http_method, url): +        """ +        Simple wrapper for Client http requests +        Removes the `client' and `request' attributes from as they are +        added by django.test.client.Client and not part of caching +        responses outside of tests. +        """ +        method = getattr(self.client, http_method) +        resp = method(url) +        del resp.client, resp.request +        return resp + +    def test_obj_pickling(self): +        """ +        Test that responses are properly pickled +        """ +        resp = self.http_resp('get', '/cache') + +        # Make sure that no pickling errors occurred +        self.assertEqual(self._get_pickling_errors(resp), {}) + +        # Unfortunately LocMem backend doesn't raise PickleErrors but returns +        # None instead. +        cache.set(self.cache_key, resp) +        self.assertTrue(cache.get(self.cache_key) is not None) + +    def test_head_caching(self): +        """ +        Test caching of HEAD requests +        """ +        resp = self.http_resp('head', '/cache') +        cache.set(self.cache_key, resp) + +        cached_resp = cache.get(self.cache_key) +        self.assertIsInstance(cached_resp, Response) + +    def test_get_caching(self): +        """ +        Test caching of GET requests +        """ +        resp = self.http_resp('get', '/cache') +        cache.set(self.cache_key, resp) + +        cached_resp = cache.get(self.cache_key) +        self.assertIsInstance(cached_resp, Response) +        self.assertEqual(cached_resp.content, resp.content) diff --git a/rest_framework/tests/serializer.py b/rest_framework/tests/serializer.py index d4b43862..8d1de429 100644 --- a/rest_framework/tests/serializer.py +++ b/rest_framework/tests/serializer.py @@ -1,7 +1,9 @@  import datetime  from django.test import TestCase  from rest_framework import serializers -from rest_framework.tests.models import * +from rest_framework.tests.models import (ActionItem, Anchor, BasicModel, +    BlankFieldModel, BlogPost, CallableDefaultValueModel, DefaultValueModel, +    ManyToManyModel, Person, ReadOnlyManyToManyModel)  class SubComment(object): @@ -44,8 +46,11 @@ class ActionItemSerializer(serializers.ModelSerializer):  class PersonSerializer(serializers.ModelSerializer): +    info = serializers.Field(source='info') +      class Meta:          model = Person +        fields = ('name', 'age', 'info')  class BasicTests(TestCase): @@ -67,6 +72,9 @@ class BasicTests(TestCase):              'created': datetime.datetime(2012, 1, 1),              'sub_comment': 'And Merry Christmas!'          } +        self.person_data = {'name': 'dwight', 'age': 35} +        self.person = Person(**self.person_data) +        self.person.save()      def test_empty(self):          serializer = CommentSerializer() @@ -79,11 +87,11 @@ class BasicTests(TestCase):          self.assertEquals(serializer.data, expected)      def test_retrieve(self): -        serializer = CommentSerializer(instance=self.comment) +        serializer = CommentSerializer(self.comment)          self.assertEquals(serializer.data, self.expected)      def test_create(self): -        serializer = CommentSerializer(self.data) +        serializer = CommentSerializer(data=self.data)          expected = self.comment          self.assertEquals(serializer.is_valid(), True)          self.assertEquals(serializer.object, expected) @@ -91,13 +99,28 @@ class BasicTests(TestCase):          self.assertEquals(serializer.data['sub_comment'], 'And Merry Christmas!')      def test_update(self): -        serializer = CommentSerializer(self.data, instance=self.comment) +        serializer = CommentSerializer(self.comment, data=self.data)          expected = self.comment          self.assertEquals(serializer.is_valid(), True)          self.assertEquals(serializer.object, expected)          self.assertTrue(serializer.object is expected)          self.assertEquals(serializer.data['sub_comment'], 'And Merry Christmas!') +    def test_model_fields_as_expected(self): +        """ Make sure that the fields returned are the same as defined +        in the Meta data +        """ +        serializer = PersonSerializer(self.person) +        self.assertEquals(set(serializer.data.keys()), +                          set(['name', 'age', 'info'])) + +    def test_field_with_dictionary(self): +        """ Make sure that dictionaries from fields are left intact +        """ +        serializer = PersonSerializer(self.person) +        expected = self.person_data +        self.assertEquals(serializer.data['info'], expected) +  class ValidationTests(TestCase):      def setUp(self): @@ -115,12 +138,12 @@ class ValidationTests(TestCase):          )      def test_create(self): -        serializer = CommentSerializer(self.data) +        serializer = CommentSerializer(data=self.data)          self.assertEquals(serializer.is_valid(), False)          self.assertEquals(serializer.errors, {'content': [u'Ensure this value has at most 1000 characters (it has 1001).']})      def test_update(self): -        serializer = CommentSerializer(self.data, instance=self.comment) +        serializer = CommentSerializer(self.comment, data=self.data)          self.assertEquals(serializer.is_valid(), False)          self.assertEquals(serializer.errors, {'content': [u'Ensure this value has at most 1000 characters (it has 1001).']}) @@ -129,7 +152,7 @@ class ValidationTests(TestCase):              'content': 'xxx',              'created': datetime.datetime(2012, 1, 1)          } -        serializer = CommentSerializer(data, instance=self.comment) +        serializer = CommentSerializer(self.comment, data=data)          self.assertEquals(serializer.is_valid(), False)          self.assertEquals(serializer.errors, {'email': [u'This field is required.']}) @@ -140,7 +163,7 @@ class ValidationTests(TestCase):              'title': 'Some action item',              #No 'done' value.          } -        serializer = ActionItemSerializer(data, instance=self.actionitem) +        serializer = ActionItemSerializer(self.actionitem, data=data)          self.assertEquals(serializer.is_valid(), True)          self.assertEquals(serializer.errors, {}) @@ -160,12 +183,12 @@ class ValidationTests(TestCase):              'created': datetime.datetime(2012, 1, 1)          } -        serializer = CommentSerializerWithFieldValidator(data) +        serializer = CommentSerializerWithFieldValidator(data=data)          self.assertTrue(serializer.is_valid())          data['content'] = 'This should not validate' -        serializer = CommentSerializerWithFieldValidator(data) +        serializer = CommentSerializerWithFieldValidator(data=data)          self.assertFalse(serializer.is_valid())          self.assertEquals(serializer.errors, {'content': [u'Test not in value']}) @@ -184,12 +207,12 @@ class ValidationTests(TestCase):              'created': datetime.datetime(2012, 1, 1)          } -        serializer = CommentSerializerWithCrossFieldValidator(data) +        serializer = CommentSerializerWithCrossFieldValidator(data=data)          self.assertTrue(serializer.is_valid())          data['content'] = 'A comment from foo@bar.com' -        serializer = CommentSerializerWithCrossFieldValidator(data) +        serializer = CommentSerializerWithCrossFieldValidator(data=data)          self.assertFalse(serializer.is_valid())          self.assertEquals(serializer.errors, {'non_field_errors': [u'Email address not in content']}) @@ -197,7 +220,7 @@ class ValidationTests(TestCase):          """          Omitting a value for null-field should validate.          """ -        serializer = PersonSerializer({'name': 'marko'}) +        serializer = PersonSerializer(data={'name': 'marko'})          self.assertEquals(serializer.is_valid(), True)          self.assertEquals(serializer.errors, {}) @@ -247,7 +270,7 @@ class ManyToManyTests(TestCase):          Create an instance of a model with a ManyToMany relationship.          """          data = {'rel': [self.anchor.id]} -        serializer = self.serializer_class(data) +        serializer = self.serializer_class(data=data)          self.assertEquals(serializer.is_valid(), True)          instance = serializer.save()          self.assertEquals(len(ManyToManyModel.objects.all()), 2) @@ -261,7 +284,7 @@ class ManyToManyTests(TestCase):          new_anchor = Anchor()          new_anchor.save()          data = {'rel': [self.anchor.id, new_anchor.id]} -        serializer = self.serializer_class(data, instance=self.instance) +        serializer = self.serializer_class(self.instance, data=data)          self.assertEquals(serializer.is_valid(), True)          instance = serializer.save()          self.assertEquals(len(ManyToManyModel.objects.all()), 1) @@ -274,7 +297,7 @@ class ManyToManyTests(TestCase):          containing no items.          """          data = {'rel': []} -        serializer = self.serializer_class(data) +        serializer = self.serializer_class(data=data)          self.assertEquals(serializer.is_valid(), True)          instance = serializer.save()          self.assertEquals(len(ManyToManyModel.objects.all()), 2) @@ -289,7 +312,7 @@ class ManyToManyTests(TestCase):          new_anchor = Anchor()          new_anchor.save()          data = {'rel': []} -        serializer = self.serializer_class(data, instance=self.instance) +        serializer = self.serializer_class(self.instance, data=data)          self.assertEquals(serializer.is_valid(), True)          instance = serializer.save()          self.assertEquals(len(ManyToManyModel.objects.all()), 1) @@ -303,7 +326,7 @@ class ManyToManyTests(TestCase):          lists (eg form data).          """          data = {'rel': ''} -        serializer = self.serializer_class(data) +        serializer = self.serializer_class(data=data)          self.assertEquals(serializer.is_valid(), True)          instance = serializer.save()          self.assertEquals(len(ManyToManyModel.objects.all()), 2) @@ -341,7 +364,7 @@ class ReadOnlyManyToManyTests(TestCase):          new_anchor = Anchor()          new_anchor.save()          data = {'rel': [self.anchor.id, new_anchor.id]} -        serializer = self.serializer_class(data, instance=self.instance) +        serializer = self.serializer_class(self.instance, data=data)          self.assertEquals(serializer.is_valid(), True)          instance = serializer.save()          self.assertEquals(len(ReadOnlyManyToManyModel.objects.all()), 1) @@ -357,7 +380,7 @@ class ReadOnlyManyToManyTests(TestCase):          new_anchor = Anchor()          new_anchor.save()          data = {} -        serializer = self.serializer_class(data, instance=self.instance) +        serializer = self.serializer_class(self.instance, data=data)          self.assertEquals(serializer.is_valid(), True)          instance = serializer.save()          self.assertEquals(len(ReadOnlyManyToManyModel.objects.all()), 1) @@ -377,7 +400,7 @@ class DefaultValueTests(TestCase):      def test_create_using_default(self):          data = {} -        serializer = self.serializer_class(data) +        serializer = self.serializer_class(data=data)          self.assertEquals(serializer.is_valid(), True)          instance = serializer.save()          self.assertEquals(len(self.objects.all()), 1) @@ -386,7 +409,7 @@ class DefaultValueTests(TestCase):      def test_create_overriding_default(self):          data = {'text': 'overridden'} -        serializer = self.serializer_class(data) +        serializer = self.serializer_class(data=data)          self.assertEquals(serializer.is_valid(), True)          instance = serializer.save()          self.assertEquals(len(self.objects.all()), 1) @@ -405,7 +428,7 @@ class CallableDefaultValueTests(TestCase):      def test_create_using_default(self):          data = {} -        serializer = self.serializer_class(data) +        serializer = self.serializer_class(data=data)          self.assertEquals(serializer.is_valid(), True)          instance = serializer.save()          self.assertEquals(len(self.objects.all()), 1) @@ -414,7 +437,7 @@ class CallableDefaultValueTests(TestCase):      def test_create_overriding_default(self):          data = {'text': 'overridden'} -        serializer = self.serializer_class(data) +        serializer = self.serializer_class(data=data)          self.assertEquals(serializer.is_valid(), True)          instance = serializer.save()          self.assertEquals(len(self.objects.all()), 1) @@ -476,11 +499,11 @@ class BlankFieldTests(TestCase):          self.data = {'title': ''}      def test_create_blank_field(self): -        serializer = self.serializer_class(self.data) +        serializer = self.serializer_class(data=self.data)          self.assertEquals(serializer.is_valid(), True)      def test_create_model_blank_field(self): -        serializer = self.model_serializer_class(self.data) +        serializer = self.model_serializer_class(data=self.data)          self.assertEquals(serializer.is_valid(), True)      def test_create_not_blank_field(self): @@ -488,7 +511,7 @@ class BlankFieldTests(TestCase):          Test to ensure blank data in a field not marked as blank=True          is considered invalid in a non-model serializer          """ -        serializer = self.not_blank_serializer_class(self.data) +        serializer = self.not_blank_serializer_class(data=self.data)          self.assertEquals(serializer.is_valid(), False)      def test_create_model_not_blank_field(self): @@ -496,5 +519,5 @@ class BlankFieldTests(TestCase):          Test to ensure blank data in a field not marked as blank=True          is considered invalid in a model serializer          """ -        serializer = self.not_blank_model_serializer_class(self.data) +        serializer = self.not_blank_model_serializer_class(data=self.data)          self.assertEquals(serializer.is_valid(), False)  | 
