Browse Source

Add tests for agreement admin

Rafał Pitoń 6 years ago
parent
commit
1272a6cba6
2 changed files with 304 additions and 1 deletions
  1. 303 0
      misago/legal/tests/test_admin_views.py
  2. 1 1
      misago/legal/tests/test_views.py

+ 303 - 0
misago/legal/tests/test_admin_views.py

@@ -0,0 +1,303 @@
+from django.urls import reverse
+
+from misago.admin.testutils import AdminTestCase
+from misago.legal.models import Agreement
+
+
+class AgreementAdminViewsTests(AdminTestCase):
+    def test_link_registered(self):
+        """admin nav contains agreements link"""
+        response = self.client.get(reverse('misago:admin:users:accounts:index'))
+
+        response = self.client.get(response['location'])
+        self.assertContains(response, reverse('misago:admin:users:agreements:index'))
+
+    def test_list_view(self):
+        """agreements list view returns 200"""
+        response = self.client.get(reverse('misago:admin:users:agreements:index'))
+        self.assertEqual(response.status_code, 302)
+
+        response = self.client.get(response['location'])
+        self.assertEqual(response.status_code, 200)
+
+    def test_mass_delete(self):
+        """adminview deletes multiple agreements"""
+        for i in range(10):
+            response = self.client.post(
+                reverse('misago:admin:users:agreements:new'),
+                data={
+                    'type': Agreement.TYPE_TOS,
+                    'text': 'test agreement!',
+                },
+            )
+            self.assertEqual(response.status_code, 302)
+
+        self.assertEqual(Agreement.objects.count(), 10)
+
+        agreements_pks = []
+        for agreement in Agreement.objects.iterator():
+            agreements_pks.append(agreement.pk)
+
+        response = self.client.post(
+            reverse('misago:admin:users:agreements:index'),
+            data={
+                'action': 'delete',
+                'selected_items': agreements_pks,
+            },
+        )
+        self.assertEqual(response.status_code, 302)
+        self.assertEqual(Agreement.objects.count(), 0)
+
+    def test_new_view(self):
+        """new agreement view has no showstoppers"""
+        response = self.client.get(reverse('misago:admin:users:agreements:new'))
+        self.assertEqual(response.status_code, 200)
+
+        response = self.client.post(
+            reverse('misago:admin:users:agreements:new'),
+            data={
+                'type': Agreement.TYPE_TOS,
+                'title': 'Test Rules',
+                'text': 'Lorem ipsum dolor met sit amet elit',
+                'link': 'https://example.com/rules/',
+            },
+        )
+        self.assertEqual(response.status_code, 302)
+
+        response = self.client.get(reverse('misago:admin:users:agreements:index'))
+        response = self.client.get(response['location'])
+        self.assertEqual(response.status_code, 200)
+        self.assertContains(response, 'Test Rules')
+
+    def test_new_view_change_active(self):
+        """new agreement view creates new active agreement"""
+        response = self.client.get(reverse('misago:admin:users:agreements:new'))
+        self.assertEqual(response.status_code, 200)
+
+        response = self.client.post(
+            reverse('misago:admin:users:agreements:new'),
+            data={
+                'type': Agreement.TYPE_TOS,
+                'title': 'Old Active',
+                'text': 'Lorem ipsum dolor met sit amet elit',
+                'link': 'https://example.com/rules/',
+                'is_active': True,
+            },
+        )
+        self.assertEqual(response.status_code, 302)
+
+        response = self.client.post(
+            reverse('misago:admin:users:agreements:new'),
+            data={
+                'type': Agreement.TYPE_TOS,
+                'title': 'New Active',
+                'text': 'Lorem ipsum dolor met sit amet elit',
+                'link': 'https://example.com/rules/',
+                'is_active': True,
+            },
+        )
+        self.assertEqual(response.status_code, 302)
+
+        test_agreement = Agreement.objects.get(is_active=True)
+        self.assertEqual(test_agreement.title, 'New Active')
+
+    def test_edit_view(self):
+        """edit agreement view has no showstoppers"""
+        self.client.post(
+            reverse('misago:admin:users:agreements:new'),
+            data={
+                'type': Agreement.TYPE_TOS,
+                'title': 'Test Rules',
+                'text': 'Lorem ipsum dolor met sit amet elit',
+                'link': 'https://example.com/rules/',
+            },
+        )
+
+        test_agreement = Agreement.objects.get(type=Agreement.TYPE_TOS)
+        form_link = reverse(
+            'misago:admin:users:agreements:edit',
+            kwargs={
+                'pk': test_agreement.pk,
+            },
+        )
+
+        response = self.client.post(
+            form_link,
+            data={
+                'type': Agreement.TYPE_PRIVACY,
+                'title': 'Test Privacy',
+                'text': 'Lorem ipsum dolor met sit amet elit',
+                'link': 'https://example.com/rules/',
+            },
+        )
+        self.assertEqual(response.status_code, 302)
+
+        response = self.client.get(reverse('misago:admin:users:agreements:index'))
+        response = self.client.get(response['location'])
+        self.assertEqual(response.status_code, 200)
+        self.assertContains(response, 'Test Privacy')
+
+    def test_edit_view_change_active(self):
+        """edit agreement view sets new active"""
+        self.client.post(
+            reverse('misago:admin:users:agreements:new'),
+            data={
+                'type': Agreement.TYPE_TOS,
+                'title': 'Old Active',
+                'text': 'Lorem ipsum dolor met sit amet elit',
+                'link': 'https://example.com/rules/',
+                'is_active': True
+            },
+        )
+
+        self.client.post(
+            reverse('misago:admin:users:agreements:new'),
+            data={
+                'type': Agreement.TYPE_TOS,
+                'title': 'New Active',
+                'text': 'Lorem ipsum dolor met sit amet elit',
+                'link': 'https://example.com/rules/',
+            },
+        )
+
+        test_agreement = Agreement.objects.get(title='New Active')
+        form_link = reverse(
+            'misago:admin:users:agreements:edit',
+            kwargs={
+                'pk': test_agreement.pk,
+            },
+        )
+
+        response = self.client.post(
+            form_link,
+            data={
+                'type': Agreement.TYPE_TOS,
+                'title': 'Updated Active',
+                'text': 'Lorem ipsum dolor met sit amet elit',
+                'link': 'https://example.com/rules/',
+                'is_active': True
+            },
+        )
+        self.assertEqual(response.status_code, 302)
+
+        updated_agreement = Agreement.objects.get(is_active=True)
+        self.assertEqual(updated_agreement.title, 'Updated Active')
+
+    def test_delete_view(self):
+        """delete agreement view has no showstoppers"""
+        self.client.post(
+            reverse('misago:admin:users:agreements:new'),
+            data={
+                'type': Agreement.TYPE_TOS,
+                'title': 'Test Rules',
+                'text': 'Lorem ipsum dolor met sit amet elit',
+                'link': 'https://example.com/rules/',
+            },
+        )
+
+        test_agreement = Agreement.objects.get(type=Agreement.TYPE_TOS)
+
+        response = self.client.post(
+            reverse(
+                'misago:admin:users:agreements:delete',
+                kwargs={
+                    'pk': test_agreement.pk,
+                },
+            )
+        )
+        self.assertEqual(response.status_code, 302)
+
+        response = self.client.get(reverse('misago:admin:users:agreements:index'))
+        self.client.get(response['location'])
+        response = self.client.get(response['location'])
+
+        self.assertEqual(response.status_code, 200)
+        self.assertNotContains(response, test_agreement.title)
+
+    def test_set_as_active_view(self):
+        """set agreement as active view has no showstoppers"""
+        self.client.post(
+            reverse('misago:admin:users:agreements:new'),
+            data={
+                'type': Agreement.TYPE_TOS,
+                'title': 'Test Rules',
+                'text': 'Lorem ipsum dolor met sit amet elit',
+                'link': 'https://example.com/rules/',
+            },
+        )
+
+        test_agreement = Agreement.objects.get(type=Agreement.TYPE_TOS)
+
+        response = self.client.post(
+            reverse(
+                'misago:admin:users:agreements:set-as-active',
+                kwargs={
+                    'pk': test_agreement.pk,
+                },
+            )
+        )
+        self.assertEqual(response.status_code, 302)
+
+        updated_agreement = Agreement.objects.get(is_active=True)
+        self.assertEqual(updated_agreement, test_agreement)
+
+    def test_set_as_active_view_change_active(self):
+        """set agreement as active view changes current active"""
+        self.client.post(
+            reverse('misago:admin:users:agreements:new'),
+            data={
+                'type': Agreement.TYPE_TOS,
+                'title': 'Old Active',
+                'text': 'Lorem ipsum dolor met sit amet elit',
+                'link': 'https://example.com/rules/',
+                'is_active': True,
+            },
+        )
+
+        self.client.post(
+            reverse('misago:admin:users:agreements:new'),
+            data={
+                'type': Agreement.TYPE_TOS,
+                'title': 'New Active',
+                'text': 'Lorem ipsum dolor met sit amet elit',
+                'link': 'https://example.com/rules/',
+            },
+        )
+
+        test_agreement = Agreement.objects.get(title='New Active')
+
+        response = self.client.post(
+            reverse(
+                'misago:admin:users:agreements:set-as-active',
+                kwargs={
+                    'pk': test_agreement.pk,
+                },
+            )
+        )
+        self.assertEqual(response.status_code, 302)
+
+        updated_agreement = Agreement.objects.get(is_active=True)
+        self.assertEqual(updated_agreement, test_agreement)
+
+    def test_is_active_type_separation(self):
+        """is_active flag is per type"""
+        self.client.post(
+            reverse('misago:admin:users:agreements:new'),
+            data={
+                'type': Agreement.TYPE_TOS,
+                'text': 'Lorem ipsum dolor met sit amet elit',
+                'is_active': True,
+            },
+        )
+
+        self.client.post(
+            reverse('misago:admin:users:agreements:new'),
+            data={
+                'type': Agreement.TYPE_PRIVACY,
+                'text': 'Lorem ipsum dolor met sit amet elit',
+                'is_active': True,
+            },
+        )
+
+        active_count = Agreement.objects.filter(is_active=True).count()
+        self.assertEqual(active_count, 2)

+ 1 - 1
misago/legal/tests/test_views.py

@@ -3,7 +3,7 @@ from django.urls import reverse
 
 from misago.conf import settings
 
-from .context_processors import legal_links
+from misago.legal.context_processors import legal_links
 
 
 class MockRequest(object):