Browse Source

ACL admin basic test harness

Rafał Pitoń 11 years ago
parent
commit
ef9b4a3e97

+ 19 - 0
misago/acl/models.py

@@ -1,6 +1,7 @@
 from django.db import models
 from django.utils.translation import ugettext as _
 from misago.admin import site
+from misago.acl import cachebuster
 import base64
 try:
     import cPickle as pickle
@@ -15,6 +16,15 @@ class Role(models.Model):
     def __unicode__(self):
         return unicode(_(self.name))
 
+    def save(self, *args, **kwargs):
+        if self.pk:
+            cachebuster.invalidate()
+        return super(Role, self).save(*args, **kwargs)
+
+    def delete(self, *args, **kwargs):
+        cachebuster.invalidate()
+        return super(Role, self).delete(*args, **kwargs)
+
     @property
     def permissions(self):
         try:
@@ -41,6 +51,15 @@ class ForumRole(models.Model):
     def __unicode__(self):
         return unicode(_(self.name))
 
+    def save(self, *args, **kwargs):
+        if self.pk:
+            cachebuster.invalidate()
+        return super(ForumRole, self).save(*args, **kwargs)
+
+    def delete(self, *args, **kwargs):
+        cachebuster.invalidate()
+        return super(ForumRole, self).delete(*args, **kwargs)
+
     @property
     def permissions(self):
         try:

+ 0 - 0
misago/acl/tests/__init__.py


+ 87 - 0
misago/acl/tests/test_forumroleadmin_views.py

@@ -0,0 +1,87 @@
+from django.core.urlresolvers import reverse
+from misago.admin.testutils import AdminTestCase
+from misago.acl.models import ForumRole
+
+
+class ForumRoleAdminViewsTests(AdminTestCase):
+    def test_link_registered(self):
+        """admin nav contains forum roles link"""
+        response = self.client.get(
+            reverse('misago:admin:permissions:forums:index'))
+
+        self.assertIn(reverse('misago:admin:permissions:forums:index'),
+                      response.content)
+
+    def test_list_view(self):
+        """roles list view returns 200"""
+        response = self.client.get(
+            reverse('misago:admin:permissions:forums:index'))
+
+        self.assertEqual(response.status_code, 200)
+
+    def test_new_view(self):
+        """new role view has no showstoppers"""
+        response = self.client.get(
+            reverse('misago:admin:permissions:forums:new'))
+        self.assertEqual(response.status_code, 200)
+
+        response = self.client.post(
+            reverse('misago:admin:permissions:forums:new'),
+            data={
+                'name': 'Test ForumRole',
+            })
+        self.assertEqual(response.status_code, 302)
+
+        test_role = ForumRole.objects.get(name='Test ForumRole')
+        response = self.client.get(
+            reverse('misago:admin:permissions:forums:index'))
+        self.assertEqual(response.status_code, 200)
+        self.assertIn(test_role.name, response.content)
+
+    def test_edit_view(self):
+        """edit role view has no showstoppers"""
+        self.client.post(
+            reverse('misago:admin:permissions:forums:new'),
+            data={
+                'name': 'Test ForumRole',
+            })
+
+        test_role = ForumRole.objects.get(name='Test ForumRole')
+
+        response = self.client.get(
+            reverse('misago:admin:permissions:forums:edit',
+                    kwargs={'role_id': test_role.pk}))
+        self.assertEqual(response.status_code, 200)
+        self.assertIn('Test ForumRole', response.content)
+
+        response = self.client.post(
+            reverse('misago:admin:permissions:forums:edit',
+                    kwargs={'role_id': test_role.pk}),
+            data={'name': 'Top Lel'})
+        self.assertEqual(response.status_code, 302)
+
+        test_role = ForumRole.objects.get(name='Top Lel')
+        response = self.client.get(
+            reverse('misago:admin:permissions:forums:index'))
+        self.assertEqual(response.status_code, 200)
+        self.assertIn(test_role.name, response.content)
+
+    def test_delete_view(self):
+        """delete role view has no showstoppers"""
+        self.client.post(
+            reverse('misago:admin:permissions:forums:new'),
+            data={
+                'name': 'Test ForumRole',
+            })
+
+        test_role = ForumRole.objects.get(name='Test ForumRole')
+        response = self.client.post(
+            reverse('misago:admin:permissions:forums:delete',
+                    kwargs={'role_id': test_role.pk}))
+        self.assertEqual(response.status_code, 302)
+
+        self.client.get(reverse('misago:admin:permissions:forums:index'))
+        response = self.client.get(
+            reverse('misago:admin:permissions:forums:index'))
+        self.assertEqual(response.status_code, 200)
+        self.assertTrue(test_role.name not in response.content)

+ 87 - 0
misago/acl/tests/test_roleadmin_views.py

@@ -0,0 +1,87 @@
+from django.core.urlresolvers import reverse
+from misago.admin.testutils import AdminTestCase
+from misago.acl.models import Role
+
+
+class RoleAdminViewsTests(AdminTestCase):
+    def test_link_registered(self):
+        """admin nav contains user roles link"""
+        response = self.client.get(
+            reverse('misago:admin:permissions:users:index'))
+
+        self.assertIn(reverse('misago:admin:permissions:users:index'),
+                      response.content)
+
+    def test_list_view(self):
+        """roles list view returns 200"""
+        response = self.client.get(
+            reverse('misago:admin:permissions:users:index'))
+
+        self.assertEqual(response.status_code, 200)
+
+    def test_new_view(self):
+        """new role view has no showstoppers"""
+        response = self.client.get(
+            reverse('misago:admin:permissions:users:new'))
+        self.assertEqual(response.status_code, 200)
+
+        response = self.client.post(
+            reverse('misago:admin:permissions:users:new'),
+            data={
+                'name': 'Test Role',
+            })
+        self.assertEqual(response.status_code, 302)
+
+        test_role = Role.objects.get(name='Test Role')
+        response = self.client.get(
+            reverse('misago:admin:permissions:users:index'))
+        self.assertEqual(response.status_code, 200)
+        self.assertIn(test_role.name, response.content)
+
+    def test_edit_view(self):
+        """edit role view has no showstoppers"""
+        self.client.post(
+            reverse('misago:admin:permissions:users:new'),
+            data={
+                'name': 'Test Role',
+            })
+
+        test_role = Role.objects.get(name='Test Role')
+
+        response = self.client.get(
+            reverse('misago:admin:permissions:users:edit',
+                    kwargs={'role_id': test_role.pk}))
+        self.assertEqual(response.status_code, 200)
+        self.assertIn('Test Role', response.content)
+
+        response = self.client.post(
+            reverse('misago:admin:permissions:users:edit',
+                    kwargs={'role_id': test_role.pk}),
+            data={'name': 'Top Lel'})
+        self.assertEqual(response.status_code, 302)
+
+        test_role = Role.objects.get(name='Top Lel')
+        response = self.client.get(
+            reverse('misago:admin:permissions:users:index'))
+        self.assertEqual(response.status_code, 200)
+        self.assertIn(test_role.name, response.content)
+
+    def test_delete_view(self):
+        """delete role view has no showstoppers"""
+        self.client.post(
+            reverse('misago:admin:permissions:users:new'),
+            data={
+                'name': 'Test Role',
+            })
+
+        test_role = Role.objects.get(name='Test Role')
+        response = self.client.post(
+            reverse('misago:admin:permissions:users:delete',
+                    kwargs={'role_id': test_role.pk}))
+        self.assertEqual(response.status_code, 302)
+
+        self.client.get(reverse('misago:admin:permissions:users:index'))
+        response = self.client.get(
+            reverse('misago:admin:permissions:users:index'))
+        self.assertEqual(response.status_code, 200)
+        self.assertTrue(test_role.name not in response.content)

+ 0 - 6
misago/acl/views/forumroles.py

@@ -26,12 +26,6 @@ class EditForumRole(ForumRoleAdmin, generic.ModelFormView):
 
 
 class DeleteForumRole(ForumRoleAdmin, generic.ButtonView):
-    def check_permissions(self, request, target):
-        if not target.user_set.exists():
-            message = _('Role "%s" is assigned to forums and '
-                        'can\'t be deleted.')
-            return message % unicode(target.name)
-
     def button_action(self, request, target):
         target.delete()
         message = _('Role "%s" has been deleted.') % unicode(target.name)

+ 0 - 6
misago/acl/views/roles.py

@@ -26,12 +26,6 @@ class EditRole(RoleAdmin, generic.ModelFormView):
 
 
 class DeleteRole(RoleAdmin, generic.ButtonView):
-    def check_permissions(self, request, target):
-        if not target.user_set.exists():
-            message = _('Role "%s" is assigned to users and '
-                        'can\'t be deleted.')
-            return message % unicode(target.name)
-
     def button_action(self, request, target):
         target.delete()
         message = _('Role "%s" has been deleted.') % unicode(target.name)

+ 14 - 14
misago/users/tests/test_rankadmin_views.py

@@ -15,13 +15,11 @@ class RankAdminViewsTests(AdminTestCase):
 
     def test_list_view(self):
         """ranks list view returns 200"""
-        response = self.client.get(
-            reverse('misago:admin:users:ranks:index'))
+        response = self.client.get(reverse('misago:admin:users:ranks:index'))
 
         self.assertEqual(response.status_code, 200)
         self.assertIn('Team', response.content)
 
-
     def test_new_view(self):
         """new rank view has no showstoppers"""
         test_role_a = Role.objects.create(name='Test Role A')
@@ -44,8 +42,7 @@ class RankAdminViewsTests(AdminTestCase):
             })
         self.assertEqual(response.status_code, 302)
 
-        response = self.client.get(
-            reverse('misago:admin:users:ranks:index'))
+        response = self.client.get(reverse('misago:admin:users:ranks:index'))
         self.assertEqual(response.status_code, 200)
         self.assertIn('Test Rank', response.content)
         self.assertIn('Test Title', response.content)
@@ -78,8 +75,8 @@ class RankAdminViewsTests(AdminTestCase):
             reverse('misago:admin:users:ranks:edit',
                     kwargs={'rank_id': test_rank.pk}))
         self.assertEqual(response.status_code, 200)
-        self.assertIn('Test Rank', response.content)
-        self.assertIn('Test Title', response.content)
+        self.assertIn(test_rank.name, response.content)
+        self.assertIn(test_rank.title, response.content)
 
         response = self.client.post(
             reverse('misago:admin:users:ranks:edit',
@@ -90,12 +87,13 @@ class RankAdminViewsTests(AdminTestCase):
             })
         self.assertEqual(response.status_code, 302)
 
-        response = self.client.get(
-            reverse('misago:admin:users:ranks:index'))
+        test_rank = Rank.objects.get(slug='top-lel')
+        response = self.client.get(reverse('misago:admin:users:ranks:index'))
         self.assertEqual(response.status_code, 200)
-        self.assertIn('Top Lel', response.content)
+        self.assertIn(test_rank.name, response.content)
+        self.assertTrue('Test Rank' not in test_rank.roles.all())
+        self.assertTrue('Test Title' not in test_rank.roles.all())
 
-        test_rank = Rank.objects.get(slug='top-lel')
         self.assertIn(test_role_b, test_rank.roles.all())
         self.assertTrue(test_role_a not in test_rank.roles.all())
         self.assertTrue(test_role_c not in test_rank.roles.all())
@@ -191,7 +189,9 @@ class RankAdminViewsTests(AdminTestCase):
                     kwargs={'rank_id': test_rank.pk}))
         self.assertEqual(response.status_code, 302)
 
-        response = self.client.get(
-            reverse('misago:admin:users:ranks:index'))
+        self.client.get(reverse('misago:admin:users:ranks:index'))
+        response = self.client.get(reverse('misago:admin:users:ranks:index'))
         self.assertEqual(response.status_code, 200)
-        self.assertTrue('Top Lel' not in response.content)
+
+        self.assertTrue(test_rank.name not in response.content)
+        self.assertTrue(test_rank.title not in response.content)

+ 5 - 1
misago/users/views/rankadmin.py

@@ -36,7 +36,11 @@ class EditRank(RankAdmin, generic.ModelFormView):
 
 class DeleteRank(RankAdmin, generic.ButtonView):
     def check_permissions(self, request, target):
-        if not target.user_set.exists():
+        if target.is_default:
+            message = _('Rank "%s" is default rank and '
+                        'can\'t be deleted.')
+            return message % unicode(target.name)
+        if target.user_set.exists():
             message = _('Rank "%s" is assigned to users and '
                         'can\'t be deleted.')
             return message % unicode(target.name)