During the development process, all classes were written with a variable permission_classes = [permissions.AllowAny, ]
. In the file setting.py set
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication',
'rest_framework.authentication.SessionAuthentication',
],
When writing the tests, it was not considered that user authentication is required to fulfill the request. Therefore, when the parameter [permissions.AllowAny, ]
was removed the error 401 Unauthorized
occurred.
old_test.py
from django.test import TestCase, Client
from django.urls import reverse
from django.db import IntegrityError
from rest_framework.test import APITestCase
from rest_framework import status
class VendorProfileUpdateViewTest(APITestCase):
def test_check_partial_update_api(self):
data = {"vendor_name": "UN"}
vendor = Vendors.objects.create(vendor_name="U4", country="US", 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)
vendor = Vendors.objects.get(vendorid=_id)
self.assertEqual(vendor.vendor_name, 'UN')
I tried to add force_authenticate() configuration in the following way:
class ContactsUpdateViewTest(APITestCase):
def tearDown(self):
self.client.force_authenticate(user=None)
def test_contact_partial_update_api(self):
....
But there have been no changes.