Viji Lakshmi
Viji Lakshmi

Reputation: 137

How to write url for testing when using viewsets in Django Restframework

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

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

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

Related Questions