summaryrefslogtreecommitdiff
path: root/tests/admin_views
diff options
context:
space:
mode:
authorMaxime Turcotte <maxime.turcotte@savoirfairelinux.com>2014-05-28 12:07:27 -0400
committerTim Graham <timograham@gmail.com>2014-06-13 09:31:40 -0400
commit504c89e8008c557a1e83c45535b549f77a3503b2 (patch)
tree3e4345d28dbbbdfa18bb7abfb68950c67655c9ea /tests/admin_views
parentbf743a4d571bbb7da276bc21c61f6ada5d26942c (diff)
Fixed #6327 -- Added has_module_permission method to BaseModelAdmin
Thanks chrj for the suggestion.
Diffstat (limited to 'tests/admin_views')
-rw-r--r--tests/admin_views/admin.py8
-rw-r--r--tests/admin_views/tests.py64
-rw-r--r--tests/admin_views/urls.py1
3 files changed, 73 insertions, 0 deletions
diff --git a/tests/admin_views/admin.py b/tests/admin_views/admin.py
index db186f6027..22ff4536fa 100644
--- a/tests/admin_views/admin.py
+++ b/tests/admin_views/admin.py
@@ -124,6 +124,12 @@ class ArticleAdmin(admin.ModelAdmin):
return super(ArticleAdmin, self).save_model(request, obj, form, change)
+class ArticleAdmin2(admin.ModelAdmin):
+
+ def has_module_permission(self, request):
+ return False
+
+
class RowLevelChangePermissionModelAdmin(admin.ModelAdmin):
def has_change_permission(self, request, obj=None):
""" Only allow changing objects with even id number """
@@ -923,3 +929,5 @@ site.register(Group, GroupAdmin)
site2 = admin.AdminSite(name="namespaced_admin")
site2.register(User, UserAdmin)
site2.register(Group, GroupAdmin)
+site7 = admin.AdminSite(name="admin7")
+site7.register(Article, ArticleAdmin2)
diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py
index 185f252335..c8ae5e743c 100644
--- a/tests/admin_views/tests.py
+++ b/tests/admin_views/tests.py
@@ -1493,6 +1493,70 @@ class AdminViewPermissionsTest(TestCase):
self.assertEqual(response.status_code, 302)
self.assertEqual(response.url, 'http://example.com/dummy/foo/')
+ def test_has_module_permission(self):
+ """
+ Ensure that has_module_permission() returns True for all users who
+ have any permission for that module (add, change, or delete), so that
+ the module is displayed on the admin index page.
+ """
+ login_url = reverse('admin:login') + '?next=/test_admin/admin/'
+
+ self.client.post(login_url, self.super_login)
+ response = self.client.get('/test_admin/admin/')
+ self.assertContains(response, 'admin_views')
+ self.assertContains(response, 'Articles')
+ self.client.get('/test_admin/admin/logout/')
+
+ self.client.post(login_url, self.adduser_login)
+ response = self.client.get('/test_admin/admin/')
+ self.assertContains(response, 'admin_views')
+ self.assertContains(response, 'Articles')
+ self.client.get('/test_admin/admin/logout/')
+
+ self.client.post(login_url, self.changeuser_login)
+ response = self.client.get('/test_admin/admin/')
+ self.assertContains(response, 'admin_views')
+ self.assertContains(response, 'Articles')
+ self.client.get('/test_admin/admin/logout/')
+
+ self.client.post(login_url, self.deleteuser_login)
+ response = self.client.get('/test_admin/admin/')
+ self.assertContains(response, 'admin_views')
+ self.assertContains(response, 'Articles')
+ self.client.get('/test_admin/admin/logout/')
+
+ def test_overriding_has_module_permission(self):
+ """
+ Ensure that overriding has_module_permission() has the desired effect.
+ In this case, it always returns False, so the module should not be
+ displayed on the admin index page for any users.
+ """
+ login_url = reverse('admin:login') + '?next=/test_admin/admin7/'
+
+ self.client.post(login_url, self.super_login)
+ response = self.client.get('/test_admin/admin7/')
+ self.assertNotContains(response, 'admin_views')
+ self.assertNotContains(response, 'Articles')
+ self.client.get('/test_admin/admin7/logout/')
+
+ self.client.post(login_url, self.adduser_login)
+ response = self.client.get('/test_admin/admin7/')
+ self.assertNotContains(response, 'admin_views')
+ self.assertNotContains(response, 'Articles')
+ self.client.get('/test_admin/admin7/logout/')
+
+ self.client.post(login_url, self.changeuser_login)
+ response = self.client.get('/test_admin/admin7/')
+ self.assertNotContains(response, 'admin_views')
+ self.assertNotContains(response, 'Articles')
+ self.client.get('/test_admin/admin7/logout/')
+
+ self.client.post(login_url, self.deleteuser_login)
+ response = self.client.get('/test_admin/admin7/')
+ self.assertNotContains(response, 'admin_views')
+ self.assertNotContains(response, 'Articles')
+ self.client.get('/test_admin/admin7/logout/')
+
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',),
ROOT_URLCONF="admin_views.urls")
diff --git a/tests/admin_views/urls.py b/tests/admin_views/urls.py
index c0c59d34fc..a9fa71040c 100644
--- a/tests/admin_views/urls.py
+++ b/tests/admin_views/urls.py
@@ -11,4 +11,5 @@ urlpatterns = [
url(r'^test_admin/admin3/', include(admin.site.urls), dict(form_url='pony')),
url(r'^test_admin/admin4/', include(customadmin.simple_site.urls)),
url(r'^test_admin/admin5/', include(admin.site2.urls)),
+ url(r'^test_admin/admin7/', include(admin.site7.urls)),
]