1. from django.contrib import admin
    
  2. from django.contrib.admin.actions import delete_selected
    
  3. from django.contrib.auth.models import User
    
  4. from django.test import SimpleTestCase, TestCase, override_settings
    
  5. from django.test.client import RequestFactory
    
  6. from django.urls import path, reverse
    
  7. 
    
  8. from .models import Article
    
  9. 
    
  10. site = admin.AdminSite(name="test_adminsite")
    
  11. site.register(User)
    
  12. site.register(Article)
    
  13. 
    
  14. urlpatterns = [
    
  15.     path("test_admin/admin/", site.urls),
    
  16. ]
    
  17. 
    
  18. 
    
  19. @override_settings(ROOT_URLCONF="admin_views.test_adminsite")
    
  20. class SiteEachContextTest(TestCase):
    
  21.     """
    
  22.     Check each_context contains the documented variables and that available_apps context
    
  23.     variable structure is the expected one.
    
  24.     """
    
  25. 
    
  26.     request_factory = RequestFactory()
    
  27. 
    
  28.     @classmethod
    
  29.     def setUpTestData(cls):
    
  30.         cls.u1 = User.objects.create_superuser(
    
  31.             username="super", password="secret", email="[email protected]"
    
  32.         )
    
  33. 
    
  34.     def setUp(self):
    
  35.         request = self.request_factory.get(reverse("test_adminsite:index"))
    
  36.         request.user = self.u1
    
  37.         self.ctx = site.each_context(request)
    
  38. 
    
  39.     def test_each_context(self):
    
  40.         ctx = self.ctx
    
  41.         self.assertEqual(ctx["site_header"], "Django administration")
    
  42.         self.assertEqual(ctx["site_title"], "Django site admin")
    
  43.         self.assertEqual(ctx["site_url"], "/")
    
  44.         self.assertIs(ctx["has_permission"], True)
    
  45. 
    
  46.     def test_each_context_site_url_with_script_name(self):
    
  47.         request = self.request_factory.get(
    
  48.             reverse("test_adminsite:index"), SCRIPT_NAME="/my-script-name/"
    
  49.         )
    
  50.         request.user = self.u1
    
  51.         self.assertEqual(site.each_context(request)["site_url"], "/my-script-name/")
    
  52. 
    
  53.     def test_available_apps(self):
    
  54.         ctx = self.ctx
    
  55.         apps = ctx["available_apps"]
    
  56.         # we have registered two models from two different apps
    
  57.         self.assertEqual(len(apps), 2)
    
  58. 
    
  59.         # admin_views.Article
    
  60.         admin_views = apps[0]
    
  61.         self.assertEqual(admin_views["app_label"], "admin_views")
    
  62.         self.assertEqual(len(admin_views["models"]), 1)
    
  63.         article = admin_views["models"][0]
    
  64.         self.assertEqual(article["object_name"], "Article")
    
  65.         self.assertEqual(article["model"], Article)
    
  66. 
    
  67.         # auth.User
    
  68.         auth = apps[1]
    
  69.         self.assertEqual(auth["app_label"], "auth")
    
  70.         self.assertEqual(len(auth["models"]), 1)
    
  71.         user = auth["models"][0]
    
  72.         self.assertEqual(user["object_name"], "User")
    
  73.         self.assertEqual(user["model"], User)
    
  74. 
    
  75.         self.assertEqual(auth["app_url"], "/test_admin/admin/auth/")
    
  76.         self.assertIs(auth["has_module_perms"], True)
    
  77. 
    
  78.         self.assertIn("perms", user)
    
  79.         self.assertIs(user["perms"]["add"], True)
    
  80.         self.assertIs(user["perms"]["change"], True)
    
  81.         self.assertIs(user["perms"]["delete"], True)
    
  82.         self.assertEqual(user["admin_url"], "/test_admin/admin/auth/user/")
    
  83.         self.assertEqual(user["add_url"], "/test_admin/admin/auth/user/add/")
    
  84.         self.assertEqual(user["name"], "Users")
    
  85. 
    
  86. 
    
  87. class SiteActionsTests(SimpleTestCase):
    
  88.     def setUp(self):
    
  89.         self.site = admin.AdminSite()
    
  90. 
    
  91.     def test_add_action(self):
    
  92.         def test_action():
    
  93.             pass
    
  94. 
    
  95.         self.site.add_action(test_action)
    
  96.         self.assertEqual(self.site.get_action("test_action"), test_action)
    
  97. 
    
  98.     def test_disable_action(self):
    
  99.         action_name = "delete_selected"
    
  100.         self.assertEqual(self.site._actions[action_name], delete_selected)
    
  101.         self.site.disable_action(action_name)
    
  102.         with self.assertRaises(KeyError):
    
  103.             self.site._actions[action_name]
    
  104. 
    
  105.     def test_get_action(self):
    
  106.         """AdminSite.get_action() returns an action even if it's disabled."""
    
  107.         action_name = "delete_selected"
    
  108.         self.assertEqual(self.site.get_action(action_name), delete_selected)
    
  109.         self.site.disable_action(action_name)
    
  110.         self.assertEqual(self.site.get_action(action_name), delete_selected)