mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-29 17:39:48 +03:00
#6558 test to prove readonly field default value does not exist on validated data
This commit is contained in:
parent
06bf10397f
commit
024e934795
|
@ -36,7 +36,8 @@ class RelatedModel(models.Model):
|
||||||
|
|
||||||
class RelatedModelSerializer(serializers.ModelSerializer):
|
class RelatedModelSerializer(serializers.ModelSerializer):
|
||||||
username = serializers.CharField(source='user.username',
|
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:
|
class Meta:
|
||||||
model = RelatedModel
|
model = RelatedModel
|
||||||
|
@ -65,6 +66,14 @@ class UniquenessIntegerSerializer(serializers.Serializer):
|
||||||
integer = serializers.CharField(validators=[UniqueValidator(queryset=IntegerFieldModel.objects.all())])
|
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):
|
class TestUniquenessValidation(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.instance = UniquenessModel.objects.create(username='existing')
|
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
|
When model fields are not included in a serializer, then uniqueness
|
||||||
validators should not be added for that field.
|
validators should not be added for that field.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class ExcludedFieldSerializer(serializers.ModelSerializer):
|
class ExcludedFieldSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = UniquenessTogetherModel
|
model = UniquenessTogetherModel
|
||||||
fields = ('id', 'race_name',)
|
fields = ('id', 'race_name',)
|
||||||
|
|
||||||
serializer = ExcludedFieldSerializer()
|
serializer = ExcludedFieldSerializer()
|
||||||
expected = dedent("""
|
expected = dedent("""
|
||||||
ExcludedFieldSerializer():
|
ExcludedFieldSerializer():
|
||||||
|
@ -262,6 +273,7 @@ class TestUniquenessTogetherValidation(TestCase):
|
||||||
When serializer fields are read only, then uniqueness
|
When serializer fields are read only, then uniqueness
|
||||||
validators should not be added for that field.
|
validators should not be added for that field.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class ReadOnlyFieldSerializer(serializers.ModelSerializer):
|
class ReadOnlyFieldSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = UniquenessTogetherModel
|
model = UniquenessTogetherModel
|
||||||
|
@ -281,6 +293,7 @@ class TestUniquenessTogetherValidation(TestCase):
|
||||||
"""
|
"""
|
||||||
Special case of read_only + default DOES validate unique_together.
|
Special case of read_only + default DOES validate unique_together.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class ReadOnlyFieldWithDefaultSerializer(serializers.ModelSerializer):
|
class ReadOnlyFieldWithDefaultSerializer(serializers.ModelSerializer):
|
||||||
race_name = serializers.CharField(max_length=100, read_only=True, default='example')
|
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..
|
Ensure validators can be explicitly removed..
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class NoValidatorsSerializer(serializers.ModelSerializer):
|
class NoValidatorsSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = UniquenessTogetherModel
|
model = UniquenessTogetherModel
|
||||||
|
@ -353,6 +367,7 @@ class TestUniquenessTogetherValidation(TestCase):
|
||||||
filter_queryset should add value from existing instance attribute
|
filter_queryset should add value from existing instance attribute
|
||||||
if it is not provided in attributes dict
|
if it is not provided in attributes dict
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class MockQueryset:
|
class MockQueryset:
|
||||||
def filter(self, **kwargs):
|
def filter(self, **kwargs):
|
||||||
self.called_with = kwargs
|
self.called_with = kwargs
|
||||||
|
@ -435,6 +450,7 @@ class TestUniquenessForDateValidation(TestCase):
|
||||||
'published': datetime.date(2000, 1, 1)
|
'published': datetime.date(2000, 1, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Tests for `UniqueForMonthValidator`
|
# Tests for `UniqueForMonthValidator`
|
||||||
# ----------------------------------
|
# ----------------------------------
|
||||||
|
|
||||||
|
@ -474,6 +490,7 @@ class UniqueForMonthTests(TestCase):
|
||||||
'published': datetime.date(2017, 2, 1)
|
'published': datetime.date(2017, 2, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Tests for `UniqueForYearValidator`
|
# Tests for `UniqueForYearValidator`
|
||||||
# ----------------------------------
|
# ----------------------------------
|
||||||
|
|
||||||
|
@ -555,24 +572,35 @@ class TestHiddenFieldUniquenessForDateValidation(TestCase):
|
||||||
assert repr(serializer) == expected
|
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):
|
class ValidatorsTests(TestCase):
|
||||||
|
|
||||||
def test_qs_exists_handles_type_error(self):
|
def test_qs_exists_handles_type_error(self):
|
||||||
class TypeErrorQueryset:
|
class TypeErrorQueryset:
|
||||||
def exists(self):
|
def exists(self):
|
||||||
raise TypeError
|
raise TypeError
|
||||||
|
|
||||||
assert qs_exists(TypeErrorQueryset()) is False
|
assert qs_exists(TypeErrorQueryset()) is False
|
||||||
|
|
||||||
def test_qs_exists_handles_value_error(self):
|
def test_qs_exists_handles_value_error(self):
|
||||||
class ValueErrorQueryset:
|
class ValueErrorQueryset:
|
||||||
def exists(self):
|
def exists(self):
|
||||||
raise ValueError
|
raise ValueError
|
||||||
|
|
||||||
assert qs_exists(ValueErrorQueryset()) is False
|
assert qs_exists(ValueErrorQueryset()) is False
|
||||||
|
|
||||||
def test_qs_exists_handles_data_error(self):
|
def test_qs_exists_handles_data_error(self):
|
||||||
class DataErrorQueryset:
|
class DataErrorQueryset:
|
||||||
def exists(self):
|
def exists(self):
|
||||||
raise DataError
|
raise DataError
|
||||||
|
|
||||||
assert qs_exists(DataErrorQueryset()) is False
|
assert qs_exists(DataErrorQueryset()) is False
|
||||||
|
|
||||||
def test_validator_raises_error_if_not_all_fields_are_provided(self):
|
def test_validator_raises_error_if_not_all_fields_are_provided(self):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user