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):
|
||||
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):
|
||||
|
|
Loading…
Reference in New Issue
Block a user