File: test_mixins.py

package info (click to toggle)
python-django-extensions 4.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,820 kB
  • sloc: python: 18,601; javascript: 7,354; makefile: 108; xml: 17
file content (47 lines) | stat: -rw-r--r-- 1,628 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# -*- coding: utf-8 -*-
from django.test import TestCase, RequestFactory
from django.http import HttpResponse
from django.views.generic import DetailView
from django.contrib.auth import get_user_model
from django.contrib.auth.models import AnonymousUser
from django.core.exceptions import PermissionDenied

from django_extensions.auth.mixins import ModelUserFieldPermissionMixin

from tests.testapp.models import HasOwnerModel


class EmptyResponseView(DetailView):
    model = HasOwnerModel

    def get(self, request, *args, **kwargs):
        return HttpResponse()


class OwnerView(ModelUserFieldPermissionMixin, EmptyResponseView):
    model_permission_user_field = "owner"


class ModelUserFieldPermissionMixinTests(TestCase):
    factory = RequestFactory()
    User = get_user_model()

    @classmethod
    def setUpTestData(cls):
        cls.user = cls.User.objects.create(username="Joe", password="pass")
        cls.ownerModel = HasOwnerModel.objects.create(owner=cls.user)

    # Test if owner model has access
    def test_permission_pass(self):
        request = self.factory.get("/permission-required/" + str(self.ownerModel.id))
        request.user = self.user
        resp = OwnerView.as_view()(request)
        self.assertEqual(resp.status_code, 200)

    # # Test if non owner model is redirected
    def test_permission_denied_and_redirect(self):
        request = self.factory.get("/permission-required/" + str(self.ownerModel.id))
        request.user = AnonymousUser()
        resp = OwnerView.as_view()(request)
        self.assertRaises(PermissionDenied)
        self.assertEqual(resp.status_code, 302)