|
5 | 5 | from rest_framework import serializers
|
6 | 6 | from rest_framework.exceptions import ErrorDetail
|
7 | 7 | from tests.models import (
|
8 |
| - CustomManagerModel, NullableOneToOneSource, OneToOneTarget |
| 8 | + CustomManagerModel, NullableOneToOneSource, OneToOneTarget, TestListModel |
9 | 9 | )
|
10 | 10 |
|
11 | 11 |
|
@@ -775,3 +775,47 @@ def test(self):
|
775 | 775 | queryset = NullableOneToOneSource.objects.all()
|
776 | 776 | serializer = self.serializer(queryset, many=True)
|
777 | 777 | assert serializer.data
|
| 778 | + |
| 779 | + |
| 780 | +class TestManyTrueValidationCheck: |
| 781 | + """ |
| 782 | + Tests ListSerializer validation with many=True for both valid and invalid model data. |
| 783 | + """ |
| 784 | + |
| 785 | + @pytest.mark.django_db |
| 786 | + def test_run_child_validation_with_many_true(self): |
| 787 | + obj1 = TestListModel.objects.create(name="A", value=1) |
| 788 | + obj2 = TestListModel.objects.create(name="B", value=2) |
| 789 | + |
| 790 | + class TestListModelSerializer(serializers.ModelSerializer): |
| 791 | + class Meta: |
| 792 | + model = TestListModel |
| 793 | + fields = ["id", "name", "value"] |
| 794 | + |
| 795 | + input_data = [ |
| 796 | + {"id": obj1.id, "name": "Updated A", "value": 10}, |
| 797 | + {"id": obj2.id, "name": "Updated B", "value": 20}, |
| 798 | + ] |
| 799 | + |
| 800 | + serializer = TestListModelSerializer([obj1, obj2], data=input_data, many=True) |
| 801 | + assert serializer.is_valid(), serializer.errors |
| 802 | + |
| 803 | + serializer = TestListModelSerializer(TestListModel.objects.all(), data=input_data, many=True) |
| 804 | + assert serializer.is_valid(), serializer.errors |
| 805 | + |
| 806 | + @pytest.mark.django_db |
| 807 | + def test_validation_error_for_invalid_data(self): |
| 808 | + obj = TestListModel.objects.create(name="C", value=5) |
| 809 | + |
| 810 | + class TestListModelSerializer(serializers.ModelSerializer): |
| 811 | + class Meta: |
| 812 | + model = TestListModel |
| 813 | + fields = ["id", "name", "value"] |
| 814 | + |
| 815 | + input_data = [ |
| 816 | + {"id": obj.pk, "name": "", "value": -1}, |
| 817 | + ] |
| 818 | + |
| 819 | + serializer = TestListModelSerializer([obj], data=input_data, many=True) |
| 820 | + assert not serializer.is_valid() |
| 821 | + assert "name" in serializer.errors[0] |
0 commit comments