Reputation: 137
I am really noebie for testing. Actuall, I dont know how to write test url for getting response from viewsets. This is my views,
class AppraisalAPI(viewsets.ReadOnlyModelViewSet):
queryset = Appraisal.objects.all().order_by('-id')
serializer_class = AppraisalSerializer
def get_permissions(self):
if self.action in ['retrieve']:
self.permission_classes = [IsHRUser | IsManagementUser]
elif self.action in ['list']:
self.permission_classes = [IsUser]
return super(self.__class__, self).get_permissions()
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
data = instance.summary()
return Response(data)
This is my urls.py,
router = routers.DefaultRouter()
router.register('appraisal', AppraisalAPI)
urlpatterns = [
path('', include(router.urls)),
]
This is my test function,
def test_appraisal_api_readonly(self):
url = reverse('appraisal-list')
self.client = Client(HTTP_AUTHORIZATION='Token ' + token.key)
resp1 = self.client.get(url, format='json')
self.assertEqual(resp1.status_code, 200)
This test url only went inside list action. when i give detail insteadof list it went only retrieve action. Here, I want to get Retrive function response, How can i get after getting permission i want to receive retrive function response. Anyhelp Appreciable,..
Upvotes: 1
Views: 943
Reputation: 476493
Since you use the DefaultRouter
, you can trigger the retrieve
action with appraisal-detail
, and use a primary key of the object, so:
def test_appraisal_api_readonly(self):
url = reverse('appraisal-detail', kwargs={'pk': some_pk})
self.client = Client(HTTP_AUTHORIZATION='Token ' + token.key)
resp1 = self.client.get(url, format='json')
self.assertEqual(resp1.status_code, 200)
with some_pk
the primary key (.pk
) of some item you construct in the test.
Upvotes: 2