File: test_adminsite.py

package info (click to toggle)
python-django 3%3A5.2.5-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 61,236 kB
  • sloc: python: 361,585; javascript: 19,250; xml: 211; makefile: 182; sh: 28
file content (128 lines) | stat: -rw-r--r-- 4,544 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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
from django.contrib import admin
from django.contrib.admin.actions import delete_selected
from django.contrib.auth.models import User
from django.test import SimpleTestCase, TestCase, override_settings
from django.test.client import RequestFactory
from django.urls import path, reverse

from .models import Article

site = admin.AdminSite(name="test_adminsite")
site.register(User)
site.register(Article)


class CustomAdminSite(admin.AdminSite):
    site_title = "Custom title"
    site_header = "Custom site"


custom_site = CustomAdminSite(name="test_custom_adminsite")
custom_site.register(User)


urlpatterns = [
    path("test_admin/admin/", site.urls),
    path("test_custom_admin/admin/", custom_site.urls),
]


@override_settings(ROOT_URLCONF="admin_views.test_adminsite")
class SiteEachContextTest(TestCase):
    """
    Check each_context contains the documented variables and that available_apps context
    variable structure is the expected one.
    """

    request_factory = RequestFactory()

    @classmethod
    def setUpTestData(cls):
        cls.u1 = User.objects.create_superuser(
            username="super", password="secret", email="super@example.com"
        )

    def setUp(self):
        request = self.request_factory.get(reverse("test_adminsite:index"))
        request.user = self.u1
        self.ctx = site.each_context(request)

    def test_each_context(self):
        ctx = self.ctx
        self.assertEqual(ctx["site_header"], "Django administration")
        self.assertEqual(ctx["site_title"], "Django site admin")
        self.assertEqual(ctx["site_url"], "/")
        self.assertIs(ctx["has_permission"], True)

    def test_custom_admin_titles(self):
        request = self.request_factory.get(reverse("test_custom_adminsite:index"))
        request.user = self.u1
        ctx = custom_site.each_context(request)
        self.assertEqual(ctx["site_title"], "Custom title")
        self.assertEqual(ctx["site_header"], "Custom site")

    def test_each_context_site_url_with_script_name(self):
        request = self.request_factory.get(
            reverse("test_adminsite:index"), SCRIPT_NAME="/my-script-name/"
        )
        request.user = self.u1
        self.assertEqual(site.each_context(request)["site_url"], "/my-script-name/")

    def test_available_apps(self):
        ctx = self.ctx
        apps = ctx["available_apps"]
        # we have registered two models from two different apps
        self.assertEqual(len(apps), 2)

        # admin_views.Article
        admin_views = apps[0]
        self.assertEqual(admin_views["app_label"], "admin_views")
        self.assertEqual(len(admin_views["models"]), 1)
        article = admin_views["models"][0]
        self.assertEqual(article["object_name"], "Article")
        self.assertEqual(article["model"], Article)

        # auth.User
        auth = apps[1]
        self.assertEqual(auth["app_label"], "auth")
        self.assertEqual(len(auth["models"]), 1)
        user = auth["models"][0]
        self.assertEqual(user["object_name"], "User")
        self.assertEqual(user["model"], User)

        self.assertEqual(auth["app_url"], "/test_admin/admin/auth/")
        self.assertIs(auth["has_module_perms"], True)

        self.assertIn("perms", user)
        self.assertIs(user["perms"]["add"], True)
        self.assertIs(user["perms"]["change"], True)
        self.assertIs(user["perms"]["delete"], True)
        self.assertEqual(user["admin_url"], "/test_admin/admin/auth/user/")
        self.assertEqual(user["add_url"], "/test_admin/admin/auth/user/add/")
        self.assertEqual(user["name"], "Users")


class SiteActionsTests(SimpleTestCase):
    def setUp(self):
        self.site = admin.AdminSite()

    def test_add_action(self):
        def test_action():
            pass

        self.site.add_action(test_action)
        self.assertEqual(self.site.get_action("test_action"), test_action)

    def test_disable_action(self):
        action_name = "delete_selected"
        self.assertEqual(self.site._actions[action_name], delete_selected)
        self.site.disable_action(action_name)
        with self.assertRaises(KeyError):
            self.site._actions[action_name]

    def test_get_action(self):
        """AdminSite.get_action() returns an action even if it's disabled."""
        action_name = "delete_selected"
        self.assertEqual(self.site.get_action(action_name), delete_selected)
        self.site.disable_action(action_name)
        self.assertEqual(self.site.get_action(action_name), delete_selected)