tests.py 2.56 KB
Newer Older
1
from __future__ import annotations
2
from django.test import TestCase
3
from django.urls import reverse
4
5
from backend.unittest import TestBase
from django.contrib.auth import get_user_model
6

7

8
9
10
11
12
13
class TestPermissions(TestBase, TestCase):
    def test_impersonate_staff(self):
        User = get_user_model()
        visitor = User.objects.create_superuser(email="admin@example.org", fullname="Admin", audit_skip=True)
        visited = User.objects.create_user(email="user@example.org", fullname="User", audit_skip=True)
        client = self.make_test_client(visitor)
14

15
16
17
18
19
20
21
        response = client.get(reverse("impersonate:whoami"))
        self.assertJSONEqual(response.content, {
            'impersonator': None,
            'impersonator_desc': None,
            'user': visitor.pk,
            'user_desc': str(visitor),
        })
22

23
        response = client.post(reverse("impersonate:impersonate"), data={"pk": visited.pk, "next": "/"})
24
25
        self.assertRedirectMatches(response, "^/$")

26
27
28
29
30
31
32
33
34
35
36
37
        response = client.get(reverse("impersonate:whoami"))
        self.assertJSONEqual(response.content, {
            'impersonator': visitor.pk,
            'impersonator_desc': str(visitor),
            'user': visited.pk,
            'user_desc': str(visited),
        })

    def test_impersonate_user(self):
        User = get_user_model()
        visitor = User.objects.create_user(email="user@example.org", fullname="User", audit_skip=True)
        visited = User.objects.create_user(email="user1@example.org", fullname="User1", audit_skip=True)
38
        client = self.make_test_client(visitor)
39
        response = client.post(reverse("impersonate:impersonate"), data={"pk": visited.pk})
40
        self.assertPermissionDenied(response)
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

        response = client.get(reverse("impersonate:whoami"))
        self.assertJSONEqual(response.content, {
            'impersonator': None,
            'impersonator_desc': None,
            'user': visitor.pk,
            'user_desc': str(visitor),
        })

    def test_impersonate_anonymous(self):
        User = get_user_model()
        visited = User.objects.create_user(email="user@example.org", fullname="User", audit_skip=True)
        client = self.make_test_client(None)
        response = client.post(reverse("impersonate:impersonate"), data={"pk": visited.pk})
        self.assertPermissionDenied(response)

        response = client.get(reverse("impersonate:whoami"))
        self.assertJSONEqual(response.content, {
            'impersonator': None,
            'impersonator_desc': None,
            'user': None,
            'user_desc': "AnonymousUser",
        })