File: test_update_permissions.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 (88 lines) | stat: -rw-r--r-- 2,929 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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# -*- coding: utf-8 -*-
import sys
from io import StringIO

import django
from django.contrib.auth.models import Permission
from django.core.management import call_command
from django.db import models
from django.test import TestCase


if django.VERSION >= (5, 0):
    DJANGO_EXTENSIONS_NAME = "Django Extensions"
    TESTAPP_NAME = "Testapp"
else:
    DJANGO_EXTENSIONS_NAME = "django_extensions"
    TESTAPP_NAME = "testapp"


class UpdatePermissionsTests(TestCase):
    def setUp(self):
        class PermModel(models.Model):
            class Meta:
                app_label = "django_extensions"
                permissions = (("test_permission", "test_permission"),)

        class TestModel(models.Model):
            class Meta:
                app_label = "testapp"
                permissions = (("testapp_permission", "testapp_permission"),)

    def test_works(self):
        original_stdout = sys.stdout
        out = sys.stdout = StringIO()
        call_command("update_permissions", stdout=out, verbosity=3)
        sys.stdout = original_stdout
        self.assertIn("Can change perm model", out.getvalue())

    def test_should_reload_permission_only_for_specified_apps(self):
        original_stdout = sys.stdout
        out = sys.stdout = StringIO()

        call_command("update_permissions", "--apps=testapp", stdout=out, verbosity=3)

        sys.stdout = original_stdout
        self.assertNotIn(
            f"{DJANGO_EXTENSIONS_NAME} | perm model | Can add perm model",
            out.getvalue(),
        )
        self.assertIn(
            f"{TESTAPP_NAME} | test model | Can add test model", out.getvalue()
        )

    def test_should_reload_permission_only_for_all_apps(self):
        original_stdout = sys.stdout
        out = sys.stdout = StringIO()

        call_command("update_permissions", verbosity=3)

        sys.stdout = original_stdout
        self.assertIn(
            f"{DJANGO_EXTENSIONS_NAME} | perm model | Can add perm model",
            out.getvalue(),
        )
        self.assertIn(
            f"{TESTAPP_NAME} | test model | Can add test model", out.getvalue()
        )

    def test_should_update_permission_if_name_changed(self):
        original_stdout = sys.stdout
        out = sys.stdout = StringIO()

        call_command("update_permissions", verbosity=3, create_only=True)
        self.assertIn(
            f"{TESTAPP_NAME} | test model | testapp_permission", out.getvalue()
        )

        testapp_permission = Permission.objects.get(name="testapp_permission")
        testapp_permission.name = "testapp_permission_wrong"
        testapp_permission.save()

        call_command("update_permissions", verbosity=3, update_only=True)

        sys.stdout = original_stdout
        self.assertIn(
            f"'{TESTAPP_NAME} | test model | testapp_permission_wrong' to '{TESTAPP_NAME} | test model | testapp_permission'",
            out.getvalue(),
        )