test_adminsite.py 4.4 KB

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