Browse Source

Move most misago.acl tests to pytest, change fake_post_data to mock_role_form_data

rafalp 6 years ago
parent
commit
a4752ce524

+ 18 - 0
misago/acl/test.py

@@ -2,6 +2,7 @@ from contextlib import ContextDecorator, ExitStack, contextmanager
 from functools import wraps
 from functools import wraps
 from unittest.mock import patch
 from unittest.mock import patch
 
 
+from .forms import get_permissions_forms
 from .useracl import get_user_acl
 from .useracl import get_user_acl
 
 
 __all__ = ["patch_user_acl"]
 __all__ = ["patch_user_acl"]
@@ -54,3 +55,20 @@ class patch_user_acl(ContextDecorator, ExitStack):
             "misago.acl.useracl.get_user_acl",
             "misago.acl.useracl.get_user_acl",
             side_effect=self.patched_get_user_acl,
             side_effect=self.patched_get_user_acl,
         )
         )
+
+
+def mock_form_data(model, data):
+    """
+    In order for form to don't fail submission, all permission fields need
+    to receive values. This function populates data dict with default values
+    for permissions, making form validation pass
+    """
+    for form in get_permissions_forms(model):
+        for field in form:
+            if field.value() is True:
+                data[field.html_name] = 1
+            elif field.value() is False:
+                data[field.html_name] = 0
+            else:
+                data[field.html_name] = field.value()
+    return data

+ 68 - 74
misago/acl/tests/test_acl_algebra.py

@@ -1,88 +1,82 @@
-from django.test import TestCase
-
 from misago.acl import algebra
 from misago.acl import algebra
 
 
 
 
-class ComparisionsTests(TestCase):
-    def test_greater(self):
-        """greater permission wins test"""
-        self.assertEqual(algebra.greater(1, 3), 3)
-        self.assertEqual(algebra.greater(4, 2), 4)
-        self.assertEqual(algebra.greater(2, 2), 2)
-        self.assertEqual(algebra.greater(True, False), True)
+def test_greatest_value_is_returned():
+    assert algebra.greater(1, 3) == 3
+    assert algebra.greater(4, 2) == 4
+    assert algebra.greater(2, 2) == 2
+    assert algebra.greater(True, False) == True
+
+
+def test_greatest_or_zero_value_is_returned():
+    assert algebra.greater_or_zero(1, 3) == 3
+    assert algebra.greater_or_zero(4, 2) == 4
+    assert algebra.greater_or_zero(2, 2) == 2
+    assert algebra.greater_or_zero(True, False) == False
+    assert algebra.greater_or_zero(2, 0) == 0
+    assert algebra.greater_or_zero(0, 0) == 0
+    assert algebra.greater_or_zero(0, 120) == 0
 
 
-    def test_greater_or_zero(self):
-        """greater or zero permission wins test"""
-        self.assertEqual(algebra.greater_or_zero(1, 3), 3)
-        self.assertEqual(algebra.greater_or_zero(4, 2), 4)
-        self.assertEqual(algebra.greater_or_zero(2, 2), 2)
-        self.assertEqual(algebra.greater_or_zero(True, False), False)
-        self.assertEqual(algebra.greater_or_zero(2, 0), 0)
-        self.assertEqual(algebra.greater_or_zero(0, 0), 0)
-        self.assertEqual(algebra.greater_or_zero(0, 120), 0)
 
 
-    def test_lower(self):
-        """lower permission wins test"""
-        self.assertEqual(algebra.lower(1, 3), 1)
-        self.assertEqual(algebra.lower(4, 2), 2)
-        self.assertEqual(algebra.lower(2, 2), 2)
-        self.assertEqual(algebra.lower(True, False), False)
+def test_lower_value_is_returned():
+    assert algebra.lower(1, 3) == 1
+    assert algebra.lower(4, 2) == 2
+    assert algebra.lower(2, 2) == 2
+    assert algebra.lower(True, False) == False
 
 
-    def test_lower_non_zero(self):
-        """lower non-zero wins test"""
-        self.assertEqual(algebra.lower_non_zero(1, 3), 1)
-        self.assertEqual(algebra.lower_non_zero(0, 2), 2)
-        self.assertEqual(algebra.lower_non_zero(1, 2), 1)
-        self.assertEqual(algebra.lower_non_zero(0, 0), 0)
 
 
+def test_lowest_non_zero_value_is_returned():
+    assert algebra.lower_non_zero(1, 3) == 1
+    assert algebra.lower_non_zero(0, 2) == 2
+    assert algebra.lower_non_zero(1, 2) == 1
+    assert algebra.lower_non_zero(0, 0) == 0
 
 
-class SumACLTests(TestCase):
-    def test_sum_acls(self):
-        """acls are summed"""
-        test_acls = [
-            {
-                'can_see': 0,
-                'can_hear': 0,
-                'max_speed': 10,
-                'min_age': 16,
-                'speed_limit': 50,
-            },
-            {
-                'can_see': 1,
-                'can_hear': 0,
-                'max_speed': 40,
-                'min_age': 20,
-                'speed_limit': 0,
-            },
-            {
-                'can_see': 0,
-                'can_hear': 1,
-                'max_speed': 80,
-                'min_age': 18,
-                'speed_limit': 40,
-            },
-        ]
 
 
-        defaults = {
+def test_acls_are_be_added_together():
+    test_acls = [
+        {
             'can_see': 0,
             'can_see': 0,
             'can_hear': 0,
             'can_hear': 0,
-            'max_speed': 30,
+            'max_speed': 10,
+            'min_age': 16,
+            'speed_limit': 50,
+        },
+        {
+            'can_see': 1,
+            'can_hear': 0,
+            'max_speed': 40,
+            'min_age': 20,
+            'speed_limit': 0,
+        },
+        {
+            'can_see': 0,
+            'can_hear': 1,
+            'max_speed': 80,
             'min_age': 18,
             'min_age': 18,
-            'speed_limit': 60,
-        }
+            'speed_limit': 40,
+        },
+    ]
+
+    defaults = {
+        'can_see': 0,
+        'can_hear': 0,
+        'max_speed': 30,
+        'min_age': 18,
+        'speed_limit': 60,
+    }
 
 
-        acl = algebra.sum_acls(
-            defaults,
-            acls=test_acls,
-            can_see=algebra.greater,
-            can_hear=algebra.greater,
-            max_speed=algebra.greater,
-            min_age=algebra.lower,
-            speed_limit=algebra.greater_or_zero,
-        )
+    acl = algebra.sum_acls(
+        defaults,
+        acls=test_acls,
+        can_see=algebra.greater,
+        can_hear=algebra.greater,
+        max_speed=algebra.greater,
+        min_age=algebra.lower,
+        speed_limit=algebra.greater_or_zero,
+    )
 
 
-        self.assertEqual(acl['can_see'], 1)
-        self.assertEqual(acl['can_hear'], 1)
-        self.assertEqual(acl['max_speed'], 80)
-        self.assertEqual(acl['min_age'], 16)
-        self.assertEqual(acl['speed_limit'], 0)
+    assert acl['can_see'] == 1
+    assert acl['can_hear'] == 1
+    assert acl['max_speed'] == 80
+    assert acl['min_age'] == 16
+    assert acl['speed_limit'] == 0

+ 7 - 0
misago/acl/tests/test_mock_role_admin_form_data.py

@@ -0,0 +1,7 @@
+from misago.acl.models import Role
+from misago.acl.test import mock_form_data
+
+
+def test_factory_for_change_role_permissions_form_data():
+    test_data = mock_form_data(Role(), {'can_fly': 1})
+    assert "can_fly" in test_data

+ 11 - 11
misago/acl/tests/test_roleadmin_views.py

@@ -2,13 +2,13 @@ from django.urls import reverse
 
 
 from misago.acl import ACL_CACHE
 from misago.acl import ACL_CACHE
 from misago.acl.models import Role
 from misago.acl.models import Role
-from misago.acl.testutils import fake_post_data
+from misago.acl.test import mock_form_data
 from misago.cache.test import assert_invalidates_cache
 from misago.cache.test import assert_invalidates_cache
 from misago.admin.testutils import AdminTestCase
 from misago.admin.testutils import AdminTestCase
 
 
 
 
-def fake_data(data_dict):
-    return fake_post_data(Role(), data_dict)
+def create_data(data_dict):
+    return mock_form_data(Role(), data_dict)
 
 
 
 
 class RoleAdminViewsTests(AdminTestCase):
 class RoleAdminViewsTests(AdminTestCase):
@@ -28,7 +28,7 @@ class RoleAdminViewsTests(AdminTestCase):
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.status_code, 200)
 
 
         response = self.client.post(
         response = self.client.post(
-            reverse('misago:admin:permissions:users:new'), data=fake_data({
+            reverse('misago:admin:permissions:users:new'), data=create_data({
                 'name': 'Test Role',
                 'name': 'Test Role',
             })
             })
         )
         )
@@ -42,7 +42,7 @@ class RoleAdminViewsTests(AdminTestCase):
     def test_edit_view(self):
     def test_edit_view(self):
         """edit role view has no showstoppers"""
         """edit role view has no showstoppers"""
         self.client.post(
         self.client.post(
-            reverse('misago:admin:permissions:users:new'), data=fake_data({
+            reverse('misago:admin:permissions:users:new'), data=create_data({
                 'name': 'Test Role',
                 'name': 'Test Role',
             })
             })
         )
         )
@@ -61,7 +61,7 @@ class RoleAdminViewsTests(AdminTestCase):
             reverse('misago:admin:permissions:users:edit', kwargs={
             reverse('misago:admin:permissions:users:edit', kwargs={
                 'pk': test_role.pk,
                 'pk': test_role.pk,
             }),
             }),
-            data=fake_data({
+            data=create_data({
                 'name': 'Top Lel',
                 'name': 'Top Lel',
             })
             })
         )
         )
@@ -74,7 +74,7 @@ class RoleAdminViewsTests(AdminTestCase):
 
 
     def test_editing_role_invalidates_acl_cache(self):
     def test_editing_role_invalidates_acl_cache(self):
         self.client.post(
         self.client.post(
-            reverse('misago:admin:permissions:users:new'), data=fake_data({
+            reverse('misago:admin:permissions:users:new'), data=create_data({
                 'name': 'Test Role',
                 'name': 'Test Role',
             })
             })
         )
         )
@@ -86,7 +86,7 @@ class RoleAdminViewsTests(AdminTestCase):
                 reverse('misago:admin:permissions:users:edit', kwargs={
                 reverse('misago:admin:permissions:users:edit', kwargs={
                     'pk': test_role.pk,
                     'pk': test_role.pk,
                 }),
                 }),
-                data=fake_data({
+                data=create_data({
                     'name': 'Top Lel',
                     'name': 'Top Lel',
                 })
                 })
             )
             )
@@ -94,7 +94,7 @@ class RoleAdminViewsTests(AdminTestCase):
     def test_users_view(self):
     def test_users_view(self):
         """users with this role view has no showstoppers"""
         """users with this role view has no showstoppers"""
         response = self.client.post(
         response = self.client.post(
-            reverse('misago:admin:permissions:users:new'), data=fake_data({
+            reverse('misago:admin:permissions:users:new'), data=create_data({
                 'name': 'Test Role',
                 'name': 'Test Role',
             })
             })
         )
         )
@@ -110,7 +110,7 @@ class RoleAdminViewsTests(AdminTestCase):
     def test_delete_view(self):
     def test_delete_view(self):
         """delete role view has no showstoppers"""
         """delete role view has no showstoppers"""
         self.client.post(
         self.client.post(
-            reverse('misago:admin:permissions:users:new'), data=fake_data({
+            reverse('misago:admin:permissions:users:new'), data=create_data({
                 'name': 'Test Role',
                 'name': 'Test Role',
             })
             })
         )
         )
@@ -130,7 +130,7 @@ class RoleAdminViewsTests(AdminTestCase):
 
 
     def test_deleting_role_invalidates_acl_cache(self):
     def test_deleting_role_invalidates_acl_cache(self):
         self.client.post(
         self.client.post(
-            reverse('misago:admin:permissions:users:new'), data=fake_data({
+            reverse('misago:admin:permissions:users:new'), data=create_data({
                 'name': 'Test Role',
                 'name': 'Test Role',
             })
             })
         )
         )

+ 0 - 8
misago/acl/tests/test_testutils.py

@@ -1,8 +0,0 @@
-from misago.acl.models import Role
-from misago.acl.testutils import fake_post_data
-
-
-def test_fake_post_data_for_role():
-    """fake data was created for Role"""
-    test_data = fake_post_data(Role(), {'can_fly': 1})
-    assert "can_fly" in test_data

+ 0 - 18
misago/acl/testutils.py

@@ -1,18 +0,0 @@
-from .forms import get_permissions_forms
-
-
-def fake_post_data(target, data_dict):
-    """
-    In order for form to don't fail submission, all permission fields need
-    to receive values. This function populates data dict with default values
-    for permissions, making form validation pass
-    """
-    for form in get_permissions_forms(target):
-        for field in form:
-            if field.value() is True:
-                data_dict[field.html_name] = 1
-            elif field.value() is False:
-                data_dict[field.html_name] = 0
-            else:
-                data_dict[field.html_name] = field.value()
-    return data_dict

+ 17 - 17
misago/categories/tests/test_permissions_admin_views.py

@@ -2,14 +2,14 @@ from django.urls import reverse
 
 
 from misago.acl import ACL_CACHE
 from misago.acl import ACL_CACHE
 from misago.acl.models import Role
 from misago.acl.models import Role
-from misago.acl.testutils import fake_post_data
+from misago.acl.test import mock_form_data
 from misago.admin.testutils import AdminTestCase
 from misago.admin.testutils import AdminTestCase
 from misago.cache.test import assert_invalidates_cache
 from misago.cache.test import assert_invalidates_cache
 from misago.categories.models import Category, CategoryRole
 from misago.categories.models import Category, CategoryRole
 
 
 
 
-def fake_data(data_dict):
-    return fake_post_data(CategoryRole(), data_dict)
+def create_data(data_dict):
+    return mock_form_data(CategoryRole(), data_dict)
 
 
 
 
 class CategoryRoleAdminViewsTests(AdminTestCase):
 class CategoryRoleAdminViewsTests(AdminTestCase):
@@ -32,7 +32,7 @@ class CategoryRoleAdminViewsTests(AdminTestCase):
 
 
         response = self.client.post(
         response = self.client.post(
             reverse('misago:admin:permissions:categories:new'),
             reverse('misago:admin:permissions:categories:new'),
-            data=fake_data({
+            data=create_data({
                 'name': 'Test CategoryRole',
                 'name': 'Test CategoryRole',
             }),
             }),
         )
         )
@@ -46,7 +46,7 @@ class CategoryRoleAdminViewsTests(AdminTestCase):
         """edit role view has no showstoppers"""
         """edit role view has no showstoppers"""
         self.client.post(
         self.client.post(
             reverse('misago:admin:permissions:categories:new'),
             reverse('misago:admin:permissions:categories:new'),
-            data=fake_data({
+            data=create_data({
                 'name': 'Test CategoryRole',
                 'name': 'Test CategoryRole',
             }),
             }),
         )
         )
@@ -64,7 +64,7 @@ class CategoryRoleAdminViewsTests(AdminTestCase):
             reverse('misago:admin:permissions:categories:edit', kwargs={
             reverse('misago:admin:permissions:categories:edit', kwargs={
                 'pk': test_role.pk,
                 'pk': test_role.pk,
             }),
             }),
-            data=fake_data({
+            data=create_data({
                 'name': 'Top Lel',
                 'name': 'Top Lel',
             }),
             }),
         )
         )
@@ -77,7 +77,7 @@ class CategoryRoleAdminViewsTests(AdminTestCase):
     def test_editing_role_invalidates_acl_cache(self):
     def test_editing_role_invalidates_acl_cache(self):
         self.client.post(
         self.client.post(
             reverse('misago:admin:permissions:categories:new'),
             reverse('misago:admin:permissions:categories:new'),
-            data=fake_data({
+            data=create_data({
                 'name': 'Test CategoryRole',
                 'name': 'Test CategoryRole',
             }),
             }),
         )
         )
@@ -89,7 +89,7 @@ class CategoryRoleAdminViewsTests(AdminTestCase):
                 reverse('misago:admin:permissions:categories:edit', kwargs={
                 reverse('misago:admin:permissions:categories:edit', kwargs={
                     'pk': test_role.pk,
                     'pk': test_role.pk,
                 }),
                 }),
-                data=fake_data({
+                data=create_data({
                     'name': 'Top Lel',
                     'name': 'Top Lel',
                 }),
                 }),
             )
             )
@@ -98,7 +98,7 @@ class CategoryRoleAdminViewsTests(AdminTestCase):
         """delete role view has no showstoppers"""
         """delete role view has no showstoppers"""
         self.client.post(
         self.client.post(
             reverse('misago:admin:permissions:categories:new'),
             reverse('misago:admin:permissions:categories:new'),
-            data=fake_data({
+            data=create_data({
                 'name': 'Test CategoryRole',
                 'name': 'Test CategoryRole',
             }),
             }),
         )
         )
@@ -118,7 +118,7 @@ class CategoryRoleAdminViewsTests(AdminTestCase):
     def test_deleting_role_invalidates_acl_cache(self):
     def test_deleting_role_invalidates_acl_cache(self):
         self.client.post(
         self.client.post(
             reverse('misago:admin:permissions:categories:new'),
             reverse('misago:admin:permissions:categories:new'),
-            data=fake_data({
+            data=create_data({
                 'name': 'Test CategoryRole',
                 'name': 'Test CategoryRole',
             }),
             }),
         )
         )
@@ -163,11 +163,11 @@ class CategoryRoleAdminViewsTests(AdminTestCase):
         """
         """
         self.client.post(
         self.client.post(
             reverse('misago:admin:permissions:users:new'),
             reverse('misago:admin:permissions:users:new'),
-            data=fake_post_data(Role(), {'name': 'Test Role A'})
+            data=mock_form_data(Role(), {'name': 'Test Role A'})
         )
         )
         self.client.post(
         self.client.post(
             reverse('misago:admin:permissions:users:new'),
             reverse('misago:admin:permissions:users:new'),
-            data=fake_post_data(Role(), {'name': 'Test Role B'})
+            data=mock_form_data(Role(), {'name': 'Test Role B'})
         )
         )
 
 
         test_role_a = Role.objects.get(name='Test Role A')
         test_role_a = Role.objects.get(name='Test Role A')
@@ -175,13 +175,13 @@ class CategoryRoleAdminViewsTests(AdminTestCase):
 
 
         self.client.post(
         self.client.post(
             reverse('misago:admin:permissions:categories:new'),
             reverse('misago:admin:permissions:categories:new'),
-            data=fake_data({
+            data=create_data({
                 'name': 'Test Comments',
                 'name': 'Test Comments',
             }),
             }),
         )
         )
         self.client.post(
         self.client.post(
             reverse('misago:admin:permissions:categories:new'),
             reverse('misago:admin:permissions:categories:new'),
-            data=fake_data({
+            data=create_data({
                 'name': 'Test Full',
                 'name': 'Test Full',
             }),
             }),
         )
         )
@@ -244,7 +244,7 @@ class CategoryRoleAdminViewsTests(AdminTestCase):
         """change role categories perms view works"""
         """change role categories perms view works"""
         self.client.post(
         self.client.post(
             reverse('misago:admin:permissions:users:new'),
             reverse('misago:admin:permissions:users:new'),
-            data=fake_post_data(Role(), {'name': 'Test CategoryRole'})
+            data=mock_form_data(Role(), {'name': 'Test CategoryRole'})
         )
         )
 
 
         test_role = Role.objects.get(name='Test CategoryRole')
         test_role = Role.objects.get(name='Test CategoryRole')
@@ -329,7 +329,7 @@ class CategoryRoleAdminViewsTests(AdminTestCase):
         # Set test roles
         # Set test roles
         self.client.post(
         self.client.post(
             reverse('misago:admin:permissions:categories:new'),
             reverse('misago:admin:permissions:categories:new'),
-            data=fake_data({
+            data=create_data({
                 'name': 'Test Comments',
                 'name': 'Test Comments',
             }),
             }),
         )
         )
@@ -337,7 +337,7 @@ class CategoryRoleAdminViewsTests(AdminTestCase):
 
 
         self.client.post(
         self.client.post(
             reverse('misago:admin:permissions:categories:new'),
             reverse('misago:admin:permissions:categories:new'),
-            data=fake_data({
+            data=create_data({
                 'name': 'Test Full',
                 'name': 'Test Full',
             }),
             }),
         )
         )