diff options
Diffstat (limited to 'tests/test_genericrelations.py')
| -rw-r--r-- | tests/test_genericrelations.py | 255 | 
1 files changed, 104 insertions, 151 deletions
| diff --git a/tests/test_genericrelations.py b/tests/test_genericrelations.py index a87ea3fd..380ad91d 100644 --- a/tests/test_genericrelations.py +++ b/tests/test_genericrelations.py @@ -1,151 +1,104 @@ -# from __future__ import unicode_literals -# from django.contrib.contenttypes.models import ContentType -# from django.contrib.contenttypes.generic import GenericRelation, GenericForeignKey -# from django.db import models -# from django.test import TestCase -# from rest_framework import serializers -# from rest_framework.compat import python_2_unicode_compatible - - -# @python_2_unicode_compatible -# class Tag(models.Model): -#     """ -#     Tags have a descriptive slug, and are attached to an arbitrary object. -#     """ -#     tag = models.SlugField() -#     content_type = models.ForeignKey(ContentType) -#     object_id = models.PositiveIntegerField() -#     tagged_item = GenericForeignKey('content_type', 'object_id') - -#     def __str__(self): -#         return self.tag - - -# @python_2_unicode_compatible -# class Bookmark(models.Model): -#     """ -#     A URL bookmark that may have multiple tags attached. -#     """ -#     url = models.URLField() -#     tags = GenericRelation(Tag) - -#     def __str__(self): -#         return 'Bookmark: %s' % self.url - - -# @python_2_unicode_compatible -# class Note(models.Model): -#     """ -#     A textual note that may have multiple tags attached. -#     """ -#     text = models.TextField() -#     tags = GenericRelation(Tag) - -#     def __str__(self): -#         return 'Note: %s' % self.text - - -# class TestGenericRelations(TestCase): -#     def setUp(self): -#         self.bookmark = Bookmark.objects.create(url='https://www.djangoproject.com/') -#         Tag.objects.create(tagged_item=self.bookmark, tag='django') -#         Tag.objects.create(tagged_item=self.bookmark, tag='python') -#         self.note = Note.objects.create(text='Remember the milk') -#         Tag.objects.create(tagged_item=self.note, tag='reminder') - -#     def test_generic_relation(self): -#         """ -#         Test a relationship that spans a GenericRelation field. -#         IE. A reverse generic relationship. -#         """ - -#         class BookmarkSerializer(serializers.ModelSerializer): -#             tags = serializers.RelatedField(many=True) - -#             class Meta: -#                 model = Bookmark -#                 exclude = ('id',) - -#         serializer = BookmarkSerializer(self.bookmark) -#         expected = { -#             'tags': ['django', 'python'], -#             'url': 'https://www.djangoproject.com/' -#         } -#         self.assertEqual(serializer.data, expected) - -#     def test_generic_nested_relation(self): -#         """ -#         Test saving a GenericRelation field via a nested serializer. -#         """ - -#         class TagSerializer(serializers.ModelSerializer): -#             class Meta: -#                 model = Tag -#                 exclude = ('content_type', 'object_id') - -#         class BookmarkSerializer(serializers.ModelSerializer): -#             tags = TagSerializer(many=True) - -#             class Meta: -#                 model = Bookmark -#                 exclude = ('id',) - -#         data = { -#             'url': 'https://docs.djangoproject.com/', -#             'tags': [ -#                 {'tag': 'contenttypes'}, -#                 {'tag': 'genericrelations'}, -#             ] -#         } -#         serializer = BookmarkSerializer(data=data) -#         self.assertTrue(serializer.is_valid()) -#         serializer.save() -#         self.assertEqual(serializer.object.tags.count(), 2) - -#     def test_generic_fk(self): -#         """ -#         Test a relationship that spans a GenericForeignKey field. -#         IE. A forward generic relationship. -#         """ - -#         class TagSerializer(serializers.ModelSerializer): -#             tagged_item = serializers.RelatedField() - -#             class Meta: -#                 model = Tag -#                 exclude = ('id', 'content_type', 'object_id') - -#         serializer = TagSerializer(Tag.objects.all(), many=True) -#         expected = [ -#             { -#                 'tag': 'django', -#                 'tagged_item': 'Bookmark: https://www.djangoproject.com/' -#             }, -#             { -#                 'tag': 'python', -#                 'tagged_item': 'Bookmark: https://www.djangoproject.com/' -#             }, -#             { -#                 'tag': 'reminder', -#                 'tagged_item': 'Note: Remember the milk' -#             } -#         ] -#         self.assertEqual(serializer.data, expected) - -#     def test_restore_object_generic_fk(self): -#         """ -#         Ensure an object with a generic foreign key can be restored. -#         """ - -#         class TagSerializer(serializers.ModelSerializer): -#             class Meta: -#                 model = Tag -#                 exclude = ('content_type', 'object_id') - -#         serializer = TagSerializer() - -#         bookmark = Bookmark(url='http://example.com') -#         attrs = {'tagged_item': bookmark, 'tag': 'example'} - -#         tag = serializer.restore_object(attrs) -#         self.assertEqual(tag.tagged_item, bookmark) +from __future__ import unicode_literals +from django.contrib.contenttypes.models import ContentType +from django.contrib.contenttypes.generic import GenericRelation, GenericForeignKey +from django.db import models +from django.test import TestCase +from rest_framework import serializers +from rest_framework.compat import python_2_unicode_compatible + + +@python_2_unicode_compatible +class Tag(models.Model): +    """ +    Tags have a descriptive slug, and are attached to an arbitrary object. +    """ +    tag = models.SlugField() +    content_type = models.ForeignKey(ContentType) +    object_id = models.PositiveIntegerField() +    tagged_item = GenericForeignKey('content_type', 'object_id') + +    def __str__(self): +        return self.tag + + +@python_2_unicode_compatible +class Bookmark(models.Model): +    """ +    A URL bookmark that may have multiple tags attached. +    """ +    url = models.URLField() +    tags = GenericRelation(Tag) + +    def __str__(self): +        return 'Bookmark: %s' % self.url + + +@python_2_unicode_compatible +class Note(models.Model): +    """ +    A textual note that may have multiple tags attached. +    """ +    text = models.TextField() +    tags = GenericRelation(Tag) + +    def __str__(self): +        return 'Note: %s' % self.text + + +class TestGenericRelations(TestCase): +    def setUp(self): +        self.bookmark = Bookmark.objects.create(url='https://www.djangoproject.com/') +        Tag.objects.create(tagged_item=self.bookmark, tag='django') +        Tag.objects.create(tagged_item=self.bookmark, tag='python') +        self.note = Note.objects.create(text='Remember the milk') +        Tag.objects.create(tagged_item=self.note, tag='reminder') + +    def test_generic_relation(self): +        """ +        Test a relationship that spans a GenericRelation field. +        IE. A reverse generic relationship. +        """ + +        class BookmarkSerializer(serializers.ModelSerializer): +            tags = serializers.StringRelatedField(many=True) + +            class Meta: +                model = Bookmark +                fields = ('tags', 'url') + +        serializer = BookmarkSerializer(self.bookmark) +        expected = { +            'tags': ['django', 'python'], +            'url': 'https://www.djangoproject.com/' +        } +        self.assertEqual(serializer.data, expected) + +    def test_generic_fk(self): +        """ +        Test a relationship that spans a GenericForeignKey field. +        IE. A forward generic relationship. +        """ + +        class TagSerializer(serializers.ModelSerializer): +            tagged_item = serializers.StringRelatedField() + +            class Meta: +                model = Tag +                fields = ('tag', 'tagged_item') + +        serializer = TagSerializer(Tag.objects.all(), many=True) +        expected = [ +            { +                'tag': 'django', +                'tagged_item': 'Bookmark: https://www.djangoproject.com/' +            }, +            { +                'tag': 'python', +                'tagged_item': 'Bookmark: https://www.djangoproject.com/' +            }, +            { +                'tag': 'reminder', +                'tagged_item': 'Note: Remember the milk' +            } +        ] +        self.assertEqual(serializer.data, expected) | 
