From 024e93479532ce7e5760019bdc0c5667f7883f4c Mon Sep 17 00:00:00 2001 From: Samiul Sk Date: Fri, 12 Jul 2019 20:31:44 +0530 Subject: [PATCH] #6558 test to prove readonly field default value does not exist on validated data --- tests/test_validators.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/tests/test_validators.py b/tests/test_validators.py index fe31ba235..bcbc3aba2 100644 --- a/tests/test_validators.py +++ b/tests/test_validators.py @@ -36,7 +36,8 @@ class RelatedModel(models.Model): class RelatedModelSerializer(serializers.ModelSerializer): username = serializers.CharField(source='user.username', - validators=[UniqueValidator(queryset=UniquenessModel.objects.all(), lookup='iexact')]) # NOQA + validators=[UniqueValidator(queryset=UniquenessModel.objects.all(), + lookup='iexact')]) # NOQA class Meta: model = RelatedModel @@ -65,6 +66,14 @@ class UniquenessIntegerSerializer(serializers.Serializer): integer = serializers.CharField(validators=[UniqueValidator(queryset=IntegerFieldModel.objects.all())]) +class ReadonlyDefaultDateSerializer(serializers.Serializer): + """ + This serializer is to test if read_only field + default value passed to validated data + """ + published = serializers.DateField(read_only=True, default=datetime.date.today) + + class TestUniquenessValidation(TestCase): def setUp(self): self.instance = UniquenessModel.objects.create(username='existing') @@ -245,10 +254,12 @@ class TestUniquenessTogetherValidation(TestCase): When model fields are not included in a serializer, then uniqueness validators should not be added for that field. """ + class ExcludedFieldSerializer(serializers.ModelSerializer): class Meta: model = UniquenessTogetherModel fields = ('id', 'race_name',) + serializer = ExcludedFieldSerializer() expected = dedent(""" ExcludedFieldSerializer(): @@ -262,6 +273,7 @@ class TestUniquenessTogetherValidation(TestCase): When serializer fields are read only, then uniqueness validators should not be added for that field. """ + class ReadOnlyFieldSerializer(serializers.ModelSerializer): class Meta: model = UniquenessTogetherModel @@ -281,6 +293,7 @@ class TestUniquenessTogetherValidation(TestCase): """ Special case of read_only + default DOES validate unique_together. """ + class ReadOnlyFieldWithDefaultSerializer(serializers.ModelSerializer): race_name = serializers.CharField(max_length=100, read_only=True, default='example') @@ -305,6 +318,7 @@ class TestUniquenessTogetherValidation(TestCase): """ Ensure validators can be explicitly removed.. """ + class NoValidatorsSerializer(serializers.ModelSerializer): class Meta: model = UniquenessTogetherModel @@ -353,6 +367,7 @@ class TestUniquenessTogetherValidation(TestCase): filter_queryset should add value from existing instance attribute if it is not provided in attributes dict """ + class MockQueryset: def filter(self, **kwargs): self.called_with = kwargs @@ -435,6 +450,7 @@ class TestUniquenessForDateValidation(TestCase): 'published': datetime.date(2000, 1, 1) } + # Tests for `UniqueForMonthValidator` # ---------------------------------- @@ -474,6 +490,7 @@ class UniqueForMonthTests(TestCase): 'published': datetime.date(2017, 2, 1) } + # Tests for `UniqueForYearValidator` # ---------------------------------- @@ -555,24 +572,35 @@ class TestHiddenFieldUniquenessForDateValidation(TestCase): assert repr(serializer) == expected +class TestReadOnlyDefaultValidation(TestCase): + # converting validated data to dict from ordered dict + def test_read_only_default_donot_exists_on_validated_data(self): + serializer = ReadonlyDefaultDateSerializer(data={}) + self.assertTrue(serializer.is_valid()) + self.assertDictEqual(dict(serializer.validated_data), {}) + + class ValidatorsTests(TestCase): def test_qs_exists_handles_type_error(self): class TypeErrorQueryset: def exists(self): raise TypeError + assert qs_exists(TypeErrorQueryset()) is False def test_qs_exists_handles_value_error(self): class ValueErrorQueryset: def exists(self): raise ValueError + assert qs_exists(ValueErrorQueryset()) is False def test_qs_exists_handles_data_error(self): class DataErrorQueryset: def exists(self): raise DataError + assert qs_exists(DataErrorQueryset()) is False def test_validator_raises_error_if_not_all_fields_are_provided(self):