Add failing test case to highlight side effects caused by calling repr in __init__

This commit is contained in:
Thomas Khyn 2016-09-03 20:47:52 +12:00
parent 07efbdb45e
commit 59841c0c44

View File

@ -132,6 +132,31 @@ class TestModelSerializer(TestCase):
msginitial = 'Cannot use ModelSerializer with Abstract Models.'
assert str(excinfo.exception).startswith(msginitial)
def test_repr_side_effects(self):
"""
Test that modifying ModelSerializer.fields in __init__ while calling
`repr` does not have side-effects (issue #3196)
"""
class TestSerializer(serializers.ModelSerializer):
class Meta:
model = OneFieldModel
fields = ('char_field',)
def __init__(self, instance=None, data=serializers.empty, **kwargs):
super(TestSerializer, self).__init__(instance, data, **kwargs)
repr(self)
self.fields.pop('char_field')
instance = OneFieldModel.objects.create(char_field='value')
new_data = {'char_field': 'new_value'}
serializer = TestSerializer(instance, new_data)
serializer.is_valid()
self.assertDictEqual(serializer.validated_data, {})
class TestRegularFieldMappings(TestCase):
def test_regular_fields(self):