diff options
Diffstat (limited to 'tests/test_serializer.py')
| -rw-r--r-- | tests/test_serializer.py | 3748 | 
1 files changed, 1874 insertions, 1874 deletions
| diff --git a/tests/test_serializer.py b/tests/test_serializer.py index 90f37cf2..b0eb4e27 100644 --- a/tests/test_serializer.py +++ b/tests/test_serializer.py @@ -1,2004 +1,2004 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals -from django.db import models -from django.db.models.fields import BLANK_CHOICE_DASH -from django.test import TestCase -from django.utils import unittest -from django.utils.datastructures import MultiValueDict -from django.utils.translation import ugettext_lazy as _ -from rest_framework import serializers, fields, relations -from tests.models import ( -    HasPositiveIntegerAsChoice, Album, ActionItem, Anchor, BasicModel, -    BlankFieldModel, BlogPost, BlogPostComment, Book, CallableDefaultValueModel, -    DefaultValueModel, ManyToManyModel, Person, ReadOnlyManyToManyModel, Photo, -    RESTFrameworkModel, ForeignKeySource -) -from tests.models import BasicModelSerializer -import datetime -import pickle -try: -    import PIL -except: -    PIL = None - - -if PIL is not None: -    class AMOAFModel(RESTFrameworkModel): -        char_field = models.CharField(max_length=1024, blank=True) -        comma_separated_integer_field = models.CommaSeparatedIntegerField(max_length=1024, blank=True) -        decimal_field = models.DecimalField(max_digits=64, decimal_places=32, blank=True) -        email_field = models.EmailField(max_length=1024, blank=True) -        file_field = models.FileField(upload_to='test', max_length=1024, blank=True) -        image_field = models.ImageField(upload_to='test', max_length=1024, blank=True) -        slug_field = models.SlugField(max_length=1024, blank=True) -        url_field = models.URLField(max_length=1024, blank=True) -        nullable_char_field = models.CharField(max_length=1024, blank=True, null=True) - -    class DVOAFModel(RESTFrameworkModel): -        positive_integer_field = models.PositiveIntegerField(blank=True) -        positive_small_integer_field = models.PositiveSmallIntegerField(blank=True) -        email_field = models.EmailField(blank=True) -        file_field = models.FileField(upload_to='test', blank=True) -        image_field = models.ImageField(upload_to='test', blank=True) -        slug_field = models.SlugField(blank=True) -        url_field = models.URLField(blank=True) +# # -*- coding: utf-8 -*- +# from __future__ import unicode_literals +# from django.db import models +# from django.db.models.fields import BLANK_CHOICE_DASH +# from django.test import TestCase +# from django.utils import unittest +# from django.utils.datastructures import MultiValueDict +# from django.utils.translation import ugettext_lazy as _ +# from rest_framework import serializers, fields, relations +# from tests.models import ( +#     HasPositiveIntegerAsChoice, Album, ActionItem, Anchor, BasicModel, +#     BlankFieldModel, BlogPost, BlogPostComment, Book, CallableDefaultValueModel, +#     DefaultValueModel, ManyToManyModel, Person, ReadOnlyManyToManyModel, Photo, +#     RESTFrameworkModel, ForeignKeySource +# ) +# from tests.models import BasicModelSerializer +# import datetime +# import pickle +# try: +#     import PIL +# except: +#     PIL = None + + +# if PIL is not None: +#     class AMOAFModel(RESTFrameworkModel): +#         char_field = models.CharField(max_length=1024, blank=True) +#         comma_separated_integer_field = models.CommaSeparatedIntegerField(max_length=1024, blank=True) +#         decimal_field = models.DecimalField(max_digits=64, decimal_places=32, blank=True) +#         email_field = models.EmailField(max_length=1024, blank=True) +#         file_field = models.FileField(upload_to='test', max_length=1024, blank=True) +#         image_field = models.ImageField(upload_to='test', max_length=1024, blank=True) +#         slug_field = models.SlugField(max_length=1024, blank=True) +#         url_field = models.URLField(max_length=1024, blank=True) +#         nullable_char_field = models.CharField(max_length=1024, blank=True, null=True) + +#     class DVOAFModel(RESTFrameworkModel): +#         positive_integer_field = models.PositiveIntegerField(blank=True) +#         positive_small_integer_field = models.PositiveSmallIntegerField(blank=True) +#         email_field = models.EmailField(blank=True) +#         file_field = models.FileField(upload_to='test', blank=True) +#         image_field = models.ImageField(upload_to='test', blank=True) +#         slug_field = models.SlugField(blank=True) +#         url_field = models.URLField(blank=True) -class SubComment(object): -    def __init__(self, sub_comment): -        self.sub_comment = sub_comment +# class SubComment(object): +#     def __init__(self, sub_comment): +#         self.sub_comment = sub_comment -class Comment(object): -    def __init__(self, email, content, created): -        self.email = email -        self.content = content -        self.created = created or datetime.datetime.now() +# class Comment(object): +#     def __init__(self, email, content, created): +#         self.email = email +#         self.content = content +#         self.created = created or datetime.datetime.now() -    def __eq__(self, other): -        return all([getattr(self, attr) == getattr(other, attr) -                    for attr in ('email', 'content', 'created')]) +#     def __eq__(self, other): +#         return all([getattr(self, attr) == getattr(other, attr) +#                     for attr in ('email', 'content', 'created')]) -    def get_sub_comment(self): -        sub_comment = SubComment('And Merry Christmas!') -        return sub_comment +#     def get_sub_comment(self): +#         sub_comment = SubComment('And Merry Christmas!') +#         return sub_comment -class CommentSerializer(serializers.Serializer): -    email = serializers.EmailField() -    content = serializers.CharField(max_length=1000) -    created = serializers.DateTimeField() -    sub_comment = serializers.Field(source='get_sub_comment.sub_comment') +# class CommentSerializer(serializers.Serializer): +#     email = serializers.EmailField() +#     content = serializers.CharField(max_length=1000) +#     created = serializers.DateTimeField() +#     sub_comment = serializers.Field(source='get_sub_comment.sub_comment') -    def restore_object(self, data, instance=None): -        if instance is None: -            return Comment(**data) -        for key, val in data.items(): -            setattr(instance, key, val) -        return instance +#     def restore_object(self, data, instance=None): +#         if instance is None: +#             return Comment(**data) +#         for key, val in data.items(): +#             setattr(instance, key, val) +#         return instance -class NamesSerializer(serializers.Serializer): -    first = serializers.CharField() -    last = serializers.CharField(required=False, default='') -    initials = serializers.CharField(required=False, default='') +# class NamesSerializer(serializers.Serializer): +#     first = serializers.CharField() +#     last = serializers.CharField(required=False, default='') +#     initials = serializers.CharField(required=False, default='') -class PersonIdentifierSerializer(serializers.Serializer): -    ssn = serializers.CharField() -    names = NamesSerializer(source='names', required=False) +# class PersonIdentifierSerializer(serializers.Serializer): +#     ssn = serializers.CharField() +#     names = NamesSerializer(source='names', required=False) -class BookSerializer(serializers.ModelSerializer): -    isbn = serializers.RegexField(regex=r'^[0-9]{13}$', error_messages={'invalid': 'isbn has to be exact 13 numbers'}) +# class BookSerializer(serializers.ModelSerializer): +#     isbn = serializers.RegexField(regex=r'^[0-9]{13}$', error_messages={'invalid': 'isbn has to be exact 13 numbers'}) -    class Meta: -        model = Book +#     class Meta: +#         model = Book -class ActionItemSerializer(serializers.ModelSerializer): +# class ActionItemSerializer(serializers.ModelSerializer): -    class Meta: -        model = ActionItem +#     class Meta: +#         model = ActionItem -class ActionItemSerializerOptionalFields(serializers.ModelSerializer): -    """ -    Intended to test that fields with `required=False` are excluded from validation. -    """ -    title = serializers.CharField(required=False) +# class ActionItemSerializerOptionalFields(serializers.ModelSerializer): +#     """ +#     Intended to test that fields with `required=False` are excluded from validation. +#     """ +#     title = serializers.CharField(required=False) -    class Meta: -        model = ActionItem -        fields = ('title',) +#     class Meta: +#         model = ActionItem +#         fields = ('title',) -class ActionItemSerializerCustomRestore(serializers.ModelSerializer): +# class ActionItemSerializerCustomRestore(serializers.ModelSerializer): -    class Meta: -        model = ActionItem +#     class Meta: +#         model = ActionItem -    def restore_object(self, data, instance=None): -        if instance is None: -            return ActionItem(**data) -        for key, val in data.items(): -            setattr(instance, key, val) -        return instance +#     def restore_object(self, data, instance=None): +#         if instance is None: +#             return ActionItem(**data) +#         for key, val in data.items(): +#             setattr(instance, key, val) +#         return instance -class PersonSerializer(serializers.ModelSerializer): -    info = serializers.Field(source='info') +# class PersonSerializer(serializers.ModelSerializer): +#     info = serializers.Field(source='info') -    class Meta: -        model = Person -        fields = ('name', 'age', 'info') -        read_only_fields = ('age',) +#     class Meta: +#         model = Person +#         fields = ('name', 'age', 'info') +#         read_only_fields = ('age',) -class NestedSerializer(serializers.Serializer): -    info = serializers.Field() +# class NestedSerializer(serializers.Serializer): +#     info = serializers.Field() -class ModelSerializerWithNestedSerializer(serializers.ModelSerializer): -    nested = NestedSerializer(source='*') +# class ModelSerializerWithNestedSerializer(serializers.ModelSerializer): +#     nested = NestedSerializer(source='*') -    class Meta: -        model = Person +#     class Meta: +#         model = Person -class NestedSerializerWithRenamedField(serializers.Serializer): -    renamed_info = serializers.Field(source='info') +# class NestedSerializerWithRenamedField(serializers.Serializer): +#     renamed_info = serializers.Field(source='info') -class ModelSerializerWithNestedSerializerWithRenamedField(serializers.ModelSerializer): -    nested = NestedSerializerWithRenamedField(source='*') +# class ModelSerializerWithNestedSerializerWithRenamedField(serializers.ModelSerializer): +#     nested = NestedSerializerWithRenamedField(source='*') -    class Meta: -        model = Person +#     class Meta: +#         model = Person -class PersonSerializerInvalidReadOnly(serializers.ModelSerializer): -    """ -    Testing for #652. -    """ -    info = serializers.Field(source='info') +# class PersonSerializerInvalidReadOnly(serializers.ModelSerializer): +#     """ +#     Testing for #652. +#     """ +#     info = serializers.Field(source='info') -    class Meta: -        model = Person -        fields = ('name', 'age', 'info') -        read_only_fields = ('age', 'info') +#     class Meta: +#         model = Person +#         fields = ('name', 'age', 'info') +#         read_only_fields = ('age', 'info') -class AlbumsSerializer(serializers.ModelSerializer): +# class AlbumsSerializer(serializers.ModelSerializer): -    class Meta: -        model = Album -        fields = ['title', 'ref']  # lists are also valid options +#     class Meta: +#         model = Album +#         fields = ['title', 'ref']  # lists are also valid options -class PositiveIntegerAsChoiceSerializer(serializers.ModelSerializer): -    class Meta: -        model = HasPositiveIntegerAsChoice -        fields = ['some_integer'] +# class PositiveIntegerAsChoiceSerializer(serializers.ModelSerializer): +#     class Meta: +#         model = HasPositiveIntegerAsChoice +#         fields = ['some_integer'] -class ForeignKeySourceSerializer(serializers.ModelSerializer): -    class Meta: -        model = ForeignKeySource +# class ForeignKeySourceSerializer(serializers.ModelSerializer): +#     class Meta: +#         model = ForeignKeySource -class HyperlinkedForeignKeySourceSerializer(serializers.HyperlinkedModelSerializer): -    class Meta: -        model = ForeignKeySource +# class HyperlinkedForeignKeySourceSerializer(serializers.HyperlinkedModelSerializer): +#     class Meta: +#         model = ForeignKeySource -class BasicTests(TestCase): -    def setUp(self): -        self.comment = Comment( -            'tom@example.com', -            'Happy new year!', -            datetime.datetime(2012, 1, 1) -        ) -        self.actionitem = ActionItem(title='Some to do item',) -        self.data = { -            'email': 'tom@example.com', -            'content': 'Happy new year!', -            'created': datetime.datetime(2012, 1, 1), -            'sub_comment': 'This wont change' -        } -        self.expected = { -            'email': 'tom@example.com', -            'content': 'Happy new year!', -            '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() -        expected = { -            'email': '', -            'content': '', -            'created': None -        } -        self.assertEqual(serializer.data, expected) - -    def test_retrieve(self): -        serializer = CommentSerializer(self.comment) -        self.assertEqual(serializer.data, self.expected) - -    def test_create(self): -        serializer = CommentSerializer(data=self.data) -        expected = self.comment -        self.assertEqual(serializer.is_valid(), True) -        self.assertEqual(serializer.object, expected) -        self.assertFalse(serializer.object is expected) -        self.assertEqual(serializer.data['sub_comment'], 'And Merry Christmas!') - -    def test_create_nested(self): -        """Test a serializer with nested data.""" -        names = {'first': 'John', 'last': 'Doe', 'initials': 'jd'} -        data = {'ssn': '1234567890', 'names': names} -        serializer = PersonIdentifierSerializer(data=data) - -        self.assertEqual(serializer.is_valid(), True) -        self.assertEqual(serializer.object, data) -        self.assertFalse(serializer.object is data) -        self.assertEqual(serializer.data['names'], names) - -    def test_create_partial_nested(self): -        """Test a serializer with nested data which has missing fields.""" -        names = {'first': 'John'} -        data = {'ssn': '1234567890', 'names': names} -        serializer = PersonIdentifierSerializer(data=data) - -        expected_names = {'first': 'John', 'last': '', 'initials': ''} -        data['names'] = expected_names - -        self.assertEqual(serializer.is_valid(), True) -        self.assertEqual(serializer.object, data) -        self.assertFalse(serializer.object is expected_names) -        self.assertEqual(serializer.data['names'], expected_names) - -    def test_null_nested(self): -        """Test a serializer with a nonexistent nested field""" -        data = {'ssn': '1234567890'} -        serializer = PersonIdentifierSerializer(data=data) - -        self.assertEqual(serializer.is_valid(), True) -        self.assertEqual(serializer.object, data) -        self.assertFalse(serializer.object is data) -        expected = {'ssn': '1234567890', 'names': None} -        self.assertEqual(serializer.data, expected) - -    def test_update(self): -        serializer = CommentSerializer(self.comment, data=self.data) -        expected = self.comment -        self.assertEqual(serializer.is_valid(), True) -        self.assertEqual(serializer.object, expected) -        self.assertTrue(serializer.object is expected) -        self.assertEqual(serializer.data['sub_comment'], 'And Merry Christmas!') - -    def test_partial_update(self): -        msg = 'Merry New Year!' -        partial_data = {'content': msg} -        serializer = CommentSerializer(self.comment, data=partial_data) -        self.assertEqual(serializer.is_valid(), False) -        serializer = CommentSerializer(self.comment, data=partial_data, partial=True) -        expected = self.comment -        self.assertEqual(serializer.is_valid(), True) -        self.assertEqual(serializer.object, expected) -        self.assertTrue(serializer.object is expected) -        self.assertEqual(serializer.data['content'], msg) - -    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.assertEqual( -            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.assertEqual(serializer.data['info'], expected) - -    def test_read_only_fields(self): -        """ -        Attempting to update fields set as read_only should have no effect. -        """ -        serializer = PersonSerializer(self.person, data={'name': 'dwight', 'age': 99}) -        self.assertEqual(serializer.is_valid(), True) -        instance = serializer.save() -        self.assertEqual(serializer.errors, {}) -        # Assert age is unchanged (35) -        self.assertEqual(instance.age, self.person_data['age']) - -    def test_invalid_read_only_fields(self): -        """ -        Regression test for #652. -        """ -        self.assertRaises(AssertionError, PersonSerializerInvalidReadOnly, []) - -    def test_serializer_data_is_cleared_on_save(self): -        """ -        Check _data attribute is cleared on `save()` - -        Regression test for #1116 -            — id field is not populated if `data` is accessed prior to `save()` -        """ -        serializer = ActionItemSerializer(self.actionitem) -        self.assertIsNone(serializer.data.get('id', None), 'New instance. `id` should not be set.') -        serializer.save() -        self.assertIsNotNone(serializer.data.get('id', None), 'Model is saved. `id` should be set.') - -    def test_fields_marked_as_not_required_are_excluded_from_validation(self): -        """ -        Check that fields with `required=False` are included in list of exclusions. -        """ -        serializer = ActionItemSerializerOptionalFields(self.actionitem) -        exclusions = serializer.get_validation_exclusions() -        self.assertTrue('title' in exclusions, '`title` field was marked `required=False` and should be excluded') - - -class DictStyleSerializer(serializers.Serializer): -    """ -    Note that we don't have any `restore_object` method, so the default -    case of simply returning a dict will apply. -    """ -    email = serializers.EmailField() - - -class DictStyleSerializerTests(TestCase): -    def test_dict_style_deserialize(self): -        """ -        Ensure serializers can deserialize into a dict. -        """ -        data = {'email': 'foo@example.com'} -        serializer = DictStyleSerializer(data=data) -        self.assertTrue(serializer.is_valid()) -        self.assertEqual(serializer.data, data) - -    def test_dict_style_serialize(self): -        """ -        Ensure serializers can serialize dict objects. -        """ -        data = {'email': 'foo@example.com'} -        serializer = DictStyleSerializer(data) -        self.assertEqual(serializer.data, data) - - -class ValidationTests(TestCase): -    def setUp(self): -        self.comment = Comment( -            'tom@example.com', -            'Happy new year!', -            datetime.datetime(2012, 1, 1) -        ) -        self.data = { -            'email': 'tom@example.com', -            'content': 'x' * 1001, -            'created': datetime.datetime(2012, 1, 1) -        } -        self.actionitem = ActionItem(title='Some to do item',) - -    def test_create(self): -        serializer = CommentSerializer(data=self.data) -        self.assertEqual(serializer.is_valid(), False) -        self.assertEqual(serializer.errors, {'content': ['Ensure this value has at most 1000 characters (it has 1001).']}) - -    def test_update(self): -        serializer = CommentSerializer(self.comment, data=self.data) -        self.assertEqual(serializer.is_valid(), False) -        self.assertEqual(serializer.errors, {'content': ['Ensure this value has at most 1000 characters (it has 1001).']}) - -    def test_update_missing_field(self): -        data = { -            'content': 'xxx', -            'created': datetime.datetime(2012, 1, 1) -        } -        serializer = CommentSerializer(self.comment, data=data) -        self.assertEqual(serializer.is_valid(), False) -        self.assertEqual(serializer.errors, {'email': ['This field is required.']}) - -    def test_missing_bool_with_default(self): -        """Make sure that a boolean value with a 'False' value is not -        mistaken for not having a default.""" -        data = { -            'title': 'Some action item', -            # No 'done' value. -        } -        serializer = ActionItemSerializer(self.actionitem, data=data) -        self.assertEqual(serializer.is_valid(), True) -        self.assertEqual(serializer.errors, {}) - -    def test_cross_field_validation(self): - -        class CommentSerializerWithCrossFieldValidator(CommentSerializer): - -            def validate(self, attrs): -                if attrs["email"] not in attrs["content"]: -                    raise serializers.ValidationError("Email address not in content") -                return attrs - -        data = { -            'email': 'tom@example.com', -            'content': 'A comment from tom@example.com', -            'created': datetime.datetime(2012, 1, 1) -        } - -        serializer = CommentSerializerWithCrossFieldValidator(data=data) -        self.assertTrue(serializer.is_valid()) - -        data['content'] = 'A comment from foo@bar.com' - -        serializer = CommentSerializerWithCrossFieldValidator(data=data) -        self.assertFalse(serializer.is_valid()) -        self.assertEqual(serializer.errors, {'non_field_errors': ['Email address not in content']}) - -    def test_null_is_true_fields(self): -        """ -        Omitting a value for null-field should validate. -        """ -        serializer = PersonSerializer(data={'name': 'marko'}) -        self.assertEqual(serializer.is_valid(), True) -        self.assertEqual(serializer.errors, {}) - -    def test_modelserializer_max_length_exceeded(self): -        data = { -            'title': 'x' * 201, -        } -        serializer = ActionItemSerializer(data=data) -        self.assertEqual(serializer.is_valid(), False) -        self.assertEqual(serializer.errors, {'title': ['Ensure this value has at most 200 characters (it has 201).']}) - -    def test_modelserializer_max_length_exceeded_with_custom_restore(self): -        """ -        When overriding ModelSerializer.restore_object, validation tests should still apply. -        Regression test for #623. - -        https://github.com/tomchristie/django-rest-framework/pull/623 -        """ -        data = { -            'title': 'x' * 201, -        } -        serializer = ActionItemSerializerCustomRestore(data=data) -        self.assertEqual(serializer.is_valid(), False) -        self.assertEqual(serializer.errors, {'title': ['Ensure this value has at most 200 characters (it has 201).']}) - -    def test_default_modelfield_max_length_exceeded(self): -        data = { -            'title': 'Testing "info" field...', -            'info': 'x' * 13, -        } -        serializer = ActionItemSerializer(data=data) -        self.assertEqual(serializer.is_valid(), False) -        self.assertEqual(serializer.errors, {'info': ['Ensure this value has at most 12 characters (it has 13).']}) - -    def test_datetime_validation_failure(self): -        """ -        Test DateTimeField validation errors on non-str values. -        Regression test for #669. - -        https://github.com/tomchristie/django-rest-framework/issues/669 -        """ -        data = self.data -        data['created'] = 0 - -        serializer = CommentSerializer(data=data) -        self.assertEqual(serializer.is_valid(), False) - -        self.assertIn('created', serializer.errors) - -    def test_missing_model_field_exception_msg(self): -        """ -        Assert that a meaningful exception message is outputted when the model -        field is missing (e.g. when mistyping ``model``). -        """ -        class BrokenModelSerializer(serializers.ModelSerializer): -            class Meta: -                fields = ['some_field'] - -        try: -            BrokenModelSerializer() -        except AssertionError as e: -            self.assertEqual(e.args[0], "Serializer class 'BrokenModelSerializer' is missing 'model' Meta option") -        except: -            self.fail('Wrong exception type thrown.') - -    def test_writable_star_source_on_nested_serializer(self): -        """ -        Assert that a nested serializer instantiated with source='*' correctly -        expands the data into the outer serializer. -        """ -        serializer = ModelSerializerWithNestedSerializer(data={ -            'name': 'marko', -            'nested': {'info': 'hi'}}, -        ) -        self.assertEqual(serializer.is_valid(), True) - -    def test_writable_star_source_on_nested_serializer_with_parent_object(self): -        class TitleSerializer(serializers.Serializer): -            title = serializers.WritableField(source='title') - -        class AlbumSerializer(serializers.ModelSerializer): -            nested = TitleSerializer(source='*') - -            class Meta: -                model = Album -                fields = ('nested',) - -        class PhotoSerializer(serializers.ModelSerializer): -            album = AlbumSerializer(source='album') - -            class Meta: -                model = Photo -                fields = ('album', ) - -        photo = Photo(album=Album()) - -        data = {'album': {'nested': {'title': 'test'}}} - -        serializer = PhotoSerializer(photo, data=data) -        self.assertEqual(serializer.is_valid(), True) -        self.assertEqual(serializer.data, data) - -    def test_writable_star_source_with_inner_source_fields(self): -        """ -        Tests that a serializer with source="*" correctly expands the -        it's fields into the outer serializer even if they have their -        own 'source' parameters. -        """ - -        serializer = ModelSerializerWithNestedSerializerWithRenamedField(data={ -            'name': 'marko', -            'nested': {'renamed_info': 'hi'}}, -        ) -        self.assertEqual(serializer.is_valid(), True) -        self.assertEqual(serializer.errors, {}) - - -class CustomValidationTests(TestCase): -    class CommentSerializerWithFieldValidator(CommentSerializer): - -        def validate_email(self, attrs, source): -            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.assertEqual(serializer.errors, {'content': ['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.assertEqual(serializer.errors, {'content': ['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.assertEqual(serializer.errors, {'email': ['Enter a valid email address.']}) - -    def test_partial_update(self): -        """ -        Make sure that validate_email isn't called when partial=True and email -        isn't found in data. -        """ -        initial_data = { -            'email': 'tom@example.com', -            'content': 'A test comment', -            'created': datetime.datetime(2012, 1, 1) -        } - -        serializer = self.CommentSerializerWithFieldValidator(data=initial_data) -        self.assertEqual(serializer.is_valid(), True) -        instance = serializer.object - -        new_content = 'An *updated* test comment' -        partial_data = { -            'content': new_content -        } - -        serializer = self.CommentSerializerWithFieldValidator(instance=instance, -                                                              data=partial_data, -                                                              partial=True) -        self.assertEqual(serializer.is_valid(), True) -        instance = serializer.object -        self.assertEqual(instance.content, new_content) - - -class PositiveIntegerAsChoiceTests(TestCase): -    def test_positive_integer_in_json_is_correctly_parsed(self): -        data = {'some_integer': 1} -        serializer = PositiveIntegerAsChoiceSerializer(data=data) -        self.assertEqual(serializer.is_valid(), True) - - -class ModelValidationTests(TestCase): -    def test_validate_unique(self): -        """ -        Just check if serializers.ModelSerializer handles unique checks via .full_clean() -        """ -        serializer = AlbumsSerializer(data={'title': 'a', 'ref': '1'}) -        serializer.is_valid() -        serializer.save() -        second_serializer = AlbumsSerializer(data={'title': 'a'}) -        self.assertFalse(second_serializer.is_valid()) -        self.assertEqual(second_serializer.errors, {'title': ['Album with this Title already exists.']}) -        third_serializer = AlbumsSerializer(data=[{'title': 'b', 'ref': '1'}, {'title': 'c'}], many=True) -        self.assertFalse(third_serializer.is_valid()) -        self.assertEqual(third_serializer.errors, [{'ref': ['Album with this Ref already exists.']}, {}]) - -    def test_foreign_key_is_null_with_partial(self): -        """ -        Test ModelSerializer validation with partial=True - -        Specifically test that a null foreign key does not pass validation -        """ -        album = Album(title='test') -        album.save() - -        class PhotoSerializer(serializers.ModelSerializer): -            class Meta: -                model = Photo - -        photo_serializer = PhotoSerializer(data={'description': 'test', 'album': album.pk}) -        self.assertTrue(photo_serializer.is_valid()) -        photo = photo_serializer.save() - -        # Updating only the album (foreign key) -        photo_serializer = PhotoSerializer(instance=photo, data={'album': ''}, partial=True) -        self.assertFalse(photo_serializer.is_valid()) -        self.assertTrue('album' in photo_serializer.errors) -        self.assertEqual(photo_serializer.errors['album'], [photo_serializer.error_messages['required']]) - -    def test_foreign_key_with_partial(self): -        """ -        Test ModelSerializer validation with partial=True - -        Specifically test foreign key validation. -        """ - -        album = Album(title='test') -        album.save() - -        class PhotoSerializer(serializers.ModelSerializer): -            class Meta: -                model = Photo - -        photo_serializer = PhotoSerializer(data={'description': 'test', 'album': album.pk}) -        self.assertTrue(photo_serializer.is_valid()) -        photo = photo_serializer.save() - -        # Updating only the album (foreign key) -        photo_serializer = PhotoSerializer(instance=photo, data={'album': album.pk}, partial=True) -        self.assertTrue(photo_serializer.is_valid()) -        self.assertTrue(photo_serializer.save()) - -        # Updating only the description -        photo_serializer = PhotoSerializer(instance=photo, -                                           data={'description': 'new'}, -                                           partial=True) - -        self.assertTrue(photo_serializer.is_valid()) -        self.assertTrue(photo_serializer.save()) - - -class RegexValidationTest(TestCase): -    def test_create_failed(self): -        serializer = BookSerializer(data={'isbn': '1234567890'}) -        self.assertFalse(serializer.is_valid()) -        self.assertEqual(serializer.errors, {'isbn': ['isbn has to be exact 13 numbers']}) - -        serializer = BookSerializer(data={'isbn': '12345678901234'}) -        self.assertFalse(serializer.is_valid()) -        self.assertEqual(serializer.errors, {'isbn': ['isbn has to be exact 13 numbers']}) - -        serializer = BookSerializer(data={'isbn': 'abcdefghijklm'}) -        self.assertFalse(serializer.is_valid()) -        self.assertEqual(serializer.errors, {'isbn': ['isbn has to be exact 13 numbers']}) - -    def test_create_success(self): -        serializer = BookSerializer(data={'isbn': '1234567890123'}) -        self.assertTrue(serializer.is_valid()) - - -class MetadataTests(TestCase): -    def test_empty(self): -        serializer = CommentSerializer() -        expected = { -            'email': serializers.CharField, -            'content': serializers.CharField, -            'created': serializers.DateTimeField -        } -        for field_name, field in expected.items(): -            self.assertTrue(isinstance(serializer.data.fields[field_name], field)) - - -class ManyToManyTests(TestCase): -    def setUp(self): -        class ManyToManySerializer(serializers.ModelSerializer): -            class Meta: -                model = ManyToManyModel - -        self.serializer_class = ManyToManySerializer - -        # An anchor instance to use for the relationship -        self.anchor = Anchor() -        self.anchor.save() - -        # A model instance with a many to many relationship to the anchor -        self.instance = ManyToManyModel() -        self.instance.save() -        self.instance.rel.add(self.anchor) - -        # A serialized representation of the model instance -        self.data = {'id': 1, 'rel': [self.anchor.id]} - -    def test_retrieve(self): -        """ -        Serialize an instance of a model with a ManyToMany relationship. -        """ -        serializer = self.serializer_class(instance=self.instance) -        expected = self.data -        self.assertEqual(serializer.data, expected) - -    def test_create(self): -        """ -        Create an instance of a model with a ManyToMany relationship. -        """ -        data = {'rel': [self.anchor.id]} -        serializer = self.serializer_class(data=data) -        self.assertEqual(serializer.is_valid(), True) -        instance = serializer.save() -        self.assertEqual(len(ManyToManyModel.objects.all()), 2) -        self.assertEqual(instance.pk, 2) -        self.assertEqual(list(instance.rel.all()), [self.anchor]) - -    def test_update(self): -        """ -        Update an instance of a model with a ManyToMany relationship. -        """ -        new_anchor = Anchor() -        new_anchor.save() -        data = {'rel': [self.anchor.id, new_anchor.id]} -        serializer = self.serializer_class(self.instance, data=data) -        self.assertEqual(serializer.is_valid(), True) -        instance = serializer.save() -        self.assertEqual(len(ManyToManyModel.objects.all()), 1) -        self.assertEqual(instance.pk, 1) -        self.assertEqual(list(instance.rel.all()), [self.anchor, new_anchor]) - -    def test_create_empty_relationship(self): -        """ -        Create an instance of a model with a ManyToMany relationship, -        containing no items. -        """ -        data = {'rel': []} -        serializer = self.serializer_class(data=data) -        self.assertEqual(serializer.is_valid(), True) -        instance = serializer.save() -        self.assertEqual(len(ManyToManyModel.objects.all()), 2) -        self.assertEqual(instance.pk, 2) -        self.assertEqual(list(instance.rel.all()), []) - -    def test_update_empty_relationship(self): -        """ -        Update an instance of a model with a ManyToMany relationship, -        containing no items. -        """ -        new_anchor = Anchor() -        new_anchor.save() -        data = {'rel': []} -        serializer = self.serializer_class(self.instance, data=data) -        self.assertEqual(serializer.is_valid(), True) -        instance = serializer.save() -        self.assertEqual(len(ManyToManyModel.objects.all()), 1) -        self.assertEqual(instance.pk, 1) -        self.assertEqual(list(instance.rel.all()), []) - -    def test_create_empty_relationship_flat_data(self): -        """ -        Create an instance of a model with a ManyToMany relationship, -        containing no items, using a representation that does not support -        lists (eg form data). -        """ -        data = MultiValueDict() -        data.setlist('rel', ['']) -        serializer = self.serializer_class(data=data) -        self.assertEqual(serializer.is_valid(), True) -        instance = serializer.save() -        self.assertEqual(len(ManyToManyModel.objects.all()), 2) -        self.assertEqual(instance.pk, 2) -        self.assertEqual(list(instance.rel.all()), []) - - -class ReadOnlyManyToManyTests(TestCase): -    def setUp(self): -        class ReadOnlyManyToManySerializer(serializers.ModelSerializer): -            rel = serializers.RelatedField(many=True, read_only=True) - -            class Meta: -                model = ReadOnlyManyToManyModel - -        self.serializer_class = ReadOnlyManyToManySerializer - -        # An anchor instance to use for the relationship -        self.anchor = Anchor() -        self.anchor.save() - -        # A model instance with a many to many relationship to the anchor -        self.instance = ReadOnlyManyToManyModel() -        self.instance.save() -        self.instance.rel.add(self.anchor) - -        # A serialized representation of the model instance -        self.data = {'rel': [self.anchor.id], 'id': 1, 'text': 'anchor'} - -    def test_update(self): -        """ -        Attempt to update an instance of a model with a ManyToMany -        relationship.  Not updated due to read_only=True -        """ -        new_anchor = Anchor() -        new_anchor.save() -        data = {'rel': [self.anchor.id, new_anchor.id]} -        serializer = self.serializer_class(self.instance, data=data) -        self.assertEqual(serializer.is_valid(), True) -        instance = serializer.save() -        self.assertEqual(len(ReadOnlyManyToManyModel.objects.all()), 1) -        self.assertEqual(instance.pk, 1) -        # rel is still as original (1 entry) -        self.assertEqual(list(instance.rel.all()), [self.anchor]) - -    def test_update_without_relationship(self): -        """ -        Attempt to update an instance of a model where many to ManyToMany -        relationship is not supplied.  Not updated due to read_only=True -        """ -        new_anchor = Anchor() -        new_anchor.save() -        data = {} -        serializer = self.serializer_class(self.instance, data=data) -        self.assertEqual(serializer.is_valid(), True) -        instance = serializer.save() -        self.assertEqual(len(ReadOnlyManyToManyModel.objects.all()), 1) -        self.assertEqual(instance.pk, 1) -        # rel is still as original (1 entry) -        self.assertEqual(list(instance.rel.all()), [self.anchor]) - - -class DefaultValueTests(TestCase): -    def setUp(self): -        class DefaultValueSerializer(serializers.ModelSerializer): -            class Meta: -                model = DefaultValueModel - -        self.serializer_class = DefaultValueSerializer -        self.objects = DefaultValueModel.objects - -    def test_create_using_default(self): -        data = {} -        serializer = self.serializer_class(data=data) -        self.assertEqual(serializer.is_valid(), True) -        instance = serializer.save() -        self.assertEqual(len(self.objects.all()), 1) -        self.assertEqual(instance.pk, 1) -        self.assertEqual(instance.text, 'foobar') - -    def test_create_overriding_default(self): -        data = {'text': 'overridden'} -        serializer = self.serializer_class(data=data) -        self.assertEqual(serializer.is_valid(), True) -        instance = serializer.save() -        self.assertEqual(len(self.objects.all()), 1) -        self.assertEqual(instance.pk, 1) -        self.assertEqual(instance.text, 'overridden') - -    def test_partial_update_default(self): -        """ Regression test for issue #532 """ -        data = {'text': 'overridden'} -        serializer = self.serializer_class(data=data, partial=True) -        self.assertEqual(serializer.is_valid(), True) -        instance = serializer.save() - -        data = {'extra': 'extra_value'} -        serializer = self.serializer_class(instance=instance, data=data, partial=True) -        self.assertEqual(serializer.is_valid(), True) -        instance = serializer.save() - -        self.assertEqual(instance.extra, 'extra_value') -        self.assertEqual(instance.text, 'overridden') - - -class WritableFieldDefaultValueTests(TestCase): - -    def setUp(self): -        self.expected = {'default': 'value'} -        self.create_field = fields.WritableField - -    def test_get_default_value_with_noncallable(self): -        field = self.create_field(default=self.expected) -        got = field.get_default_value() -        self.assertEqual(got, self.expected) - -    def test_get_default_value_with_callable(self): -        field = self.create_field(default=lambda: self.expected) -        got = field.get_default_value() -        self.assertEqual(got, self.expected) - -    def test_get_default_value_when_not_required(self): -        field = self.create_field(default=self.expected, required=False) -        got = field.get_default_value() -        self.assertEqual(got, self.expected) - -    def test_get_default_value_returns_None(self): -        field = self.create_field() -        got = field.get_default_value() -        self.assertIsNone(got) - -    def test_get_default_value_returns_non_True_values(self): -        values = [None, '', False, 0, [], (), {}]  # values that assumed as 'False' in the 'if' clause -        for expected in values: -            field = self.create_field(default=expected) -            got = field.get_default_value() -            self.assertEqual(got, expected) - - -class RelatedFieldDefaultValueTests(WritableFieldDefaultValueTests): - -    def setUp(self): -        self.expected = {'foo': 'bar'} -        self.create_field = relations.RelatedField - -    def test_get_default_value_returns_empty_list(self): -        field = self.create_field(many=True) -        got = field.get_default_value() -        self.assertListEqual(got, []) - -    def test_get_default_value_returns_expected(self): -        expected = [1, 2, 3] -        field = self.create_field(many=True, default=expected) -        got = field.get_default_value() -        self.assertListEqual(got, expected) - - -class CallableDefaultValueTests(TestCase): -    def setUp(self): -        class CallableDefaultValueSerializer(serializers.ModelSerializer): -            class Meta: -                model = CallableDefaultValueModel - -        self.serializer_class = CallableDefaultValueSerializer -        self.objects = CallableDefaultValueModel.objects - -    def test_create_using_default(self): -        data = {} -        serializer = self.serializer_class(data=data) -        self.assertEqual(serializer.is_valid(), True) -        instance = serializer.save() -        self.assertEqual(len(self.objects.all()), 1) -        self.assertEqual(instance.pk, 1) -        self.assertEqual(instance.text, 'foobar') - -    def test_create_overriding_default(self): -        data = {'text': 'overridden'} -        serializer = self.serializer_class(data=data) -        self.assertEqual(serializer.is_valid(), True) -        instance = serializer.save() -        self.assertEqual(len(self.objects.all()), 1) -        self.assertEqual(instance.pk, 1) -        self.assertEqual(instance.text, 'overridden') - - -class ManyRelatedTests(TestCase): -    def test_reverse_relations(self): -        post = BlogPost.objects.create(title="Test blog post") -        post.blogpostcomment_set.create(text="I hate this blog post") -        post.blogpostcomment_set.create(text="I love this blog post") - -        class BlogPostCommentSerializer(serializers.Serializer): -            text = serializers.CharField() - -        class BlogPostSerializer(serializers.Serializer): -            title = serializers.CharField() -            comments = BlogPostCommentSerializer(source='blogpostcomment_set') - -        serializer = BlogPostSerializer(instance=post) -        expected = { -            'title': 'Test blog post', -            'comments': [ -                {'text': 'I hate this blog post'}, -                {'text': 'I love this blog post'} -            ] -        } - -        self.assertEqual(serializer.data, expected) - -    def test_include_reverse_relations(self): -        post = BlogPost.objects.create(title="Test blog post") -        post.blogpostcomment_set.create(text="I hate this blog post") -        post.blogpostcomment_set.create(text="I love this blog post") - -        class BlogPostSerializer(serializers.ModelSerializer): -            class Meta: -                model = BlogPost -                fields = ('id', 'title', 'blogpostcomment_set') - -        serializer = BlogPostSerializer(instance=post) -        expected = { -            'id': 1, 'title': 'Test blog post', 'blogpostcomment_set': [1, 2] -        } -        self.assertEqual(serializer.data, expected) - -    def test_depth_include_reverse_relations(self): -        post = BlogPost.objects.create(title="Test blog post") -        post.blogpostcomment_set.create(text="I hate this blog post") -        post.blogpostcomment_set.create(text="I love this blog post") - -        class BlogPostSerializer(serializers.ModelSerializer): -            class Meta: -                model = BlogPost -                fields = ('id', 'title', 'blogpostcomment_set') -                depth = 1 - -        serializer = BlogPostSerializer(instance=post) -        expected = { -            'id': 1, 'title': 'Test blog post', -            'blogpostcomment_set': [ -                {'id': 1, 'text': 'I hate this blog post', 'blog_post': 1}, -                {'id': 2, 'text': 'I love this blog post', 'blog_post': 1} -            ] -        } -        self.assertEqual(serializer.data, expected) - -    def test_callable_source(self): -        post = BlogPost.objects.create(title="Test blog post") -        post.blogpostcomment_set.create(text="I love this blog post") - -        class BlogPostCommentSerializer(serializers.Serializer): -            text = serializers.CharField() - -        class BlogPostSerializer(serializers.Serializer): -            title = serializers.CharField() -            first_comment = BlogPostCommentSerializer(source='get_first_comment') - -        serializer = BlogPostSerializer(post) - -        expected = { -            'title': 'Test blog post', -            'first_comment': {'text': 'I love this blog post'} -        } -        self.assertEqual(serializer.data, expected) - - -class RelatedTraversalTest(TestCase): -    def test_nested_traversal(self): -        """ -        Source argument should support dotted.source notation. -        """ -        user = Person.objects.create(name="django") -        post = BlogPost.objects.create(title="Test blog post", writer=user) -        post.blogpostcomment_set.create(text="I love this blog post") +# class BasicTests(TestCase): +#     def setUp(self): +#         self.comment = Comment( +#             'tom@example.com', +#             'Happy new year!', +#             datetime.datetime(2012, 1, 1) +#         ) +#         self.actionitem = ActionItem(title='Some to do item',) +#         self.data = { +#             'email': 'tom@example.com', +#             'content': 'Happy new year!', +#             'created': datetime.datetime(2012, 1, 1), +#             'sub_comment': 'This wont change' +#         } +#         self.expected = { +#             'email': 'tom@example.com', +#             'content': 'Happy new year!', +#             '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() +#         expected = { +#             'email': '', +#             'content': '', +#             'created': None +#         } +#         self.assertEqual(serializer.data, expected) + +#     def test_retrieve(self): +#         serializer = CommentSerializer(self.comment) +#         self.assertEqual(serializer.data, self.expected) + +#     def test_create(self): +#         serializer = CommentSerializer(data=self.data) +#         expected = self.comment +#         self.assertEqual(serializer.is_valid(), True) +#         self.assertEqual(serializer.object, expected) +#         self.assertFalse(serializer.object is expected) +#         self.assertEqual(serializer.data['sub_comment'], 'And Merry Christmas!') + +#     def test_create_nested(self): +#         """Test a serializer with nested data.""" +#         names = {'first': 'John', 'last': 'Doe', 'initials': 'jd'} +#         data = {'ssn': '1234567890', 'names': names} +#         serializer = PersonIdentifierSerializer(data=data) + +#         self.assertEqual(serializer.is_valid(), True) +#         self.assertEqual(serializer.object, data) +#         self.assertFalse(serializer.object is data) +#         self.assertEqual(serializer.data['names'], names) + +#     def test_create_partial_nested(self): +#         """Test a serializer with nested data which has missing fields.""" +#         names = {'first': 'John'} +#         data = {'ssn': '1234567890', 'names': names} +#         serializer = PersonIdentifierSerializer(data=data) + +#         expected_names = {'first': 'John', 'last': '', 'initials': ''} +#         data['names'] = expected_names + +#         self.assertEqual(serializer.is_valid(), True) +#         self.assertEqual(serializer.object, data) +#         self.assertFalse(serializer.object is expected_names) +#         self.assertEqual(serializer.data['names'], expected_names) + +#     def test_null_nested(self): +#         """Test a serializer with a nonexistent nested field""" +#         data = {'ssn': '1234567890'} +#         serializer = PersonIdentifierSerializer(data=data) + +#         self.assertEqual(serializer.is_valid(), True) +#         self.assertEqual(serializer.object, data) +#         self.assertFalse(serializer.object is data) +#         expected = {'ssn': '1234567890', 'names': None} +#         self.assertEqual(serializer.data, expected) + +#     def test_update(self): +#         serializer = CommentSerializer(self.comment, data=self.data) +#         expected = self.comment +#         self.assertEqual(serializer.is_valid(), True) +#         self.assertEqual(serializer.object, expected) +#         self.assertTrue(serializer.object is expected) +#         self.assertEqual(serializer.data['sub_comment'], 'And Merry Christmas!') + +#     def test_partial_update(self): +#         msg = 'Merry New Year!' +#         partial_data = {'content': msg} +#         serializer = CommentSerializer(self.comment, data=partial_data) +#         self.assertEqual(serializer.is_valid(), False) +#         serializer = CommentSerializer(self.comment, data=partial_data, partial=True) +#         expected = self.comment +#         self.assertEqual(serializer.is_valid(), True) +#         self.assertEqual(serializer.object, expected) +#         self.assertTrue(serializer.object is expected) +#         self.assertEqual(serializer.data['content'], msg) + +#     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.assertEqual( +#             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.assertEqual(serializer.data['info'], expected) + +#     def test_read_only_fields(self): +#         """ +#         Attempting to update fields set as read_only should have no effect. +#         """ +#         serializer = PersonSerializer(self.person, data={'name': 'dwight', 'age': 99}) +#         self.assertEqual(serializer.is_valid(), True) +#         instance = serializer.save() +#         self.assertEqual(serializer.errors, {}) +#         # Assert age is unchanged (35) +#         self.assertEqual(instance.age, self.person_data['age']) + +#     def test_invalid_read_only_fields(self): +#         """ +#         Regression test for #652. +#         """ +#         self.assertRaises(AssertionError, PersonSerializerInvalidReadOnly, []) + +#     def test_serializer_data_is_cleared_on_save(self): +#         """ +#         Check _data attribute is cleared on `save()` + +#         Regression test for #1116 +#             — id field is not populated if `data` is accessed prior to `save()` +#         """ +#         serializer = ActionItemSerializer(self.actionitem) +#         self.assertIsNone(serializer.data.get('id', None), 'New instance. `id` should not be set.') +#         serializer.save() +#         self.assertIsNotNone(serializer.data.get('id', None), 'Model is saved. `id` should be set.') + +#     def test_fields_marked_as_not_required_are_excluded_from_validation(self): +#         """ +#         Check that fields with `required=False` are included in list of exclusions. +#         """ +#         serializer = ActionItemSerializerOptionalFields(self.actionitem) +#         exclusions = serializer.get_validation_exclusions() +#         self.assertTrue('title' in exclusions, '`title` field was marked `required=False` and should be excluded') + + +# class DictStyleSerializer(serializers.Serializer): +#     """ +#     Note that we don't have any `restore_object` method, so the default +#     case of simply returning a dict will apply. +#     """ +#     email = serializers.EmailField() + + +# class DictStyleSerializerTests(TestCase): +#     def test_dict_style_deserialize(self): +#         """ +#         Ensure serializers can deserialize into a dict. +#         """ +#         data = {'email': 'foo@example.com'} +#         serializer = DictStyleSerializer(data=data) +#         self.assertTrue(serializer.is_valid()) +#         self.assertEqual(serializer.data, data) + +#     def test_dict_style_serialize(self): +#         """ +#         Ensure serializers can serialize dict objects. +#         """ +#         data = {'email': 'foo@example.com'} +#         serializer = DictStyleSerializer(data) +#         self.assertEqual(serializer.data, data) + + +# class ValidationTests(TestCase): +#     def setUp(self): +#         self.comment = Comment( +#             'tom@example.com', +#             'Happy new year!', +#             datetime.datetime(2012, 1, 1) +#         ) +#         self.data = { +#             'email': 'tom@example.com', +#             'content': 'x' * 1001, +#             'created': datetime.datetime(2012, 1, 1) +#         } +#         self.actionitem = ActionItem(title='Some to do item',) + +#     def test_create(self): +#         serializer = CommentSerializer(data=self.data) +#         self.assertEqual(serializer.is_valid(), False) +#         self.assertEqual(serializer.errors, {'content': ['Ensure this value has at most 1000 characters (it has 1001).']}) + +#     def test_update(self): +#         serializer = CommentSerializer(self.comment, data=self.data) +#         self.assertEqual(serializer.is_valid(), False) +#         self.assertEqual(serializer.errors, {'content': ['Ensure this value has at most 1000 characters (it has 1001).']}) + +#     def test_update_missing_field(self): +#         data = { +#             'content': 'xxx', +#             'created': datetime.datetime(2012, 1, 1) +#         } +#         serializer = CommentSerializer(self.comment, data=data) +#         self.assertEqual(serializer.is_valid(), False) +#         self.assertEqual(serializer.errors, {'email': ['This field is required.']}) + +#     def test_missing_bool_with_default(self): +#         """Make sure that a boolean value with a 'False' value is not +#         mistaken for not having a default.""" +#         data = { +#             'title': 'Some action item', +#             # No 'done' value. +#         } +#         serializer = ActionItemSerializer(self.actionitem, data=data) +#         self.assertEqual(serializer.is_valid(), True) +#         self.assertEqual(serializer.errors, {}) + +#     def test_cross_field_validation(self): + +#         class CommentSerializerWithCrossFieldValidator(CommentSerializer): + +#             def validate(self, attrs): +#                 if attrs["email"] not in attrs["content"]: +#                     raise serializers.ValidationError("Email address not in content") +#                 return attrs + +#         data = { +#             'email': 'tom@example.com', +#             'content': 'A comment from tom@example.com', +#             'created': datetime.datetime(2012, 1, 1) +#         } + +#         serializer = CommentSerializerWithCrossFieldValidator(data=data) +#         self.assertTrue(serializer.is_valid()) + +#         data['content'] = 'A comment from foo@bar.com' + +#         serializer = CommentSerializerWithCrossFieldValidator(data=data) +#         self.assertFalse(serializer.is_valid()) +#         self.assertEqual(serializer.errors, {'non_field_errors': ['Email address not in content']}) + +#     def test_null_is_true_fields(self): +#         """ +#         Omitting a value for null-field should validate. +#         """ +#         serializer = PersonSerializer(data={'name': 'marko'}) +#         self.assertEqual(serializer.is_valid(), True) +#         self.assertEqual(serializer.errors, {}) + +#     def test_modelserializer_max_length_exceeded(self): +#         data = { +#             'title': 'x' * 201, +#         } +#         serializer = ActionItemSerializer(data=data) +#         self.assertEqual(serializer.is_valid(), False) +#         self.assertEqual(serializer.errors, {'title': ['Ensure this value has at most 200 characters (it has 201).']}) + +#     def test_modelserializer_max_length_exceeded_with_custom_restore(self): +#         """ +#         When overriding ModelSerializer.restore_object, validation tests should still apply. +#         Regression test for #623. + +#         https://github.com/tomchristie/django-rest-framework/pull/623 +#         """ +#         data = { +#             'title': 'x' * 201, +#         } +#         serializer = ActionItemSerializerCustomRestore(data=data) +#         self.assertEqual(serializer.is_valid(), False) +#         self.assertEqual(serializer.errors, {'title': ['Ensure this value has at most 200 characters (it has 201).']}) + +#     def test_default_modelfield_max_length_exceeded(self): +#         data = { +#             'title': 'Testing "info" field...', +#             'info': 'x' * 13, +#         } +#         serializer = ActionItemSerializer(data=data) +#         self.assertEqual(serializer.is_valid(), False) +#         self.assertEqual(serializer.errors, {'info': ['Ensure this value has at most 12 characters (it has 13).']}) + +#     def test_datetime_validation_failure(self): +#         """ +#         Test DateTimeField validation errors on non-str values. +#         Regression test for #669. + +#         https://github.com/tomchristie/django-rest-framework/issues/669 +#         """ +#         data = self.data +#         data['created'] = 0 + +#         serializer = CommentSerializer(data=data) +#         self.assertEqual(serializer.is_valid(), False) + +#         self.assertIn('created', serializer.errors) + +#     def test_missing_model_field_exception_msg(self): +#         """ +#         Assert that a meaningful exception message is outputted when the model +#         field is missing (e.g. when mistyping ``model``). +#         """ +#         class BrokenModelSerializer(serializers.ModelSerializer): +#             class Meta: +#                 fields = ['some_field'] + +#         try: +#             BrokenModelSerializer() +#         except AssertionError as e: +#             self.assertEqual(e.args[0], "Serializer class 'BrokenModelSerializer' is missing 'model' Meta option") +#         except: +#             self.fail('Wrong exception type thrown.') + +#     def test_writable_star_source_on_nested_serializer(self): +#         """ +#         Assert that a nested serializer instantiated with source='*' correctly +#         expands the data into the outer serializer. +#         """ +#         serializer = ModelSerializerWithNestedSerializer(data={ +#             'name': 'marko', +#             'nested': {'info': 'hi'}}, +#         ) +#         self.assertEqual(serializer.is_valid(), True) + +#     def test_writable_star_source_on_nested_serializer_with_parent_object(self): +#         class TitleSerializer(serializers.Serializer): +#             title = serializers.WritableField(source='title') + +#         class AlbumSerializer(serializers.ModelSerializer): +#             nested = TitleSerializer(source='*') + +#             class Meta: +#                 model = Album +#                 fields = ('nested',) + +#         class PhotoSerializer(serializers.ModelSerializer): +#             album = AlbumSerializer(source='album') + +#             class Meta: +#                 model = Photo +#                 fields = ('album', ) + +#         photo = Photo(album=Album()) + +#         data = {'album': {'nested': {'title': 'test'}}} + +#         serializer = PhotoSerializer(photo, data=data) +#         self.assertEqual(serializer.is_valid(), True) +#         self.assertEqual(serializer.data, data) + +#     def test_writable_star_source_with_inner_source_fields(self): +#         """ +#         Tests that a serializer with source="*" correctly expands the +#         it's fields into the outer serializer even if they have their +#         own 'source' parameters. +#         """ + +#         serializer = ModelSerializerWithNestedSerializerWithRenamedField(data={ +#             'name': 'marko', +#             'nested': {'renamed_info': 'hi'}}, +#         ) +#         self.assertEqual(serializer.is_valid(), True) +#         self.assertEqual(serializer.errors, {}) + + +# class CustomValidationTests(TestCase): +#     class CommentSerializerWithFieldValidator(CommentSerializer): + +#         def validate_email(self, attrs, source): +#             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.assertEqual(serializer.errors, {'content': ['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.assertEqual(serializer.errors, {'content': ['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.assertEqual(serializer.errors, {'email': ['Enter a valid email address.']}) + +#     def test_partial_update(self): +#         """ +#         Make sure that validate_email isn't called when partial=True and email +#         isn't found in data. +#         """ +#         initial_data = { +#             'email': 'tom@example.com', +#             'content': 'A test comment', +#             'created': datetime.datetime(2012, 1, 1) +#         } + +#         serializer = self.CommentSerializerWithFieldValidator(data=initial_data) +#         self.assertEqual(serializer.is_valid(), True) +#         instance = serializer.object + +#         new_content = 'An *updated* test comment' +#         partial_data = { +#             'content': new_content +#         } + +#         serializer = self.CommentSerializerWithFieldValidator(instance=instance, +#                                                               data=partial_data, +#                                                               partial=True) +#         self.assertEqual(serializer.is_valid(), True) +#         instance = serializer.object +#         self.assertEqual(instance.content, new_content) + + +# class PositiveIntegerAsChoiceTests(TestCase): +#     def test_positive_integer_in_json_is_correctly_parsed(self): +#         data = {'some_integer': 1} +#         serializer = PositiveIntegerAsChoiceSerializer(data=data) +#         self.assertEqual(serializer.is_valid(), True) + + +# class ModelValidationTests(TestCase): +#     def test_validate_unique(self): +#         """ +#         Just check if serializers.ModelSerializer handles unique checks via .full_clean() +#         """ +#         serializer = AlbumsSerializer(data={'title': 'a', 'ref': '1'}) +#         serializer.is_valid() +#         serializer.save() +#         second_serializer = AlbumsSerializer(data={'title': 'a'}) +#         self.assertFalse(second_serializer.is_valid()) +#         self.assertEqual(second_serializer.errors, {'title': ['Album with this Title already exists.']}) +#         third_serializer = AlbumsSerializer(data=[{'title': 'b', 'ref': '1'}, {'title': 'c'}], many=True) +#         self.assertFalse(third_serializer.is_valid()) +#         self.assertEqual(third_serializer.errors, [{'ref': ['Album with this Ref already exists.']}, {}]) + +#     def test_foreign_key_is_null_with_partial(self): +#         """ +#         Test ModelSerializer validation with partial=True + +#         Specifically test that a null foreign key does not pass validation +#         """ +#         album = Album(title='test') +#         album.save() + +#         class PhotoSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = Photo + +#         photo_serializer = PhotoSerializer(data={'description': 'test', 'album': album.pk}) +#         self.assertTrue(photo_serializer.is_valid()) +#         photo = photo_serializer.save() + +#         # Updating only the album (foreign key) +#         photo_serializer = PhotoSerializer(instance=photo, data={'album': ''}, partial=True) +#         self.assertFalse(photo_serializer.is_valid()) +#         self.assertTrue('album' in photo_serializer.errors) +#         self.assertEqual(photo_serializer.errors['album'], [photo_serializer.error_messages['required']]) + +#     def test_foreign_key_with_partial(self): +#         """ +#         Test ModelSerializer validation with partial=True + +#         Specifically test foreign key validation. +#         """ + +#         album = Album(title='test') +#         album.save() + +#         class PhotoSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = Photo + +#         photo_serializer = PhotoSerializer(data={'description': 'test', 'album': album.pk}) +#         self.assertTrue(photo_serializer.is_valid()) +#         photo = photo_serializer.save() + +#         # Updating only the album (foreign key) +#         photo_serializer = PhotoSerializer(instance=photo, data={'album': album.pk}, partial=True) +#         self.assertTrue(photo_serializer.is_valid()) +#         self.assertTrue(photo_serializer.save()) + +#         # Updating only the description +#         photo_serializer = PhotoSerializer(instance=photo, +#                                            data={'description': 'new'}, +#                                            partial=True) + +#         self.assertTrue(photo_serializer.is_valid()) +#         self.assertTrue(photo_serializer.save()) + + +# class RegexValidationTest(TestCase): +#     def test_create_failed(self): +#         serializer = BookSerializer(data={'isbn': '1234567890'}) +#         self.assertFalse(serializer.is_valid()) +#         self.assertEqual(serializer.errors, {'isbn': ['isbn has to be exact 13 numbers']}) + +#         serializer = BookSerializer(data={'isbn': '12345678901234'}) +#         self.assertFalse(serializer.is_valid()) +#         self.assertEqual(serializer.errors, {'isbn': ['isbn has to be exact 13 numbers']}) + +#         serializer = BookSerializer(data={'isbn': 'abcdefghijklm'}) +#         self.assertFalse(serializer.is_valid()) +#         self.assertEqual(serializer.errors, {'isbn': ['isbn has to be exact 13 numbers']}) + +#     def test_create_success(self): +#         serializer = BookSerializer(data={'isbn': '1234567890123'}) +#         self.assertTrue(serializer.is_valid()) + + +# class MetadataTests(TestCase): +#     def test_empty(self): +#         serializer = CommentSerializer() +#         expected = { +#             'email': serializers.CharField, +#             'content': serializers.CharField, +#             'created': serializers.DateTimeField +#         } +#         for field_name, field in expected.items(): +#             self.assertTrue(isinstance(serializer.data.fields[field_name], field)) + + +# class ManyToManyTests(TestCase): +#     def setUp(self): +#         class ManyToManySerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = ManyToManyModel + +#         self.serializer_class = ManyToManySerializer + +#         # An anchor instance to use for the relationship +#         self.anchor = Anchor() +#         self.anchor.save() + +#         # A model instance with a many to many relationship to the anchor +#         self.instance = ManyToManyModel() +#         self.instance.save() +#         self.instance.rel.add(self.anchor) + +#         # A serialized representation of the model instance +#         self.data = {'id': 1, 'rel': [self.anchor.id]} + +#     def test_retrieve(self): +#         """ +#         Serialize an instance of a model with a ManyToMany relationship. +#         """ +#         serializer = self.serializer_class(instance=self.instance) +#         expected = self.data +#         self.assertEqual(serializer.data, expected) + +#     def test_create(self): +#         """ +#         Create an instance of a model with a ManyToMany relationship. +#         """ +#         data = {'rel': [self.anchor.id]} +#         serializer = self.serializer_class(data=data) +#         self.assertEqual(serializer.is_valid(), True) +#         instance = serializer.save() +#         self.assertEqual(len(ManyToManyModel.objects.all()), 2) +#         self.assertEqual(instance.pk, 2) +#         self.assertEqual(list(instance.rel.all()), [self.anchor]) + +#     def test_update(self): +#         """ +#         Update an instance of a model with a ManyToMany relationship. +#         """ +#         new_anchor = Anchor() +#         new_anchor.save() +#         data = {'rel': [self.anchor.id, new_anchor.id]} +#         serializer = self.serializer_class(self.instance, data=data) +#         self.assertEqual(serializer.is_valid(), True) +#         instance = serializer.save() +#         self.assertEqual(len(ManyToManyModel.objects.all()), 1) +#         self.assertEqual(instance.pk, 1) +#         self.assertEqual(list(instance.rel.all()), [self.anchor, new_anchor]) + +#     def test_create_empty_relationship(self): +#         """ +#         Create an instance of a model with a ManyToMany relationship, +#         containing no items. +#         """ +#         data = {'rel': []} +#         serializer = self.serializer_class(data=data) +#         self.assertEqual(serializer.is_valid(), True) +#         instance = serializer.save() +#         self.assertEqual(len(ManyToManyModel.objects.all()), 2) +#         self.assertEqual(instance.pk, 2) +#         self.assertEqual(list(instance.rel.all()), []) + +#     def test_update_empty_relationship(self): +#         """ +#         Update an instance of a model with a ManyToMany relationship, +#         containing no items. +#         """ +#         new_anchor = Anchor() +#         new_anchor.save() +#         data = {'rel': []} +#         serializer = self.serializer_class(self.instance, data=data) +#         self.assertEqual(serializer.is_valid(), True) +#         instance = serializer.save() +#         self.assertEqual(len(ManyToManyModel.objects.all()), 1) +#         self.assertEqual(instance.pk, 1) +#         self.assertEqual(list(instance.rel.all()), []) + +#     def test_create_empty_relationship_flat_data(self): +#         """ +#         Create an instance of a model with a ManyToMany relationship, +#         containing no items, using a representation that does not support +#         lists (eg form data). +#         """ +#         data = MultiValueDict() +#         data.setlist('rel', ['']) +#         serializer = self.serializer_class(data=data) +#         self.assertEqual(serializer.is_valid(), True) +#         instance = serializer.save() +#         self.assertEqual(len(ManyToManyModel.objects.all()), 2) +#         self.assertEqual(instance.pk, 2) +#         self.assertEqual(list(instance.rel.all()), []) + + +# class ReadOnlyManyToManyTests(TestCase): +#     def setUp(self): +#         class ReadOnlyManyToManySerializer(serializers.ModelSerializer): +#             rel = serializers.RelatedField(many=True, read_only=True) + +#             class Meta: +#                 model = ReadOnlyManyToManyModel + +#         self.serializer_class = ReadOnlyManyToManySerializer + +#         # An anchor instance to use for the relationship +#         self.anchor = Anchor() +#         self.anchor.save() + +#         # A model instance with a many to many relationship to the anchor +#         self.instance = ReadOnlyManyToManyModel() +#         self.instance.save() +#         self.instance.rel.add(self.anchor) + +#         # A serialized representation of the model instance +#         self.data = {'rel': [self.anchor.id], 'id': 1, 'text': 'anchor'} + +#     def test_update(self): +#         """ +#         Attempt to update an instance of a model with a ManyToMany +#         relationship.  Not updated due to read_only=True +#         """ +#         new_anchor = Anchor() +#         new_anchor.save() +#         data = {'rel': [self.anchor.id, new_anchor.id]} +#         serializer = self.serializer_class(self.instance, data=data) +#         self.assertEqual(serializer.is_valid(), True) +#         instance = serializer.save() +#         self.assertEqual(len(ReadOnlyManyToManyModel.objects.all()), 1) +#         self.assertEqual(instance.pk, 1) +#         # rel is still as original (1 entry) +#         self.assertEqual(list(instance.rel.all()), [self.anchor]) + +#     def test_update_without_relationship(self): +#         """ +#         Attempt to update an instance of a model where many to ManyToMany +#         relationship is not supplied.  Not updated due to read_only=True +#         """ +#         new_anchor = Anchor() +#         new_anchor.save() +#         data = {} +#         serializer = self.serializer_class(self.instance, data=data) +#         self.assertEqual(serializer.is_valid(), True) +#         instance = serializer.save() +#         self.assertEqual(len(ReadOnlyManyToManyModel.objects.all()), 1) +#         self.assertEqual(instance.pk, 1) +#         # rel is still as original (1 entry) +#         self.assertEqual(list(instance.rel.all()), [self.anchor]) + + +# class DefaultValueTests(TestCase): +#     def setUp(self): +#         class DefaultValueSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = DefaultValueModel + +#         self.serializer_class = DefaultValueSerializer +#         self.objects = DefaultValueModel.objects + +#     def test_create_using_default(self): +#         data = {} +#         serializer = self.serializer_class(data=data) +#         self.assertEqual(serializer.is_valid(), True) +#         instance = serializer.save() +#         self.assertEqual(len(self.objects.all()), 1) +#         self.assertEqual(instance.pk, 1) +#         self.assertEqual(instance.text, 'foobar') + +#     def test_create_overriding_default(self): +#         data = {'text': 'overridden'} +#         serializer = self.serializer_class(data=data) +#         self.assertEqual(serializer.is_valid(), True) +#         instance = serializer.save() +#         self.assertEqual(len(self.objects.all()), 1) +#         self.assertEqual(instance.pk, 1) +#         self.assertEqual(instance.text, 'overridden') + +#     def test_partial_update_default(self): +#         """ Regression test for issue #532 """ +#         data = {'text': 'overridden'} +#         serializer = self.serializer_class(data=data, partial=True) +#         self.assertEqual(serializer.is_valid(), True) +#         instance = serializer.save() + +#         data = {'extra': 'extra_value'} +#         serializer = self.serializer_class(instance=instance, data=data, partial=True) +#         self.assertEqual(serializer.is_valid(), True) +#         instance = serializer.save() + +#         self.assertEqual(instance.extra, 'extra_value') +#         self.assertEqual(instance.text, 'overridden') + + +# class WritableFieldDefaultValueTests(TestCase): + +#     def setUp(self): +#         self.expected = {'default': 'value'} +#         self.create_field = fields.WritableField + +#     def test_get_default_value_with_noncallable(self): +#         field = self.create_field(default=self.expected) +#         got = field.get_default_value() +#         self.assertEqual(got, self.expected) + +#     def test_get_default_value_with_callable(self): +#         field = self.create_field(default=lambda: self.expected) +#         got = field.get_default_value() +#         self.assertEqual(got, self.expected) + +#     def test_get_default_value_when_not_required(self): +#         field = self.create_field(default=self.expected, required=False) +#         got = field.get_default_value() +#         self.assertEqual(got, self.expected) + +#     def test_get_default_value_returns_None(self): +#         field = self.create_field() +#         got = field.get_default_value() +#         self.assertIsNone(got) + +#     def test_get_default_value_returns_non_True_values(self): +#         values = [None, '', False, 0, [], (), {}]  # values that assumed as 'False' in the 'if' clause +#         for expected in values: +#             field = self.create_field(default=expected) +#             got = field.get_default_value() +#             self.assertEqual(got, expected) + + +# class RelatedFieldDefaultValueTests(WritableFieldDefaultValueTests): + +#     def setUp(self): +#         self.expected = {'foo': 'bar'} +#         self.create_field = relations.RelatedField + +#     def test_get_default_value_returns_empty_list(self): +#         field = self.create_field(many=True) +#         got = field.get_default_value() +#         self.assertListEqual(got, []) + +#     def test_get_default_value_returns_expected(self): +#         expected = [1, 2, 3] +#         field = self.create_field(many=True, default=expected) +#         got = field.get_default_value() +#         self.assertListEqual(got, expected) + + +# class CallableDefaultValueTests(TestCase): +#     def setUp(self): +#         class CallableDefaultValueSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = CallableDefaultValueModel + +#         self.serializer_class = CallableDefaultValueSerializer +#         self.objects = CallableDefaultValueModel.objects + +#     def test_create_using_default(self): +#         data = {} +#         serializer = self.serializer_class(data=data) +#         self.assertEqual(serializer.is_valid(), True) +#         instance = serializer.save() +#         self.assertEqual(len(self.objects.all()), 1) +#         self.assertEqual(instance.pk, 1) +#         self.assertEqual(instance.text, 'foobar') + +#     def test_create_overriding_default(self): +#         data = {'text': 'overridden'} +#         serializer = self.serializer_class(data=data) +#         self.assertEqual(serializer.is_valid(), True) +#         instance = serializer.save() +#         self.assertEqual(len(self.objects.all()), 1) +#         self.assertEqual(instance.pk, 1) +#         self.assertEqual(instance.text, 'overridden') + + +# class ManyRelatedTests(TestCase): +#     def test_reverse_relations(self): +#         post = BlogPost.objects.create(title="Test blog post") +#         post.blogpostcomment_set.create(text="I hate this blog post") +#         post.blogpostcomment_set.create(text="I love this blog post") + +#         class BlogPostCommentSerializer(serializers.Serializer): +#             text = serializers.CharField() + +#         class BlogPostSerializer(serializers.Serializer): +#             title = serializers.CharField() +#             comments = BlogPostCommentSerializer(source='blogpostcomment_set') + +#         serializer = BlogPostSerializer(instance=post) +#         expected = { +#             'title': 'Test blog post', +#             'comments': [ +#                 {'text': 'I hate this blog post'}, +#                 {'text': 'I love this blog post'} +#             ] +#         } + +#         self.assertEqual(serializer.data, expected) + +#     def test_include_reverse_relations(self): +#         post = BlogPost.objects.create(title="Test blog post") +#         post.blogpostcomment_set.create(text="I hate this blog post") +#         post.blogpostcomment_set.create(text="I love this blog post") + +#         class BlogPostSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = BlogPost +#                 fields = ('id', 'title', 'blogpostcomment_set') + +#         serializer = BlogPostSerializer(instance=post) +#         expected = { +#             'id': 1, 'title': 'Test blog post', 'blogpostcomment_set': [1, 2] +#         } +#         self.assertEqual(serializer.data, expected) + +#     def test_depth_include_reverse_relations(self): +#         post = BlogPost.objects.create(title="Test blog post") +#         post.blogpostcomment_set.create(text="I hate this blog post") +#         post.blogpostcomment_set.create(text="I love this blog post") + +#         class BlogPostSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = BlogPost +#                 fields = ('id', 'title', 'blogpostcomment_set') +#                 depth = 1 + +#         serializer = BlogPostSerializer(instance=post) +#         expected = { +#             'id': 1, 'title': 'Test blog post', +#             'blogpostcomment_set': [ +#                 {'id': 1, 'text': 'I hate this blog post', 'blog_post': 1}, +#                 {'id': 2, 'text': 'I love this blog post', 'blog_post': 1} +#             ] +#         } +#         self.assertEqual(serializer.data, expected) + +#     def test_callable_source(self): +#         post = BlogPost.objects.create(title="Test blog post") +#         post.blogpostcomment_set.create(text="I love this blog post") + +#         class BlogPostCommentSerializer(serializers.Serializer): +#             text = serializers.CharField() + +#         class BlogPostSerializer(serializers.Serializer): +#             title = serializers.CharField() +#             first_comment = BlogPostCommentSerializer(source='get_first_comment') + +#         serializer = BlogPostSerializer(post) + +#         expected = { +#             'title': 'Test blog post', +#             'first_comment': {'text': 'I love this blog post'} +#         } +#         self.assertEqual(serializer.data, expected) + + +# class RelatedTraversalTest(TestCase): +#     def test_nested_traversal(self): +#         """ +#         Source argument should support dotted.source notation. +#         """ +#         user = Person.objects.create(name="django") +#         post = BlogPost.objects.create(title="Test blog post", writer=user) +#         post.blogpostcomment_set.create(text="I love this blog post") -        class PersonSerializer(serializers.ModelSerializer): -            class Meta: -                model = Person -                fields = ("name", "age") +#         class PersonSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = Person +#                 fields = ("name", "age") -        class BlogPostCommentSerializer(serializers.ModelSerializer): -            class Meta: -                model = BlogPostComment -                fields = ("text", "post_owner") +#         class BlogPostCommentSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = BlogPostComment +#                 fields = ("text", "post_owner") -            text = serializers.CharField() -            post_owner = PersonSerializer(source='blog_post.writer') +#             text = serializers.CharField() +#             post_owner = PersonSerializer(source='blog_post.writer') -        class BlogPostSerializer(serializers.Serializer): -            title = serializers.CharField() -            comments = BlogPostCommentSerializer(source='blogpostcomment_set') +#         class BlogPostSerializer(serializers.Serializer): +#             title = serializers.CharField() +#             comments = BlogPostCommentSerializer(source='blogpostcomment_set') -        serializer = BlogPostSerializer(instance=post) +#         serializer = BlogPostSerializer(instance=post) -        expected = { -            'title': 'Test blog post', -            'comments': [{ -                'text': 'I love this blog post', -                'post_owner': { -                    "name": "django", -                    "age": None -                } -            }] -        } - -        self.assertEqual(serializer.data, expected) +#         expected = { +#             'title': 'Test blog post', +#             'comments': [{ +#                 'text': 'I love this blog post', +#                 'post_owner': { +#                     "name": "django", +#                     "age": None +#                 } +#             }] +#         } + +#         self.assertEqual(serializer.data, expected) -    def test_nested_traversal_with_none(self): -        """ -        If a component of the dotted.source is None, return None for the field. -        """ -        from tests.models import NullableForeignKeySource -        instance = NullableForeignKeySource.objects.create(name='Source with null FK') - -        class NullableSourceSerializer(serializers.Serializer): -            target_name = serializers.Field(source='target.name') - -        serializer = NullableSourceSerializer(instance=instance) - -        expected = { -            'target_name': None, -        } - -        self.assertEqual(serializer.data, expected) - - -class SerializerMethodFieldTests(TestCase): -    def setUp(self): - -        class BoopSerializer(serializers.Serializer): -            beep = serializers.SerializerMethodField('get_beep') -            boop = serializers.Field() -            boop_count = serializers.SerializerMethodField('get_boop_count') - -            def get_beep(self, obj): -                return 'hello!' - -            def get_boop_count(self, obj): -                return len(obj.boop) - -        self.serializer_class = BoopSerializer - -    def test_serializer_method_field(self): - -        class MyModel(object): -            boop = ['a', 'b', 'c'] - -        source_data = MyModel() - -        serializer = self.serializer_class(source_data) - -        expected = { -            'beep': 'hello!', -            'boop': ['a', 'b', 'c'], -            'boop_count': 3, -        } - -        self.assertEqual(serializer.data, expected) - - -# Test for issue #324 -class BlankFieldTests(TestCase): -    def setUp(self): - -        class BlankFieldModelSerializer(serializers.ModelSerializer): -            class Meta: -                model = BlankFieldModel - -        class BlankFieldSerializer(serializers.Serializer): -            title = serializers.CharField(required=False) - -        class NotBlankFieldModelSerializer(serializers.ModelSerializer): -            class Meta: -                model = BasicModel - -        class NotBlankFieldSerializer(serializers.Serializer): -            title = serializers.CharField() - -        self.model_serializer_class = BlankFieldModelSerializer -        self.serializer_class = BlankFieldSerializer -        self.not_blank_model_serializer_class = NotBlankFieldModelSerializer -        self.not_blank_serializer_class = NotBlankFieldSerializer -        self.data = {'title': ''} - -    def test_create_blank_field(self): -        serializer = self.serializer_class(data=self.data) -        self.assertEqual(serializer.is_valid(), True) - -    def test_create_model_blank_field(self): -        serializer = self.model_serializer_class(data=self.data) -        self.assertEqual(serializer.is_valid(), True) - -    def test_create_model_null_field(self): -        serializer = self.model_serializer_class(data={'title': None}) -        self.assertEqual(serializer.is_valid(), True) -        serializer.save() -        self.assertIsNot(serializer.object.pk, None) -        self.assertEqual(serializer.object.title, '') - -    def test_create_not_blank_field(self): -        """ -        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(data=self.data) -        self.assertEqual(serializer.is_valid(), False) - -    def test_create_model_not_blank_field(self): -        """ -        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(data=self.data) -        self.assertEqual(serializer.is_valid(), False) - -    def test_create_model_empty_field(self): -        serializer = self.model_serializer_class(data={}) -        self.assertEqual(serializer.is_valid(), True) - -    def test_create_model_null_field_save(self): -        """ -        Regression test for #1330. - -        https://github.com/tomchristie/django-rest-framework/pull/1330 -        """ -        serializer = self.model_serializer_class(data={'title': None}) -        self.assertEqual(serializer.is_valid(), True) - -        try: -            serializer.save() -        except Exception: -            self.fail('Exception raised on save() after validation passes') - - -# Test for issue #460 -class SerializerPickleTests(TestCase): -    """ -    Test pickleability of the output of Serializers -    """ -    def test_pickle_simple_model_serializer_data(self): -        """ -        Test simple serializer -        """ -        pickle.dumps(PersonSerializer(Person(name="Methusela", age=969)).data) - -    def test_pickle_inner_serializer(self): -        """ -        Test pickling a serializer whose resulting .data (a SortedDictWithMetadata) will -        have unpickleable meta data--in order to make sure metadata doesn't get pulled into the pickle. -        See DictWithMetadata.__getstate__ -        """ -        class InnerPersonSerializer(serializers.ModelSerializer): -            class Meta: -                model = Person -                fields = ('name', 'age') -        pickle.dumps(InnerPersonSerializer(Person(name="Noah", age=950)).data, 0) - -    def test_getstate_method_should_not_return_none(self): -        """ -        Regression test for #645. -        """ -        data = serializers.DictWithMetadata({1: 1}) -        self.assertEqual(data.__getstate__(), serializers.SortedDict({1: 1})) - -    def test_serializer_data_is_pickleable(self): -        """ -        Another regression test for #645. -        """ -        data = serializers.SortedDictWithMetadata({1: 1}) -        repr(pickle.loads(pickle.dumps(data, 0))) - - -# test for issue #725 -class SeveralChoicesModel(models.Model): -    color = models.CharField( -        max_length=10, -        choices=[('red', 'Red'), ('green', 'Green'), ('blue', 'Blue')], -        blank=False -    ) -    drink = models.CharField( -        max_length=10, -        choices=[('beer', 'Beer'), ('wine', 'Wine'), ('cider', 'Cider')], -        blank=False, -        default='beer' -    ) -    os = models.CharField( -        max_length=10, -        choices=[('linux', 'Linux'), ('osx', 'OSX'), ('windows', 'Windows')], -        blank=True -    ) -    music_genre = models.CharField( -        max_length=10, -        choices=[('rock', 'Rock'), ('metal', 'Metal'), ('grunge', 'Grunge')], -        blank=True, -        default='metal' -    ) - - -class SerializerChoiceFields(TestCase): - -    def setUp(self): -        super(SerializerChoiceFields, self).setUp() - -        class SeveralChoicesSerializer(serializers.ModelSerializer): -            class Meta: -                model = SeveralChoicesModel -                fields = ('color', 'drink', 'os', 'music_genre') - -        self.several_choices_serializer = SeveralChoicesSerializer - -    def test_choices_blank_false_not_default(self): -        serializer = self.several_choices_serializer() -        self.assertEqual( -            serializer.fields['color'].choices, -            [('red', 'Red'), ('green', 'Green'), ('blue', 'Blue')] -        ) - -    def test_choices_blank_false_with_default(self): -        serializer = self.several_choices_serializer() -        self.assertEqual( -            serializer.fields['drink'].choices, -            [('beer', 'Beer'), ('wine', 'Wine'), ('cider', 'Cider')] -        ) - -    def test_choices_blank_true_not_default(self): -        serializer = self.several_choices_serializer() -        self.assertEqual( -            serializer.fields['os'].choices, -            BLANK_CHOICE_DASH + [('linux', 'Linux'), ('osx', 'OSX'), ('windows', 'Windows')] -        ) - -    def test_choices_blank_true_with_default(self): -        serializer = self.several_choices_serializer() -        self.assertEqual( -            serializer.fields['music_genre'].choices, -            BLANK_CHOICE_DASH + [('rock', 'Rock'), ('metal', 'Metal'), ('grunge', 'Grunge')] -        ) - - -# Regression tests for #675 -class Ticket(models.Model): -    assigned = models.ForeignKey( -        Person, related_name='assigned_tickets') -    reviewer = models.ForeignKey( -        Person, blank=True, null=True, related_name='reviewed_tickets') - - -class SerializerRelatedChoicesTest(TestCase): - -    def setUp(self): -        super(SerializerRelatedChoicesTest, self).setUp() - -        class RelatedChoicesSerializer(serializers.ModelSerializer): -            class Meta: -                model = Ticket -                fields = ('assigned', 'reviewer') - -        self.related_fields_serializer = RelatedChoicesSerializer - -    def test_empty_queryset_required(self): -        serializer = self.related_fields_serializer() -        self.assertEqual(serializer.fields['assigned'].queryset.count(), 0) -        self.assertEqual( -            [x for x in serializer.fields['assigned'].widget.choices], -            [] -        ) - -    def test_empty_queryset_not_required(self): -        serializer = self.related_fields_serializer() -        self.assertEqual(serializer.fields['reviewer'].queryset.count(), 0) -        self.assertEqual( -            [x for x in serializer.fields['reviewer'].widget.choices], -            [('', '---------')] -        ) - -    def test_with_some_persons_required(self): -        Person.objects.create(name="Lionel Messi") -        Person.objects.create(name="Xavi Hernandez") -        serializer = self.related_fields_serializer() -        self.assertEqual(serializer.fields['assigned'].queryset.count(), 2) -        self.assertEqual( -            [x for x in serializer.fields['assigned'].widget.choices], -            [(1, 'Person object - 1'), (2, 'Person object - 2')] -        ) - -    def test_with_some_persons_not_required(self): -        Person.objects.create(name="Lionel Messi") -        Person.objects.create(name="Xavi Hernandez") -        serializer = self.related_fields_serializer() -        self.assertEqual(serializer.fields['reviewer'].queryset.count(), 2) -        self.assertEqual( -            [x for x in serializer.fields['reviewer'].widget.choices], -            [('', '---------'), (1, 'Person object - 1'), (2, 'Person object - 2')] -        ) +#     def test_nested_traversal_with_none(self): +#         """ +#         If a component of the dotted.source is None, return None for the field. +#         """ +#         from tests.models import NullableForeignKeySource +#         instance = NullableForeignKeySource.objects.create(name='Source with null FK') + +#         class NullableSourceSerializer(serializers.Serializer): +#             target_name = serializers.Field(source='target.name') + +#         serializer = NullableSourceSerializer(instance=instance) + +#         expected = { +#             'target_name': None, +#         } + +#         self.assertEqual(serializer.data, expected) + + +# class SerializerMethodFieldTests(TestCase): +#     def setUp(self): + +#         class BoopSerializer(serializers.Serializer): +#             beep = serializers.SerializerMethodField('get_beep') +#             boop = serializers.Field() +#             boop_count = serializers.SerializerMethodField('get_boop_count') + +#             def get_beep(self, obj): +#                 return 'hello!' + +#             def get_boop_count(self, obj): +#                 return len(obj.boop) + +#         self.serializer_class = BoopSerializer + +#     def test_serializer_method_field(self): + +#         class MyModel(object): +#             boop = ['a', 'b', 'c'] + +#         source_data = MyModel() + +#         serializer = self.serializer_class(source_data) + +#         expected = { +#             'beep': 'hello!', +#             'boop': ['a', 'b', 'c'], +#             'boop_count': 3, +#         } + +#         self.assertEqual(serializer.data, expected) + + +# # Test for issue #324 +# class BlankFieldTests(TestCase): +#     def setUp(self): + +#         class BlankFieldModelSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = BlankFieldModel + +#         class BlankFieldSerializer(serializers.Serializer): +#             title = serializers.CharField(required=False) + +#         class NotBlankFieldModelSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = BasicModel + +#         class NotBlankFieldSerializer(serializers.Serializer): +#             title = serializers.CharField() + +#         self.model_serializer_class = BlankFieldModelSerializer +#         self.serializer_class = BlankFieldSerializer +#         self.not_blank_model_serializer_class = NotBlankFieldModelSerializer +#         self.not_blank_serializer_class = NotBlankFieldSerializer +#         self.data = {'title': ''} + +#     def test_create_blank_field(self): +#         serializer = self.serializer_class(data=self.data) +#         self.assertEqual(serializer.is_valid(), True) + +#     def test_create_model_blank_field(self): +#         serializer = self.model_serializer_class(data=self.data) +#         self.assertEqual(serializer.is_valid(), True) + +#     def test_create_model_null_field(self): +#         serializer = self.model_serializer_class(data={'title': None}) +#         self.assertEqual(serializer.is_valid(), True) +#         serializer.save() +#         self.assertIsNot(serializer.object.pk, None) +#         self.assertEqual(serializer.object.title, '') + +#     def test_create_not_blank_field(self): +#         """ +#         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(data=self.data) +#         self.assertEqual(serializer.is_valid(), False) + +#     def test_create_model_not_blank_field(self): +#         """ +#         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(data=self.data) +#         self.assertEqual(serializer.is_valid(), False) + +#     def test_create_model_empty_field(self): +#         serializer = self.model_serializer_class(data={}) +#         self.assertEqual(serializer.is_valid(), True) + +#     def test_create_model_null_field_save(self): +#         """ +#         Regression test for #1330. + +#         https://github.com/tomchristie/django-rest-framework/pull/1330 +#         """ +#         serializer = self.model_serializer_class(data={'title': None}) +#         self.assertEqual(serializer.is_valid(), True) + +#         try: +#             serializer.save() +#         except Exception: +#             self.fail('Exception raised on save() after validation passes') + + +# # Test for issue #460 +# class SerializerPickleTests(TestCase): +#     """ +#     Test pickleability of the output of Serializers +#     """ +#     def test_pickle_simple_model_serializer_data(self): +#         """ +#         Test simple serializer +#         """ +#         pickle.dumps(PersonSerializer(Person(name="Methusela", age=969)).data) + +#     def test_pickle_inner_serializer(self): +#         """ +#         Test pickling a serializer whose resulting .data (a SortedDictWithMetadata) will +#         have unpickleable meta data--in order to make sure metadata doesn't get pulled into the pickle. +#         See DictWithMetadata.__getstate__ +#         """ +#         class InnerPersonSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = Person +#                 fields = ('name', 'age') +#         pickle.dumps(InnerPersonSerializer(Person(name="Noah", age=950)).data, 0) + +#     def test_getstate_method_should_not_return_none(self): +#         """ +#         Regression test for #645. +#         """ +#         data = serializers.DictWithMetadata({1: 1}) +#         self.assertEqual(data.__getstate__(), serializers.SortedDict({1: 1})) + +#     def test_serializer_data_is_pickleable(self): +#         """ +#         Another regression test for #645. +#         """ +#         data = serializers.SortedDictWithMetadata({1: 1}) +#         repr(pickle.loads(pickle.dumps(data, 0))) + + +# # test for issue #725 +# class SeveralChoicesModel(models.Model): +#     color = models.CharField( +#         max_length=10, +#         choices=[('red', 'Red'), ('green', 'Green'), ('blue', 'Blue')], +#         blank=False +#     ) +#     drink = models.CharField( +#         max_length=10, +#         choices=[('beer', 'Beer'), ('wine', 'Wine'), ('cider', 'Cider')], +#         blank=False, +#         default='beer' +#     ) +#     os = models.CharField( +#         max_length=10, +#         choices=[('linux', 'Linux'), ('osx', 'OSX'), ('windows', 'Windows')], +#         blank=True +#     ) +#     music_genre = models.CharField( +#         max_length=10, +#         choices=[('rock', 'Rock'), ('metal', 'Metal'), ('grunge', 'Grunge')], +#         blank=True, +#         default='metal' +#     ) + + +# class SerializerChoiceFields(TestCase): + +#     def setUp(self): +#         super(SerializerChoiceFields, self).setUp() + +#         class SeveralChoicesSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = SeveralChoicesModel +#                 fields = ('color', 'drink', 'os', 'music_genre') + +#         self.several_choices_serializer = SeveralChoicesSerializer + +#     def test_choices_blank_false_not_default(self): +#         serializer = self.several_choices_serializer() +#         self.assertEqual( +#             serializer.fields['color'].choices, +#             [('red', 'Red'), ('green', 'Green'), ('blue', 'Blue')] +#         ) + +#     def test_choices_blank_false_with_default(self): +#         serializer = self.several_choices_serializer() +#         self.assertEqual( +#             serializer.fields['drink'].choices, +#             [('beer', 'Beer'), ('wine', 'Wine'), ('cider', 'Cider')] +#         ) + +#     def test_choices_blank_true_not_default(self): +#         serializer = self.several_choices_serializer() +#         self.assertEqual( +#             serializer.fields['os'].choices, +#             BLANK_CHOICE_DASH + [('linux', 'Linux'), ('osx', 'OSX'), ('windows', 'Windows')] +#         ) + +#     def test_choices_blank_true_with_default(self): +#         serializer = self.several_choices_serializer() +#         self.assertEqual( +#             serializer.fields['music_genre'].choices, +#             BLANK_CHOICE_DASH + [('rock', 'Rock'), ('metal', 'Metal'), ('grunge', 'Grunge')] +#         ) + + +# # Regression tests for #675 +# class Ticket(models.Model): +#     assigned = models.ForeignKey( +#         Person, related_name='assigned_tickets') +#     reviewer = models.ForeignKey( +#         Person, blank=True, null=True, related_name='reviewed_tickets') + + +# class SerializerRelatedChoicesTest(TestCase): + +#     def setUp(self): +#         super(SerializerRelatedChoicesTest, self).setUp() + +#         class RelatedChoicesSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = Ticket +#                 fields = ('assigned', 'reviewer') + +#         self.related_fields_serializer = RelatedChoicesSerializer + +#     def test_empty_queryset_required(self): +#         serializer = self.related_fields_serializer() +#         self.assertEqual(serializer.fields['assigned'].queryset.count(), 0) +#         self.assertEqual( +#             [x for x in serializer.fields['assigned'].widget.choices], +#             [] +#         ) + +#     def test_empty_queryset_not_required(self): +#         serializer = self.related_fields_serializer() +#         self.assertEqual(serializer.fields['reviewer'].queryset.count(), 0) +#         self.assertEqual( +#             [x for x in serializer.fields['reviewer'].widget.choices], +#             [('', '---------')] +#         ) + +#     def test_with_some_persons_required(self): +#         Person.objects.create(name="Lionel Messi") +#         Person.objects.create(name="Xavi Hernandez") +#         serializer = self.related_fields_serializer() +#         self.assertEqual(serializer.fields['assigned'].queryset.count(), 2) +#         self.assertEqual( +#             [x for x in serializer.fields['assigned'].widget.choices], +#             [(1, 'Person object - 1'), (2, 'Person object - 2')] +#         ) + +#     def test_with_some_persons_not_required(self): +#         Person.objects.create(name="Lionel Messi") +#         Person.objects.create(name="Xavi Hernandez") +#         serializer = self.related_fields_serializer() +#         self.assertEqual(serializer.fields['reviewer'].queryset.count(), 2) +#         self.assertEqual( +#             [x for x in serializer.fields['reviewer'].widget.choices], +#             [('', '---------'), (1, 'Person object - 1'), (2, 'Person object - 2')] +#         ) -class DepthTest(TestCase): -    def test_implicit_nesting(self): - -        writer = Person.objects.create(name="django", age=1) -        post = BlogPost.objects.create(title="Test blog post", writer=writer) -        comment = BlogPostComment.objects.create(text="Test blog post comment", blog_post=post) - -        class BlogPostCommentSerializer(serializers.ModelSerializer): -            class Meta: -                model = BlogPostComment -                depth = 2 - -        serializer = BlogPostCommentSerializer(instance=comment) -        expected = {'id': 1, 'text': 'Test blog post comment', 'blog_post': {'id': 1, 'title': 'Test blog post', -                    'writer': {'id': 1, 'name': 'django', 'age': 1}}} - -        self.assertEqual(serializer.data, expected) - -    def test_explicit_nesting(self): -        writer = Person.objects.create(name="django", age=1) -        post = BlogPost.objects.create(title="Test blog post", writer=writer) -        comment = BlogPostComment.objects.create(text="Test blog post comment", blog_post=post) - -        class PersonSerializer(serializers.ModelSerializer): -            class Meta: -                model = Person - -        class BlogPostSerializer(serializers.ModelSerializer): -            writer = PersonSerializer() - -            class Meta: -                model = BlogPost - -        class BlogPostCommentSerializer(serializers.ModelSerializer): -            blog_post = BlogPostSerializer() - -            class Meta: -                model = BlogPostComment +# class DepthTest(TestCase): +#     def test_implicit_nesting(self): + +#         writer = Person.objects.create(name="django", age=1) +#         post = BlogPost.objects.create(title="Test blog post", writer=writer) +#         comment = BlogPostComment.objects.create(text="Test blog post comment", blog_post=post) + +#         class BlogPostCommentSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = BlogPostComment +#                 depth = 2 + +#         serializer = BlogPostCommentSerializer(instance=comment) +#         expected = {'id': 1, 'text': 'Test blog post comment', 'blog_post': {'id': 1, 'title': 'Test blog post', +#                     'writer': {'id': 1, 'name': 'django', 'age': 1}}} + +#         self.assertEqual(serializer.data, expected) + +#     def test_explicit_nesting(self): +#         writer = Person.objects.create(name="django", age=1) +#         post = BlogPost.objects.create(title="Test blog post", writer=writer) +#         comment = BlogPostComment.objects.create(text="Test blog post comment", blog_post=post) + +#         class PersonSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = Person + +#         class BlogPostSerializer(serializers.ModelSerializer): +#             writer = PersonSerializer() + +#             class Meta: +#                 model = BlogPost + +#         class BlogPostCommentSerializer(serializers.ModelSerializer): +#             blog_post = BlogPostSerializer() + +#             class Meta: +#                 model = BlogPostComment -        serializer = BlogPostCommentSerializer(instance=comment) -        expected = {'id': 1, 'text': 'Test blog post comment', 'blog_post': {'id': 1, 'title': 'Test blog post', -                    'writer': {'id': 1, 'name': 'django', 'age': 1}}} +#         serializer = BlogPostCommentSerializer(instance=comment) +#         expected = {'id': 1, 'text': 'Test blog post comment', 'blog_post': {'id': 1, 'title': 'Test blog post', +#                     'writer': {'id': 1, 'name': 'django', 'age': 1}}} -        self.assertEqual(serializer.data, expected) +#         self.assertEqual(serializer.data, expected) -class NestedSerializerContextTests(TestCase): +# class NestedSerializerContextTests(TestCase): -    def test_nested_serializer_context(self): -        """ -        Regression for #497 - -        https://github.com/tomchristie/django-rest-framework/issues/497 -        """ -        class PhotoSerializer(serializers.ModelSerializer): -            class Meta: -                model = Photo -                fields = ("description", "callable") +#     def test_nested_serializer_context(self): +#         """ +#         Regression for #497 + +#         https://github.com/tomchristie/django-rest-framework/issues/497 +#         """ +#         class PhotoSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = Photo +#                 fields = ("description", "callable") -            callable = serializers.SerializerMethodField('_callable') +#             callable = serializers.SerializerMethodField('_callable') -            def _callable(self, instance): -                if 'context_item' not in self.context: -                    raise RuntimeError("context isn't getting passed into 2nd level nested serializer") -                return "success" - -        class AlbumSerializer(serializers.ModelSerializer): -            class Meta: -                model = Album -                fields = ("photo_set", "callable") +#             def _callable(self, instance): +#                 if 'context_item' not in self.context: +#                     raise RuntimeError("context isn't getting passed into 2nd level nested serializer") +#                 return "success" + +#         class AlbumSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = Album +#                 fields = ("photo_set", "callable") -            photo_set = PhotoSerializer(source="photo_set", many=True) -            callable = serializers.SerializerMethodField("_callable") +#             photo_set = PhotoSerializer(source="photo_set", many=True) +#             callable = serializers.SerializerMethodField("_callable") -            def _callable(self, instance): -                if 'context_item' not in self.context: -                    raise RuntimeError("context isn't getting passed into 1st level nested serializer") -                return "success" +#             def _callable(self, instance): +#                 if 'context_item' not in self.context: +#                     raise RuntimeError("context isn't getting passed into 1st level nested serializer") +#                 return "success" -        class AlbumCollection(object): -            albums = None +#         class AlbumCollection(object): +#             albums = None -        class AlbumCollectionSerializer(serializers.Serializer): -            albums = AlbumSerializer(source="albums", many=True) +#         class AlbumCollectionSerializer(serializers.Serializer): +#             albums = AlbumSerializer(source="albums", many=True) -        album1 = Album.objects.create(title="album 1") -        album2 = Album.objects.create(title="album 2") -        Photo.objects.create(description="Bigfoot", album=album1) -        Photo.objects.create(description="Unicorn", album=album1) -        Photo.objects.create(description="Yeti", album=album2) -        Photo.objects.create(description="Sasquatch", album=album2) -        album_collection = AlbumCollection() -        album_collection.albums = [album1, album2] +#         album1 = Album.objects.create(title="album 1") +#         album2 = Album.objects.create(title="album 2") +#         Photo.objects.create(description="Bigfoot", album=album1) +#         Photo.objects.create(description="Unicorn", album=album1) +#         Photo.objects.create(description="Yeti", album=album2) +#         Photo.objects.create(description="Sasquatch", album=album2) +#         album_collection = AlbumCollection() +#         album_collection.albums = [album1, album2] -        # This will raise RuntimeError if context doesn't get passed correctly to the nested Serializers -        AlbumCollectionSerializer(album_collection, context={'context_item': 'album context'}).data +#         # 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): +# 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 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, many=True) -        self.assertTrue(serializer.is_valid()) -        self.assertTrue(isinstance(serializer.object, list)) -        self.assertTrue( -            all((isinstance(item, Comment) for item in serializer.object)) -        ) +#     def test_no_errors(self): +#         data = [self.data.copy() for x in range(0, 3)] +#         serializer = CommentSerializer(data=data, many=True) +#         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()] +#     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, many=True) -        self.assertFalse(serializer.is_valid()) -        expected = [{}, {'email': ['This field is required.']}, {}] -        self.assertEqual(serializer.errors, expected) +#         serializer = CommentSerializer(data=data, many=True) +#         self.assertFalse(serializer.is_valid()) +#         expected = [{}, {'email': ['This field is required.']}, {}] +#         self.assertEqual(serializer.errors, expected) -# Test for issue 747 +# # Test for issue 747 -class LazyStringModel(object): -    def __init__(self, lazystring): -        self.lazystring = lazystring +# class LazyStringModel(object): +#     def __init__(self, lazystring): +#         self.lazystring = lazystring -class LazyStringSerializer(serializers.Serializer): -    lazystring = serializers.Field() - -    def restore_object(self, attrs, instance=None): -        if instance is not None: -            instance.lazystring = attrs.get('lazystring', instance.lazystring) -            return instance -        return LazyStringModel(**attrs) - - -class LazyStringsTestCase(TestCase): -    def setUp(self): -        self.model = LazyStringModel(lazystring=_('lazystring')) - -    def test_lazy_strings_are_translated(self): -        serializer = LazyStringSerializer(self.model) -        self.assertEqual(type(serializer.data['lazystring']), -                         type('lazystring')) - - -# Test for issue #467 - -class FieldLabelTest(TestCase): -    def setUp(self): -        self.serializer_class = BasicModelSerializer - -    def test_label_from_model(self): -        """ -        Validates that label and help_text are correctly copied from the model class. -        """ -        serializer = self.serializer_class() -        text_field = serializer.fields['text'] - -        self.assertEqual('Text comes here', text_field.label) -        self.assertEqual('Text description.', text_field.help_text) - -    def test_field_ctor(self): -        """ -        This is check that ctor supports both label and help_text. -        """ -        self.assertEqual('Label', fields.Field(label='Label', help_text='Help').label) -        self.assertEqual('Help', fields.CharField(label='Label', help_text='Help').help_text) -        self.assertEqual('Label', relations.HyperlinkedRelatedField(view_name='fake', label='Label', help_text='Help', many=True).label) - - -# Test for issue #961 - -class ManyFieldHelpTextTest(TestCase): -    def test_help_text_no_hold_down_control_msg(self): -        """ -        Validate that help_text doesn't contain the 'Hold down "Control" ...' -        message that Django appends to choice fields. -        """ -        rel_field = fields.Field(help_text=ManyToManyModel._meta.get_field('rel').help_text) -        self.assertEqual('Some help text.', rel_field.help_text) - - -class AttributeMappingOnAutogeneratedRelatedFields(TestCase): - -    def test_primary_key_related_field(self): -        serializer = ForeignKeySourceSerializer() -        self.assertEqual(serializer.fields['target'].help_text, 'Target') -        self.assertEqual(serializer.fields['target'].label, 'Target') - -    def test_hyperlinked_related_field(self): -        serializer = HyperlinkedForeignKeySourceSerializer() -        self.assertEqual(serializer.fields['target'].help_text, 'Target') -        self.assertEqual(serializer.fields['target'].label, 'Target') - - -@unittest.skipUnless(PIL is not None, 'PIL is not installed') -class AttributeMappingOnAutogeneratedFieldsTests(TestCase): - -    def setUp(self): - -        class AMOAFSerializer(serializers.ModelSerializer): -            class Meta: -                model = AMOAFModel - -        self.serializer_class = AMOAFSerializer -        self.fields_attributes = { -            'char_field': [ -                ('max_length', 1024), -            ], -            'comma_separated_integer_field': [ -                ('max_length', 1024), -            ], -            'decimal_field': [ -                ('max_digits', 64), -                ('decimal_places', 32), -            ], -            'email_field': [ -                ('max_length', 1024), -            ], -            'file_field': [ -                ('max_length', 1024), -            ], -            'image_field': [ -                ('max_length', 1024), -            ], -            'slug_field': [ -                ('max_length', 1024), -            ], -            'url_field': [ -                ('max_length', 1024), -            ], -            'nullable_char_field': [ -                ('max_length', 1024), -                ('allow_none', True), -            ], -        } - -    def field_test(self, field): -        serializer = self.serializer_class(data={}) -        self.assertEqual(serializer.is_valid(), True) - -        for attribute in self.fields_attributes[field]: -            self.assertEqual( -                getattr(serializer.fields[field], attribute[0]), -                attribute[1] -            ) - -    def test_char_field(self): -        self.field_test('char_field') - -    def test_comma_separated_integer_field(self): -        self.field_test('comma_separated_integer_field') - -    def test_decimal_field(self): -        self.field_test('decimal_field') - -    def test_email_field(self): -        self.field_test('email_field') - -    def test_file_field(self): -        self.field_test('file_field') - -    def test_image_field(self): -        self.field_test('image_field') - -    def test_slug_field(self): -        self.field_test('slug_field') - -    def test_url_field(self): -        self.field_test('url_field') - -    def test_nullable_char_field(self): -        self.field_test('nullable_char_field') - - -@unittest.skipUnless(PIL is not None, 'PIL is not installed') -class DefaultValuesOnAutogeneratedFieldsTests(TestCase): - -    def setUp(self): - -        class DVOAFSerializer(serializers.ModelSerializer): -            class Meta: -                model = DVOAFModel - -        self.serializer_class = DVOAFSerializer -        self.fields_attributes = { -            'positive_integer_field': [ -                ('min_value', 0), -            ], -            'positive_small_integer_field': [ -                ('min_value', 0), -            ], -            'email_field': [ -                ('max_length', 75), -            ], -            'file_field': [ -                ('max_length', 100), -            ], -            'image_field': [ -                ('max_length', 100), -            ], -            'slug_field': [ -                ('max_length', 50), -            ], -            'url_field': [ -                ('max_length', 200), -            ], -        } - -    def field_test(self, field): -        serializer = self.serializer_class(data={}) -        self.assertEqual(serializer.is_valid(), True) - -        for attribute in self.fields_attributes[field]: -            self.assertEqual( -                getattr(serializer.fields[field], attribute[0]), -                attribute[1] -            ) +# class LazyStringSerializer(serializers.Serializer): +#     lazystring = serializers.Field() + +#     def restore_object(self, attrs, instance=None): +#         if instance is not None: +#             instance.lazystring = attrs.get('lazystring', instance.lazystring) +#             return instance +#         return LazyStringModel(**attrs) + + +# class LazyStringsTestCase(TestCase): +#     def setUp(self): +#         self.model = LazyStringModel(lazystring=_('lazystring')) + +#     def test_lazy_strings_are_translated(self): +#         serializer = LazyStringSerializer(self.model) +#         self.assertEqual(type(serializer.data['lazystring']), +#                          type('lazystring')) + + +# # Test for issue #467 + +# class FieldLabelTest(TestCase): +#     def setUp(self): +#         self.serializer_class = BasicModelSerializer + +#     def test_label_from_model(self): +#         """ +#         Validates that label and help_text are correctly copied from the model class. +#         """ +#         serializer = self.serializer_class() +#         text_field = serializer.fields['text'] + +#         self.assertEqual('Text comes here', text_field.label) +#         self.assertEqual('Text description.', text_field.help_text) + +#     def test_field_ctor(self): +#         """ +#         This is check that ctor supports both label and help_text. +#         """ +#         self.assertEqual('Label', fields.Field(label='Label', help_text='Help').label) +#         self.assertEqual('Help', fields.CharField(label='Label', help_text='Help').help_text) +#         self.assertEqual('Label', relations.HyperlinkedRelatedField(view_name='fake', label='Label', help_text='Help', many=True).label) + + +# # Test for issue #961 + +# class ManyFieldHelpTextTest(TestCase): +#     def test_help_text_no_hold_down_control_msg(self): +#         """ +#         Validate that help_text doesn't contain the 'Hold down "Control" ...' +#         message that Django appends to choice fields. +#         """ +#         rel_field = fields.Field(help_text=ManyToManyModel._meta.get_field('rel').help_text) +#         self.assertEqual('Some help text.', rel_field.help_text) + + +# class AttributeMappingOnAutogeneratedRelatedFields(TestCase): + +#     def test_primary_key_related_field(self): +#         serializer = ForeignKeySourceSerializer() +#         self.assertEqual(serializer.fields['target'].help_text, 'Target') +#         self.assertEqual(serializer.fields['target'].label, 'Target') + +#     def test_hyperlinked_related_field(self): +#         serializer = HyperlinkedForeignKeySourceSerializer() +#         self.assertEqual(serializer.fields['target'].help_text, 'Target') +#         self.assertEqual(serializer.fields['target'].label, 'Target') + + +# @unittest.skipUnless(PIL is not None, 'PIL is not installed') +# class AttributeMappingOnAutogeneratedFieldsTests(TestCase): + +#     def setUp(self): + +#         class AMOAFSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = AMOAFModel + +#         self.serializer_class = AMOAFSerializer +#         self.fields_attributes = { +#             'char_field': [ +#                 ('max_length', 1024), +#             ], +#             'comma_separated_integer_field': [ +#                 ('max_length', 1024), +#             ], +#             'decimal_field': [ +#                 ('max_digits', 64), +#                 ('decimal_places', 32), +#             ], +#             'email_field': [ +#                 ('max_length', 1024), +#             ], +#             'file_field': [ +#                 ('max_length', 1024), +#             ], +#             'image_field': [ +#                 ('max_length', 1024), +#             ], +#             'slug_field': [ +#                 ('max_length', 1024), +#             ], +#             'url_field': [ +#                 ('max_length', 1024), +#             ], +#             'nullable_char_field': [ +#                 ('max_length', 1024), +#                 ('allow_none', True), +#             ], +#         } + +#     def field_test(self, field): +#         serializer = self.serializer_class(data={}) +#         self.assertEqual(serializer.is_valid(), True) + +#         for attribute in self.fields_attributes[field]: +#             self.assertEqual( +#                 getattr(serializer.fields[field], attribute[0]), +#                 attribute[1] +#             ) + +#     def test_char_field(self): +#         self.field_test('char_field') + +#     def test_comma_separated_integer_field(self): +#         self.field_test('comma_separated_integer_field') + +#     def test_decimal_field(self): +#         self.field_test('decimal_field') + +#     def test_email_field(self): +#         self.field_test('email_field') + +#     def test_file_field(self): +#         self.field_test('file_field') + +#     def test_image_field(self): +#         self.field_test('image_field') + +#     def test_slug_field(self): +#         self.field_test('slug_field') + +#     def test_url_field(self): +#         self.field_test('url_field') + +#     def test_nullable_char_field(self): +#         self.field_test('nullable_char_field') + + +# @unittest.skipUnless(PIL is not None, 'PIL is not installed') +# class DefaultValuesOnAutogeneratedFieldsTests(TestCase): + +#     def setUp(self): + +#         class DVOAFSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = DVOAFModel + +#         self.serializer_class = DVOAFSerializer +#         self.fields_attributes = { +#             'positive_integer_field': [ +#                 ('min_value', 0), +#             ], +#             'positive_small_integer_field': [ +#                 ('min_value', 0), +#             ], +#             'email_field': [ +#                 ('max_length', 75), +#             ], +#             'file_field': [ +#                 ('max_length', 100), +#             ], +#             'image_field': [ +#                 ('max_length', 100), +#             ], +#             'slug_field': [ +#                 ('max_length', 50), +#             ], +#             'url_field': [ +#                 ('max_length', 200), +#             ], +#         } + +#     def field_test(self, field): +#         serializer = self.serializer_class(data={}) +#         self.assertEqual(serializer.is_valid(), True) + +#         for attribute in self.fields_attributes[field]: +#             self.assertEqual( +#                 getattr(serializer.fields[field], attribute[0]), +#                 attribute[1] +#             ) -    def test_positive_integer_field(self): -        self.field_test('positive_integer_field') +#     def test_positive_integer_field(self): +#         self.field_test('positive_integer_field') -    def test_positive_small_integer_field(self): -        self.field_test('positive_small_integer_field') +#     def test_positive_small_integer_field(self): +#         self.field_test('positive_small_integer_field') -    def test_email_field(self): -        self.field_test('email_field') +#     def test_email_field(self): +#         self.field_test('email_field') -    def test_file_field(self): -        self.field_test('file_field') +#     def test_file_field(self): +#         self.field_test('file_field') -    def test_image_field(self): -        self.field_test('image_field') +#     def test_image_field(self): +#         self.field_test('image_field') -    def test_slug_field(self): -        self.field_test('slug_field') +#     def test_slug_field(self): +#         self.field_test('slug_field') -    def test_url_field(self): -        self.field_test('url_field') +#     def test_url_field(self): +#         self.field_test('url_field') -class MetadataSerializer(serializers.Serializer): -    field1 = serializers.CharField(3, required=True) -    field2 = serializers.CharField(10, required=False) +# class MetadataSerializer(serializers.Serializer): +#     field1 = serializers.CharField(max_length=3, required=True) +#     field2 = serializers.CharField(max_length=10, required=False) -class MetadataSerializerTestCase(TestCase): -    def setUp(self): -        self.serializer = MetadataSerializer() +# class MetadataSerializerTestCase(TestCase): +#     def setUp(self): +#         self.serializer = MetadataSerializer() -    def test_serializer_metadata(self): -        metadata = self.serializer.metadata() -        expected = { -            'field1': { -                'required': True, -                'max_length': 3, -                'type': 'string', -                'read_only': False -            }, -            'field2': { -                'required': False, -                'max_length': 10, -                'type': 'string', -                'read_only': False -            } -        } -        self.assertEqual(expected, metadata) +#     def test_serializer_metadata(self): +#         metadata = self.serializer.metadata() +#         expected = { +#             'field1': { +#                 'required': True, +#                 'max_length': 3, +#                 'type': 'string', +#                 'read_only': False +#             }, +#             'field2': { +#                 'required': False, +#                 'max_length': 10, +#                 'type': 'string', +#                 'read_only': False +#             } +#         } +#         self.assertEqual(expected, metadata) -# Regression test for #840 +# # Regression test for #840 -class SimpleModel(models.Model): -    text = models.CharField(max_length=100) +# class SimpleModel(models.Model): +#     text = models.CharField(max_length=100) - -class SimpleModelSerializer(serializers.ModelSerializer): -    text = serializers.CharField() -    other = serializers.CharField() - -    class Meta: -        model = SimpleModel - -    def validate_other(self, attrs, source): -        del attrs['other'] -        return attrs + +# class SimpleModelSerializer(serializers.ModelSerializer): +#     text = serializers.CharField() +#     other = serializers.CharField() + +#     class Meta: +#         model = SimpleModel + +#     def validate_other(self, attrs, source): +#         del attrs['other'] +#         return attrs -class FieldValidationRemovingAttr(TestCase): -    def test_removing_non_model_field_in_validation(self): -        """ -        Removing an attr during field valiation should ensure that it is not -        passed through when restoring the object. +# class FieldValidationRemovingAttr(TestCase): +#     def test_removing_non_model_field_in_validation(self): +#         """ +#         Removing an attr during field valiation should ensure that it is not +#         passed through when restoring the object. -        This allows additional non-model fields to be supported. +#         This allows additional non-model fields to be supported. -        Regression test for #840. -        """ -        serializer = SimpleModelSerializer(data={'text': 'foo', 'other': 'bar'}) -        self.assertTrue(serializer.is_valid()) -        serializer.save() -        self.assertEqual(serializer.object.text, 'foo') +#         Regression test for #840. +#         """ +#         serializer = SimpleModelSerializer(data={'text': 'foo', 'other': 'bar'}) +#         self.assertTrue(serializer.is_valid()) +#         serializer.save() +#         self.assertEqual(serializer.object.text, 'foo') -# Regression test for #878 +# # Regression test for #878 -class SimpleTargetModel(models.Model): -    text = models.CharField(max_length=100) +# class SimpleTargetModel(models.Model): +#     text = models.CharField(max_length=100) -class SimplePKSourceModelSerializer(serializers.Serializer): -    targets = serializers.PrimaryKeyRelatedField(queryset=SimpleTargetModel.objects.all(), many=True) -    text = serializers.CharField() +# class SimplePKSourceModelSerializer(serializers.Serializer): +#     targets = serializers.PrimaryKeyRelatedField(queryset=SimpleTargetModel.objects.all(), many=True) +#     text = serializers.CharField() -class SimpleSlugSourceModelSerializer(serializers.Serializer): -    targets = serializers.SlugRelatedField(queryset=SimpleTargetModel.objects.all(), many=True, slug_field='pk') -    text = serializers.CharField() +# class SimpleSlugSourceModelSerializer(serializers.Serializer): +#     targets = serializers.SlugRelatedField(queryset=SimpleTargetModel.objects.all(), many=True, slug_field='pk') +#     text = serializers.CharField() -class SerializerSupportsManyRelationships(TestCase): -    def setUp(self): -        SimpleTargetModel.objects.create(text='foo') -        SimpleTargetModel.objects.create(text='bar') +# class SerializerSupportsManyRelationships(TestCase): +#     def setUp(self): +#         SimpleTargetModel.objects.create(text='foo') +#         SimpleTargetModel.objects.create(text='bar') -    def test_serializer_supports_pk_many_relationships(self): -        """ -        Regression test for #878. +#     def test_serializer_supports_pk_many_relationships(self): +#         """ +#         Regression test for #878. -        Note that pk behavior has a different code path to usual cases, -        for performance reasons. -        """ -        serializer = SimplePKSourceModelSerializer(data={'text': 'foo', 'targets': [1, 2]}) -        self.assertTrue(serializer.is_valid()) -        self.assertEqual(serializer.data, {'text': 'foo', 'targets': [1, 2]}) +#         Note that pk behavior has a different code path to usual cases, +#         for performance reasons. +#         """ +#         serializer = SimplePKSourceModelSerializer(data={'text': 'foo', 'targets': [1, 2]}) +#         self.assertTrue(serializer.is_valid()) +#         self.assertEqual(serializer.data, {'text': 'foo', 'targets': [1, 2]}) -    def test_serializer_supports_slug_many_relationships(self): -        """ -        Regression test for #878. -        """ -        serializer = SimpleSlugSourceModelSerializer(data={'text': 'foo', 'targets': [1, 2]}) -        self.assertTrue(serializer.is_valid()) -        self.assertEqual(serializer.data, {'text': 'foo', 'targets': [1, 2]}) +#     def test_serializer_supports_slug_many_relationships(self): +#         """ +#         Regression test for #878. +#         """ +#         serializer = SimpleSlugSourceModelSerializer(data={'text': 'foo', 'targets': [1, 2]}) +#         self.assertTrue(serializer.is_valid()) +#         self.assertEqual(serializer.data, {'text': 'foo', 'targets': [1, 2]}) -class TransformMethodsSerializer(serializers.Serializer): -    a = serializers.CharField() -    b_renamed = serializers.CharField(source='b') - -    def transform_a(self, obj, value): -        return value.lower() - -    def transform_b_renamed(self, obj, value): -        if value is not None: -            return 'and ' + value +# class TransformMethodsSerializer(serializers.Serializer): +#     a = serializers.CharField() +#     b_renamed = serializers.CharField(source='b') + +#     def transform_a(self, obj, value): +#         return value.lower() + +#     def transform_b_renamed(self, obj, value): +#         if value is not None: +#             return 'and ' + value -class TestSerializerTransformMethods(TestCase): -    def setUp(self): -        self.s = TransformMethodsSerializer() +# class TestSerializerTransformMethods(TestCase): +#     def setUp(self): +#         self.s = TransformMethodsSerializer() -    def test_transform_methods(self): -        self.assertEqual( -            self.s.to_native({'a': 'GREEN EGGS', 'b': 'HAM'}), -            { -                'a': 'green eggs', -                'b_renamed': 'and HAM', -            } -        ) +#     def test_transform_methods(self): +#         self.assertEqual( +#             self.s.to_native({'a': 'GREEN EGGS', 'b': 'HAM'}), +#             { +#                 'a': 'green eggs', +#                 'b_renamed': 'and HAM', +#             } +#         ) -    def test_missing_fields(self): -        self.assertEqual( -            self.s.to_native({'a': 'GREEN EGGS'}), -            { -                'a': 'green eggs', -                'b_renamed': None, -            } -        ) +#     def test_missing_fields(self): +#         self.assertEqual( +#             self.s.to_native({'a': 'GREEN EGGS'}), +#             { +#                 'a': 'green eggs', +#                 'b_renamed': None, +#             } +#         ) -class DefaultTrueBooleanModel(models.Model): -    cat = models.BooleanField(default=True) -    dog = models.BooleanField(default=False) +# class DefaultTrueBooleanModel(models.Model): +#     cat = models.BooleanField(default=True) +#     dog = models.BooleanField(default=False) -class SerializerDefaultTrueBoolean(TestCase): +# class SerializerDefaultTrueBoolean(TestCase): -    def setUp(self): -        super(SerializerDefaultTrueBoolean, self).setUp() - -        class DefaultTrueBooleanSerializer(serializers.ModelSerializer): -            class Meta: -                model = DefaultTrueBooleanModel -                fields = ('cat', 'dog') - -        self.default_true_boolean_serializer = DefaultTrueBooleanSerializer - -    def test_enabled_as_false(self): -        serializer = self.default_true_boolean_serializer(data={'cat': False, -                                                                'dog': False}) -        self.assertEqual(serializer.is_valid(), True) -        self.assertEqual(serializer.data['cat'], False) -        self.assertEqual(serializer.data['dog'], False) +#     def setUp(self): +#         super(SerializerDefaultTrueBoolean, self).setUp() + +#         class DefaultTrueBooleanSerializer(serializers.ModelSerializer): +#             class Meta: +#                 model = DefaultTrueBooleanModel +#                 fields = ('cat', 'dog') + +#         self.default_true_boolean_serializer = DefaultTrueBooleanSerializer + +#     def test_enabled_as_false(self): +#         serializer = self.default_true_boolean_serializer(data={'cat': False, +#                                                                 'dog': False}) +#         self.assertEqual(serializer.is_valid(), True) +#         self.assertEqual(serializer.data['cat'], False) +#         self.assertEqual(serializer.data['dog'], False) -    def test_enabled_as_true(self): -        serializer = self.default_true_boolean_serializer(data={'cat': True, -                                                                'dog': True}) -        self.assertEqual(serializer.is_valid(), True) -        self.assertEqual(serializer.data['cat'], True) -        self.assertEqual(serializer.data['dog'], True) - -    def test_enabled_partial(self): -        serializer = self.default_true_boolean_serializer(data={'cat': False}, -                                                          partial=True) -        self.assertEqual(serializer.is_valid(), True) -        self.assertEqual(serializer.data['cat'], False) -        self.assertEqual(serializer.data['dog'], False) - - -class BoolenFieldTypeTest(TestCase): -    ''' -    Ensure the various Boolean based model fields are rendered as the proper -    field type - -    ''' - -    def setUp(self): -        ''' -        Setup an ActionItemSerializer for BooleanTesting -        ''' -        data = { -            'title': 'b' * 201, -        } -        self.serializer = ActionItemSerializer(data=data) - -    def test_booleanfield_type(self): -        ''' -        Test that BooleanField is infered from models.BooleanField -        ''' -        bfield = self.serializer.get_fields()['done'] -        self.assertEqual(type(bfield), fields.BooleanField) - -    def test_nullbooleanfield_type(self): -        ''' -        Test that BooleanField is infered from models.NullBooleanField - -        https://groups.google.com/forum/#!topic/django-rest-framework/D9mXEftpuQ8 -        ''' -        bfield = self.serializer.get_fields()['started'] -        self.assertEqual(type(bfield), fields.BooleanField) +#     def test_enabled_as_true(self): +#         serializer = self.default_true_boolean_serializer(data={'cat': True, +#                                                                 'dog': True}) +#         self.assertEqual(serializer.is_valid(), True) +#         self.assertEqual(serializer.data['cat'], True) +#         self.assertEqual(serializer.data['dog'], True) + +#     def test_enabled_partial(self): +#         serializer = self.default_true_boolean_serializer(data={'cat': False}, +#                                                           partial=True) +#         self.assertEqual(serializer.is_valid(), True) +#         self.assertEqual(serializer.data['cat'], False) +#         self.assertEqual(serializer.data['dog'], False) + + +# class BoolenFieldTypeTest(TestCase): +#     ''' +#     Ensure the various Boolean based model fields are rendered as the proper +#     field type + +#     ''' + +#     def setUp(self): +#         ''' +#         Setup an ActionItemSerializer for BooleanTesting +#         ''' +#         data = { +#             'title': 'b' * 201, +#         } +#         self.serializer = ActionItemSerializer(data=data) + +#     def test_booleanfield_type(self): +#         ''' +#         Test that BooleanField is infered from models.BooleanField +#         ''' +#         bfield = self.serializer.get_fields()['done'] +#         self.assertEqual(type(bfield), fields.BooleanField) + +#     def test_nullbooleanfield_type(self): +#         ''' +#         Test that BooleanField is infered from models.NullBooleanField + +#         https://groups.google.com/forum/#!topic/django-rest-framework/D9mXEftpuQ8 +#         ''' +#         bfield = self.serializer.get_fields()['started'] +#         self.assertEqual(type(bfield), fields.BooleanField) | 
