File: test_adminsite.py

package info (click to toggle)
python-django 3%3A4.2.23-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 58,592 kB
  • sloc: python: 334,729; javascript: 18,754; xml: 215; makefile: 178; sh: 27
file content (110 lines) | stat: -rw-r--r-- 3,969 bytes parent folder | download | duplicates (3)
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
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)

urlpatterns = [
    path("test_admin/admin/", 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_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)