From 5236674905fa5ae40b8a1a0943795c4e8445cf23 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Fri, 22 Jun 2018 00:40:15 +0200 Subject: [PATCH] tests: add TestHTMLInputWithListAndDict, re-using 2 existing list tests --- tests/test_fields.py | 56 ++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/tests/test_fields.py b/tests/test_fields.py index 165641121..d6ff2082f 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -469,19 +469,6 @@ class TestHTMLInput: assert serializer.is_valid() assert serializer.validated_data == {'scores': [1]} - def test_querydict_list_input_no_values_uses_default(self): - """ - When there are no values passed in, and default is set - The field should return the default value - """ - class TestSerializer(serializers.Serializer): - a = serializers.IntegerField(required=True) - scores = serializers.ListField(default=lambda: [1, 3]) - - serializer = TestSerializer(data=QueryDict('a=1&')) - assert serializer.is_valid() - assert serializer.validated_data == {'a': 1, 'scores': [1, 3]} - def test_querydict_list_input_supports_indexed_keys(self): """ When data is passed in the format `scores[0]=1&scores[1]=3` @@ -494,18 +481,6 @@ class TestHTMLInput: assert serializer.is_valid() assert serializer.validated_data == {'scores': ['5', '6']} - def test_querydict_list_input_no_values_no_default_and_not_required(self): - """ - When there are no keys passed, there is no default, and required=False - The field should be skipped - """ - class TestSerializer(serializers.Serializer): - scores = serializers.ListField(required=False) - - serializer = TestSerializer(data=QueryDict('')) - assert serializer.is_valid() - assert serializer.validated_data == {} - def test_querydict_list_input_posts_key_but_no_values(self): """ When there are no keys passed, there is no default, and required=False @@ -519,6 +494,37 @@ class TestHTMLInput: assert serializer.validated_data == {'scores': ['']} +@pytest.mark.parametrize('field', ( + serializers.ListField, + serializers.DictField, +)) +class TestHTMLInputWithListAndDict: + def test_querydict_no_values_uses_default(self, field): + """ + When there are no values passed in, and default is set + The field should return the default value + """ + class TestSerializer(serializers.Serializer): + a = serializers.IntegerField(required=True) + scores = field(default=lambda: {'default': 'value'}) + + serializer = TestSerializer(data=QueryDict('a=1&')) + assert serializer.is_valid() + assert serializer.validated_data == {'a': 1, 'scores': {'default': 'value'}} + + def test_querydict_no_values_no_default_and_not_required(self, field): + """ + When there are no keys passed, there is no default, and required=False + The field should be skipped + """ + class TestSerializer(serializers.Serializer): + scores = field(required=False) + + serializer = TestSerializer(data=QueryDict('')) + assert serializer.is_valid() + assert serializer.validated_data == {} + + class TestCreateOnlyDefault: def setup(self): default = serializers.CreateOnlyDefault('2001-01-01')