How i can send the UPDATE or CREATE request from my test case? When i run my test case the create/update methods never fired in serializer.. What i misunderstand in Django philosophy? Can someone suggest what i have to do?
For example:
#View
class filesPairView (viewsets.ModelViewSet):
serializer_class = filesPairViewSerializer
def create(self, request):
...
return Response(status=status.HTTP_201_CREATED)
#Serializer
class filesPairViewSerializer(serializers.ModelSerializer):
class Meta:
...
def create(self, validated_data):
print ("filesPairViewSerializer CREATE")
def update(self, validated_data):
print ("filesPairViewSerializer UPDATE")
#Test case
class filesPairViewTestCase(APITestCase):
def test_barmi(self):
print("test_barmi")
url = ('http://127.0.0.1:8000/api/filesPairView/')
data ={
#some valid data
}
response = self.client.post(url, data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
#urls
router.register(r'filesPairView', views.filesPairView )
CodePudding user response:
Do the following:
#Test case
from django.urls import reverse
class filesPairViewTestCase(APITestCase):
def test_barmi(self):
print("test_barmi")
url = reverse('filespairview-list')
data ={
#some valid data
}
response = self.client.post(url, data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
#urls
router.register(r'filesPairView', views.filesPairView, basename='filespairview')
Notice that the trick here is use the basename
which is normally in singular and has the following result based on REST:
reverse('filespairview-list')
->/filesPairView/
-GET
- List allreverse('filespairview-list')
->/filesPairView/
-POST
- Createreverse('filespairview-detail')
->/filesPairView/{int:pk}/
-GET
- Get onereverse('filespairview-detail')
->/filesPairView/{int:pk}/
-POST
- Update onereverse('filespairview-detail')
->/filesPairView/{int:pk}/
-PATCH
- Update partial