Skip to content

Commit 733c207

Browse files
committed
listfield html input tests are seperated
1 parent acf688b commit 733c207

1 file changed

Lines changed: 45 additions & 38 deletions

File tree

tests/test_serializer_lists.py

Lines changed: 45 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,51 @@ def test_validate_html_input(self):
286286
assert serializer.validated_data == expected_output
287287

288288

289+
class TestListFieldHTMLInput:
290+
"""
291+
Tests for ListField with HTML form input, including indexed keys.
292+
"""
293+
294+
def test_listfield_with_indexed_keys(self):
295+
"""
296+
Test that indexed keys (e.g., field[0], field[1]) work correctly
297+
in HTML form submissions.
298+
"""
299+
class CommunitySerializer(serializers.Serializer):
300+
colors = serializers.ListField(
301+
allow_null=True,
302+
child=serializers.CharField(label='Colors', max_length=7),
303+
required=False
304+
)
305+
# Simulate form data with indexed keys
306+
data = MultiValueDict({
307+
'colors[0]': ['#ffffff'],
308+
'colors[1]': ['#000000']
309+
})
310+
serializer = CommunitySerializer(data=data)
311+
assert serializer.is_valid()
312+
assert 'colors' in serializer.validated_data
313+
assert serializer.validated_data['colors'] == ['#ffffff', '#000000']
314+
315+
def test_listfield_standard_form_submission(self):
316+
"""
317+
Test standard HTML form list submission (e.g., multi-select).
318+
Ensures backward compatibility with existing behavior.
319+
"""
320+
class CommunitySerializer(serializers.Serializer):
321+
colors = serializers.ListField(
322+
child=serializers.CharField(label='Colors', max_length=7),
323+
required=True
324+
)
325+
# Standard multi-select form submission
326+
data = MultiValueDict({
327+
'colors': ['#ffffff', '#000000', '#ff0000']
328+
})
329+
serializer = CommunitySerializer(data=data)
330+
assert serializer.is_valid()
331+
assert serializer.validated_data['colors'] == ['#ffffff', '#000000', '#ff0000']
332+
333+
289334
class TestNestedListSerializerAllowEmpty:
290335
"""Tests the behavior of allow_empty=False when a ListSerializer is used as a field."""
291336

@@ -446,26 +491,6 @@ class CommunitySerializer(serializers.Serializer):
446491
assert 'colors' in serializer.validated_data
447492
assert serializer.validated_data['colors'] == ['#ffffff', '#000000']
448493

449-
def test_non_partial_listfield_with_indexed_keys(self):
450-
"""
451-
Test that indexed keys work correctly in non-partial updates.
452-
"""
453-
class CommunitySerializer(serializers.Serializer):
454-
colors = serializers.ListField(
455-
allow_null=True,
456-
child=serializers.CharField(label='Colors', max_length=7),
457-
required=False
458-
)
459-
# Simulate form data with indexed keys
460-
data = MultiValueDict({
461-
'colors[0]': ['#ffffff'],
462-
'colors[1]': ['#000000']
463-
})
464-
serializer = CommunitySerializer(data=data, partial=False)
465-
assert serializer.is_valid()
466-
assert 'colors' in serializer.validated_data
467-
assert serializer.validated_data['colors'] == ['#ffffff', '#000000']
468-
469494
def test_listfield_mixed_plain_and_indexed_keys(self):
470495
"""
471496
Test that when both plain field and indexed keys are present,
@@ -509,24 +534,6 @@ class CommunitySerializer(serializers.Serializer):
509534
assert 'name' in serializer.validated_data
510535
assert 'colors' not in serializer.validated_data # Should be skipped
511536

512-
def test_non_partial_listfield_standard_submission(self):
513-
"""
514-
Test standard HTML form list submission without partial=True.
515-
Ensures backward compatibility with existing behavior.
516-
"""
517-
class CommunitySerializer(serializers.Serializer):
518-
colors = serializers.ListField(
519-
child=serializers.CharField(label='Colors', max_length=7),
520-
required=True
521-
)
522-
# Standard multi-select form submission
523-
data = MultiValueDict({
524-
'colors': ['#ffffff', '#000000', '#ff0000']
525-
})
526-
serializer = CommunitySerializer(data=data, partial=False)
527-
assert serializer.is_valid()
528-
assert serializer.validated_data['colors'] == ['#ffffff', '#000000', '#ff0000']
529-
530537
def test_allow_empty_true(self):
531538
class ListSerializer(serializers.Serializer):
532539
update_field = serializers.IntegerField()

0 commit comments

Comments
 (0)