From 0f86629fb4792702e8683a1e9f8209e0183ab5e7 Mon Sep 17 00:00:00 2001 From: Craig de Stigter Date: Thu, 22 Aug 2013 10:59:47 +1200 Subject: [PATCH] add tests. i broke something --- rest_framework/tests/test_serializer.py | 69 +++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/rest_framework/tests/test_serializer.py b/rest_framework/tests/test_serializer.py index c24976603..85afd8176 100644 --- a/rest_framework/tests/test_serializer.py +++ b/rest_framework/tests/test_serializer.py @@ -1643,3 +1643,72 @@ class SerializerSupportsManyRelationships(TestCase): serializer = SimpleSlugSourceModelSerializer(data={'text': 'foo', 'targets': [1, 2]}) self.assertTrue(serializer.is_valid()) self.assertEqual(serializer.data, {'text': 'foo', 'targets': [1, 2]}) + + +### Regression test for #1053 + +class OverriddenFieldsBase1(serializers.Serializer): + a_field = serializers.CharField() + + +class OverriddenFieldsBase2(serializers.Serializer): + a_field = serializers.IntegerField() + + +class OverriddenFieldsWithSingleBase(OverriddenFieldsBase1): + a_field = serializers.FloatField() + + +class OverriddenFieldsMultipleBases1(OverriddenFieldsBase1, OverriddenFieldsBase2): + # first base takes precedence; a_field should be a CharField. + pass + + +class OverriddenFieldsMultipleBases2(OverriddenFieldsBase2, OverriddenFieldsBase1): + # first base takes precedence; a_field should be a IntegerField. + pass + + +class OverriddenFieldsMultipleBasesOverridden(OverriddenFieldsBase1, OverriddenFieldsBase2): + a_field = serializers.FloatField() + + +class SerializerSupportsOverriddenFields(TestCase): + def test_base_fields_unchanged(self): + self.assertIsInstance( + OverriddenFieldsBase1.base_fields['a_field'], + serializers.CharField, + ) + s = OverriddenFieldsBase1() + self.assertIsInstance(s.fields['a_field'], serializers.CharField) + + def test_overridden_fields_single_base(self): + self.assertIsInstance( + OverriddenFieldsWithSingleBase.base_fields['a_field'], + serializers.FloatField, + ) + s = OverriddenFieldsWithSingleBase() + self.assertIsInstance(s.fields['a_field'], serializers.FloatField) + + def test_overridden_fields_multiple_bases(self): + self.assertIsInstance( + OverriddenFieldsMultipleBases1.base_fields['a_field'], + serializers.CharField, + ) + s = OverriddenFieldsMultipleBases1() + self.assertIsInstance(s.fields['a_field'], serializers.CharField) + + self.assertIsInstance( + OverriddenFieldsMultipleBases2.base_fields['a_field'], + serializers.IntegerField, + ) + s = OverriddenFieldsMultipleBases2() + self.assertIsInstance(s.fields['a_field'], serializers.IntegerField) + + def test_overridden_fields_multiple_bases_overridden(self): + self.assertIsInstance( + OverriddenFieldsMultipleBasesOverridden.base_fields['a_field'], + serializers.FloatField, + ) + s = OverriddenFieldsMultipleBasesOverridden() + self.assertIsInstance(s.fields['a_field'], serializers.FloatField)