Просмотр исходного кода

Tests harness for warning levels admin.

Rafał Pitoń 11 лет назад
Родитель
Сommit
ec2732163b

+ 1 - 1
misago/templates/misago/admin/warnings/form.html

@@ -49,7 +49,7 @@ class="form-horizontal"
   <fieldset>
     <legend>{% trans "Expiration time" %}</legend>
 
-    {% form_row form.expires_after_minutes label_class field_class %}
+    {% form_row form.length_in_minutes label_class field_class %}
 
   </fieldset>
   <fieldset>

+ 3 - 3
misago/users/forms/admin.py

@@ -367,8 +367,8 @@ class WarningLevelForm(forms.ModelForm):
             'max_length': _("Description can't be longer "
                             "than 1000 characters.")
         })
-    expires_after_minutes = forms.IntegerField(
-        label=_("Expiration time"), min_value=0,
+    length_in_minutes = forms.IntegerField(
+        label=_("Length in minutes"), min_value=0,
         help_text=_("Enter number of minutes since this warning level was "
                     "imposed on member until it's reduced, or 0 to make "
                     "this warning level permanent."))
@@ -384,7 +384,7 @@ class WarningLevelForm(forms.ModelForm):
         fields = [
             'name',
             'description',
-            'expires_after_minutes',
+            'length_in_minutes',
             'restricts_posting_replies',
             'restricts_posting_threads',
         ]

+ 1 - 1
misago/users/migrations/0001_initial.py

@@ -120,7 +120,7 @@ class Migration(migrations.Migration):
                 ('name', models.CharField(max_length=255)),
                 ('description', models.TextField(null=True, blank=True)),
                 ('level', models.PositiveIntegerField(default=1, db_index=True)),
-                ('expires_after_minutes', models.PositiveIntegerField(default=0)),
+                ('length_in_minutes', models.PositiveIntegerField(default=0)),
                 ('restricts_posting_replies', models.PositiveIntegerField(default=0)),
                 ('restricts_posting_threads', models.PositiveIntegerField(default=0)),
             ],

+ 3 - 3
misago/users/models.py

@@ -394,7 +394,7 @@ class WarningLevel(models.Model):
     name = models.CharField(max_length=255)
     description = models.TextField(null=True, blank=True)
     level = models.PositiveIntegerField(default=1, db_index=True)
-    expires_after_minutes = models.PositiveIntegerField(default=0)
+    length_in_minutes = models.PositiveIntegerField(default=0)
     restricts_posting_replies = models.PositiveIntegerField(
         default=RESTRICT_NO)
     restricts_posting_threads = models.PositiveIntegerField(
@@ -413,8 +413,8 @@ class WarningLevel(models.Model):
 
     @property
     def length(self):
-        if self.expires_after_minutes:
-            return time_amount(self.expires_after_minutes * 60)
+        if self.length_in_minutes:
+            return time_amount(self.length_in_minutes * 60)
         else:
             return _("permanent")
 

+ 178 - 0
misago/users/tests/test_warningadmin_views.py

@@ -0,0 +1,178 @@
+from django.core.urlresolvers import reverse
+from misago.admin.testutils import AdminTestCase
+from misago.users.models import WarningLevel
+
+
+class WarningsAdminViewsTests(AdminTestCase):
+    def test_link_registered(self):
+        """admin nav contains warning levels link"""
+        response = self.client.get(
+            reverse('misago:admin:users:accounts:index'))
+
+        response = self.client.get(response['location'])
+        self.assertIn(reverse('misago:admin:users:warnings:index'),
+                      response.content)
+
+    def test_list_view(self):
+        """warning levels list view returns 200"""
+        response = self.client.get(
+            reverse('misago:admin:users:warnings:index'))
+
+        self.assertEqual(response.status_code, 200)
+        self.assertIn('No warning levels', response.content)
+
+    def test_new_view(self):
+        """new warning level view has no showstoppers"""
+        response = self.client.get(
+            reverse('misago:admin:users:warnings:new'))
+        self.assertEqual(response.status_code, 200)
+
+        response = self.client.post(
+            reverse('misago:admin:users:warnings:new'),
+            data={
+                'name': 'Test Level',
+                'description': 'Lorem ipsum dolor met',
+                'length_in_minutes': 60,
+                'restricts_posting_replies': '1',
+                'restricts_posting_threads': '1',
+            })
+        self.assertEqual(response.status_code, 302)
+
+        response = self.client.get(reverse('misago:admin:users:warnings:index'))
+        self.assertEqual(response.status_code, 200)
+        self.assertIn('Test Level', response.content)
+
+    def test_edit_view(self):
+        """edit warning level view has no showstoppers"""
+        self.client.post(
+            reverse('misago:admin:users:warnings:new'),
+            data={
+                'name': 'Test Level',
+                'description': 'Lorem ipsum dolor met',
+                'length_in_minutes': 60,
+                'restricts_posting_replies': '1',
+                'restricts_posting_threads': '1',
+            })
+
+        test_level = WarningLevel.objects.get(level=1)
+
+        response = self.client.get(
+            reverse('misago:admin:users:warnings:edit',
+                    kwargs={'warning_id': test_level.pk}))
+        self.assertEqual(response.status_code, 200)
+        self.assertIn(test_level.name, response.content)
+        self.assertIn(test_level.description, response.content)
+
+        response = self.client.post(
+            reverse('misago:admin:users:warnings:edit',
+                    kwargs={'warning_id': test_level.pk}),
+            data={
+                'name': 'Edited Level',
+                'description': 'Lorem ipsum dolor met',
+                'length_in_minutes': 5,
+                'restricts_posting_replies': '0',
+                'restricts_posting_threads': '0',
+            })
+        self.assertEqual(response.status_code, 302)
+
+        test_level = WarningLevel.objects.get(level=1)
+        response = self.client.get(
+            reverse('misago:admin:users:warnings:index'))
+        self.assertEqual(response.status_code, 200)
+        self.assertIn(test_level.name, response.content)
+        self.assertTrue('Test Level' not in response.content)
+        self.assertIn("5 minutes", response.content)
+
+    def test_move_up_view(self):
+        """move warning level up view has no showstoppers"""
+        self.client.post(
+            reverse('misago:admin:users:warnings:new'),
+            data={
+                'name': 'Level 1',
+                'description': 'Lorem ipsum dolor met',
+                'length_in_minutes': 5,
+                'restricts_posting_replies': '0',
+                'restricts_posting_threads': '0',
+            })
+        self.client.post(
+            reverse('misago:admin:users:warnings:new'),
+            data={
+                'name': 'Level 2',
+                'description': 'Lorem ipsum dolor met',
+                'length_in_minutes': 5,
+                'restricts_posting_replies': '0',
+                'restricts_posting_threads': '0',
+            })
+
+        test_level_1 = WarningLevel.objects.get(level=1)
+        test_level_2 = WarningLevel.objects.get(level=2)
+
+        response = self.client.post(
+            reverse('misago:admin:users:warnings:up',
+                    kwargs={'warning_id': test_level_2.pk}))
+        self.assertEqual(response.status_code, 302)
+
+        changed_level_1 = WarningLevel.objects.get(id=test_level_1.pk)
+        changed_level_2 = WarningLevel.objects.get(id=test_level_2.pk)
+        self.assertEqual(test_level_1.level, changed_level_2.level)
+        self.assertEqual(test_level_2.level, changed_level_1.level)
+
+    def test_move_down_view(self):
+        """move warning level down view has no showstoppers"""
+        self.client.post(
+            reverse('misago:admin:users:warnings:new'),
+            data={
+                'name': 'Level 1',
+                'description': 'Lorem ipsum dolor met',
+                'length_in_minutes': 5,
+                'restricts_posting_replies': '0',
+                'restricts_posting_threads': '0',
+            })
+        self.client.post(
+            reverse('misago:admin:users:warnings:new'),
+            data={
+                'name': 'Level 2',
+                'description': 'Lorem ipsum dolor met',
+                'length_in_minutes': 5,
+                'restricts_posting_replies': '0',
+                'restricts_posting_threads': '0',
+            })
+
+        test_level_1 = WarningLevel.objects.get(level=1)
+        test_level_2 = WarningLevel.objects.get(level=2)
+
+        response = self.client.post(
+            reverse('misago:admin:users:warnings:down',
+                    kwargs={'warning_id': test_level_1.pk}))
+        self.assertEqual(response.status_code, 302)
+
+        changed_level_1 = WarningLevel.objects.get(id=test_level_1.pk)
+        changed_level_2 = WarningLevel.objects.get(id=test_level_2.pk)
+        self.assertEqual(test_level_1.level, changed_level_2.level)
+        self.assertEqual(test_level_2.level, changed_level_1.level)
+
+    def test_delete_view(self):
+        """delete warning level view has no showstoppers"""
+        self.client.post(
+            reverse('misago:admin:users:warnings:new'),
+            data={
+                'name': 'Test Level',
+                'description': 'Lorem ipsum dolor met',
+                'length_in_minutes': 60,
+                'restricts_posting_replies': '1',
+                'restricts_posting_threads': '1',
+            })
+
+        test_level = WarningLevel.objects.get(level=1)
+
+        response = self.client.post(
+            reverse('misago:admin:users:warnings:delete',
+                    kwargs={'warning_id': test_level.pk}))
+        self.assertEqual(response.status_code, 302)
+
+        self.client.get(reverse('misago:admin:users:warnings:index'))
+        response = self.client.get(
+            reverse('misago:admin:users:warnings:index'))
+        self.assertEqual(response.status_code, 200)
+
+        self.assertTrue(test_level.name not in response.content)