@Lepilov

DRF: Почему не проходит тест PUT метода?

С использованием Postman функционал отрабатывает, инстансы обновляются. Написал такой тест

class VendorProfileUpdateViewTest(APITestCase):

    def test_check_partial_update_api(self):
        data = {"nda": "2020-11-11"}
        vendor = Vendors.objects.create(vendor_name="U4", country="Belarus", nda="2020-12-12", )
        VendorContacts.objects.create(contact_name="Mrk", phone="2373823", email="test@gmail.com", vendor=vendor)
        _id = vendor.vendorid
        url = reverse('vendor_update',  kwargs={'vendorid': _id})
        response = self.client.put(url, data, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(vendor.nda, '2020-11-11')


И получаю

FAIL: test_check_partial_update_api (vendors.tests.VendorProfileUpdateViewTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/y700/projects/solution/apps/vendors/tests.py", line 183, in test_check_partial_update_api
    self.assertEqual(vendor.nda, '2020-11-11')
AssertionError: '2020-12-12' != '2020-11-11'
- 2020-12-12
?       ^  ^
+ 2020-11-11
?       ^  ^


Если распринтить в тесте то что отдается клиентом print(json.loads(response.content)['nda']) то ролучаю то что и ожидал - новую дату 2020-11-11 Но assertEqual выдает ошибку, не могу понять что не так.

views.py

class VendorProfileUpdateView(generics.RetrieveUpdateAPIView):

    serializer_class = VendorManagementUpdateSerializer
    lookup_field = 'vendorid'

    def get_queryset(self):
        vendorid = self.kwargs['vendorid']
        return Vendors.objects.filter(vendorid=vendorid)

    def put(self, request, *args, **kwargs):
        return self.partial_update(request, *args, **kwargs)


serializer.py
class VendorManagementUpdateSerializer(serializers.ModelSerializer):
    contacts = VendorContactSerializer(many=True)
    parent = serializers.PrimaryKeyRelatedField(queryset=Vendors.objects.all(), required=False, allow_null=True)

    class Meta:
        model = Vendors
        fields = ('vendorid',
                  'vendor_name',
                  'active',
                  'country',
                  'nda',
                  'parent',
                  'contacts',
                  )

    def update(self, instance, validated_data):
        # raise_errors_on_nested_writes('update', self, validated_data)

        for attr, value in validated_data.items():
            setattr(instance, attr, value)
        instance.save()

        return instance


urls.py
path('<int:vendorid>/', VendorProfileUpdateView.as_view(), name='vendor_update'),
  • Вопрос задан
  • 21 просмотр
Решения вопроса 1
@bacon
Так наверно надо заново из базы считать?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы