ilse2005
ilse2005

Reputation: 11439

rest-framework permission testing

I am working with the latest django-rest-framework and want to create some tests. I have a ModelViewSet and a custom permission which accesses request.GET. This all works well, but in my unittest the GET dictionary is empty. Here is my code:

class MyModelViewSet(ModelViewSet):
     ...
     permission_classes = [IsAuthenticated, CustomPermission]
     ...

permissions.py:
class CustomPermission(permissions.BasePermission):
    def has_permission(self, request, view):
       # here I access the GET to check permissions
       id = request.GET.get('id')
       obj = MyModel.objects.get(id=id)

       return request.user == obj.owner

This all works as expected in the browsable api. But now I wrote a unittest:

class  ModelTestCase(APITestCase):
    def setUp(self):
        self.obj = mommy.make('MyModel') 
        self.user = mommy.make('CustomUser')       

    def test_list(self):
        self.client.force_authenticate(user=self.user)
        url = '%s?id=%s' % (reverse('mymodel-list'), self.obj.id)
        r = self.client.get(url)  # this raises the exception

And here I get an exception:

models.DoesNotExist: MyModel matching query does not exist.

While debugging I realized that request.GET is empty in has_permission. Has anyone an idea why this is working in "production" but not in the unittest?

Upvotes: 2

Views: 866

Answers (1)

ilse2005
ilse2005

Reputation: 11439

Updating to the newest release (3.2.1) fixed this issue.

Upvotes: 1

Related Questions