diff options
| author | Tom Christie | 2013-01-28 12:56:42 +0000 |
|---|---|---|
| committer | Tom Christie | 2013-01-28 12:56:42 +0000 |
| commit | a3a06d11cc39da55d34f99e272bf092a2dcd4c5c (patch) | |
| tree | ee947d9f500f114362f2cecd28255802671bbfbc /rest_framework/tests | |
| parent | 94c4a54bf806aef7af6b5f8b5d996060f1daad0f (diff) | |
| download | django-rest-framework-a3a06d11cc39da55d34f99e272bf092a2dcd4c5c.tar.bz2 | |
Ensure model field validation is performed for ModelSerializers with a custom restore_object method. Fixes #623.
Diffstat (limited to 'rest_framework/tests')
| -rw-r--r-- | rest_framework/tests/serializer.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/rest_framework/tests/serializer.py b/rest_framework/tests/serializer.py index b4428ca3..48b4f1ab 100644 --- a/rest_framework/tests/serializer.py +++ b/rest_framework/tests/serializer.py @@ -54,6 +54,19 @@ class ActionItemSerializer(serializers.ModelSerializer): model = ActionItem +class ActionItemSerializerCustomRestore(serializers.ModelSerializer): + + 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 + + class PersonSerializer(serializers.ModelSerializer): info = serializers.Field(source='info') @@ -273,6 +286,20 @@ class ValidationTests(TestCase): self.assertEquals(serializer.is_valid(), False) self.assertEquals(serializer.errors, {'title': [u'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.assertEquals(serializer.is_valid(), False) + self.assertEquals(serializer.errors, {'title': [u'Ensure this value has at most 200 characters (it has 201).']}) + def test_default_modelfield_max_length_exceeded(self): data = { 'title': 'Testing "info" field...', |
