test_adminsite.py 3.7 KB

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