diff options
| author | Tom Christie | 2015-01-05 14:32:12 +0000 | 
|---|---|---|
| committer | Tom Christie | 2015-01-05 14:32:12 +0000 | 
| commit | b6ca7248ebcf95a95e1911aa0b130f653b8bf690 (patch) | |
| tree | 3da53011f0e215da5e13efcaf39223f88edfefce /tests | |
| parent | 8cf37449715c32c4a692667814466c7f32e8734f (diff) | |
| download | django-rest-framework-b6ca7248ebcf95a95e1911aa0b130f653b8bf690.tar.bz2 | |
required=False allows omission of value for output. Closes #2342
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_serializer.py | 62 | 
1 files changed, 62 insertions, 0 deletions
| diff --git a/tests/test_serializer.py b/tests/test_serializer.py index c17b6d8c..68bbbe98 100644 --- a/tests/test_serializer.py +++ b/tests/test_serializer.py @@ -1,5 +1,6 @@  # coding: utf-8  from __future__ import unicode_literals +from .utils import MockObject  from rest_framework import serializers  from rest_framework.compat import unicode_repr  import pytest @@ -216,3 +217,64 @@ class TestUnicodeRepr:          instance = ExampleObject()          serializer = ExampleSerializer(instance)          repr(serializer)  # Should not error. + + +class TestNotRequiredOutput: +    def test_not_required_output_for_dict(self): +        """ +        'required=False' should allow a dictionary key to be missing in output. +        """ +        class ExampleSerializer(serializers.Serializer): +            omitted = serializers.CharField(required=False) +            included = serializers.CharField() + +        serializer = ExampleSerializer(data={'included': 'abc'}) +        serializer.is_valid() +        assert serializer.data == {'included': 'abc'} + +    def test_not_required_output_for_object(self): +        """ +        'required=False' should allow an object attribute to be missing in output. +        """ +        class ExampleSerializer(serializers.Serializer): +            omitted = serializers.CharField(required=False) +            included = serializers.CharField() + +            def create(self, validated_data): +                return MockObject(**validated_data) + +        serializer = ExampleSerializer(data={'included': 'abc'}) +        serializer.is_valid() +        serializer.save() +        assert serializer.data == {'included': 'abc'} + +    def test_default_required_output_for_dict(self): +        """ +        'default="something"' should require dictionary key. + +        We need to handle this as the field will have an implicit +        'required=False', but it should still have a value. +        """ +        class ExampleSerializer(serializers.Serializer): +            omitted = serializers.CharField(default='abc') +            included = serializers.CharField() + +        serializer = ExampleSerializer({'included': 'abc'}) +        with pytest.raises(KeyError): +            serializer.data + +    def test_default_required_output_for_object(self): +        """ +        'default="something"' should require object attribute. + +        We need to handle this as the field will have an implicit +        'required=False', but it should still have a value. +        """ +        class ExampleSerializer(serializers.Serializer): +            omitted = serializers.CharField(default='abc') +            included = serializers.CharField() + +        instance = MockObject(included='abc') +        serializer = ExampleSerializer(instance) +        with pytest.raises(AttributeError): +            serializer.data | 
