Browse Source

Make misago.categories tests pass

rafalp 6 years ago
parent
commit
7a38bd6a64
2 changed files with 44 additions and 56 deletions
  1. 18 10
      misago/categories/tests/test_utils.py
  2. 26 46
      misago/categories/tests/test_views.py

+ 18 - 10
misago/categories/tests/test_utils.py

@@ -1,9 +1,21 @@
-from misago.acl.testutils import override_acl
+from misago.acl.useracl import get_user_acl
 from misago.categories.models import Category
 from misago.categories.models import Category
 from misago.categories.utils import get_categories_tree, get_category_path
 from misago.categories.utils import get_categories_tree, get_category_path
 from misago.core import threadstore
 from misago.core import threadstore
 from misago.users.testutils import AuthenticatedUserTestCase
 from misago.users.testutils import AuthenticatedUserTestCase
 
 
+cache_versions = {"acl": "abcdefgh"}
+
+
+def get_patched_user_acl(user):
+    user_acl = get_user_acl(user, cache_versions)
+    categories_acl = {'categories': {}, 'visible_categories': []}
+    for category in Category.objects.all_categories():
+        categories_acl['visible_categories'].append(category.id)
+        categories_acl['categories'][category.id] = {'can_see': 1, 'can_browse': 1}
+    user_acl.update(categories_acl)
+    return user_acl
+
 
 
 class CategoriesUtilsTests(AuthenticatedUserTestCase):
 class CategoriesUtilsTests(AuthenticatedUserTestCase):
     def setUp(self):
     def setUp(self):
@@ -84,15 +96,11 @@ class CategoriesUtilsTests(AuthenticatedUserTestCase):
             save=True,
             save=True,
         )
         )
 
 
-        categories_acl = {'categories': {}, 'visible_categories': []}
-        for category in Category.objects.all_categories():
-            categories_acl['visible_categories'].append(category.pk)
-            categories_acl['categories'][category.pk] = {'can_see': 1, 'can_browse': 1}
-        override_acl(self.user, categories_acl)
+        self.user_acl = get_patched_user_acl(self.user)
 
 
     def test_root_categories_tree_no_parent(self):
     def test_root_categories_tree_no_parent(self):
         """get_categories_tree returns all children of root nodes"""
         """get_categories_tree returns all children of root nodes"""
-        categories_tree = get_categories_tree(self.user)
+        categories_tree = get_categories_tree(self.user, self.user_acl)
         self.assertEqual(len(categories_tree), 3)
         self.assertEqual(len(categories_tree), 3)
 
 
         self.assertEqual(categories_tree[0], Category.objects.get(slug='first-category'))
         self.assertEqual(categories_tree[0], Category.objects.get(slug='first-category'))
@@ -101,19 +109,19 @@ class CategoriesUtilsTests(AuthenticatedUserTestCase):
 
 
     def test_root_categories_tree_with_parent(self):
     def test_root_categories_tree_with_parent(self):
         """get_categories_tree returns all children of given node"""
         """get_categories_tree returns all children of given node"""
-        categories_tree = get_categories_tree(self.user, self.category_a)
+        categories_tree = get_categories_tree(self.user, self.user_acl, self.category_a)
         self.assertEqual(len(categories_tree), 1)
         self.assertEqual(len(categories_tree), 1)
         self.assertEqual(categories_tree[0], Category.objects.get(slug='category-b'))
         self.assertEqual(categories_tree[0], Category.objects.get(slug='category-b'))
 
 
     def test_root_categories_tree_with_leaf(self):
     def test_root_categories_tree_with_leaf(self):
         """get_categories_tree returns all children of given node"""
         """get_categories_tree returns all children of given node"""
         categories_tree = get_categories_tree(
         categories_tree = get_categories_tree(
-            self.user, Category.objects.get(slug='subcategory-f')
+            self.user, self.user_acl, Category.objects.get(slug='subcategory-f')
         )
         )
         self.assertEqual(len(categories_tree), 0)
         self.assertEqual(len(categories_tree), 0)
 
 
     def test_get_category_path(self):
     def test_get_category_path(self):
         """get_categories_tree returns all children of root nodes"""
         """get_categories_tree returns all children of root nodes"""
-        for node in get_categories_tree(self.user):
+        for node in get_categories_tree(self.user, self.user_acl):
             parent_nodes = len(get_category_path(node))
             parent_nodes = len(get_category_path(node))
             self.assertEqual(parent_nodes, node.level)
             self.assertEqual(parent_nodes, node.level)

+ 26 - 46
misago/categories/tests/test_views.py

@@ -1,53 +1,47 @@
+import json
+
 from django.urls import reverse
 from django.urls import reverse
 
 
-from misago.acl.testutils import override_acl
+from misago.acl.test import patch_user_acl
 from misago.categories.models import Category
 from misago.categories.models import Category
-from misago.categories.utils import get_categories_tree
 from misago.users.testutils import AuthenticatedUserTestCase
 from misago.users.testutils import AuthenticatedUserTestCase
 
 
 
 
 class CategoryViewsTests(AuthenticatedUserTestCase):
 class CategoryViewsTests(AuthenticatedUserTestCase):
+    def setUp(self):
+        super().setUp()
+
+        self.category = Category.objects.get(slug='first-category')
+
     def test_index_renders(self):
     def test_index_renders(self):
         """categories list renders for authenticated"""
         """categories list renders for authenticated"""
         response = self.client.get(reverse('misago:categories'))
         response = self.client.get(reverse('misago:categories'))
-
-        for node in get_categories_tree(self.user):
-            self.assertContains(response, node.name)
-            if node.level > 1:
-                self.assertContains(response, node.get_absolute_url())
+        self.assertContains(response, self.category.name)
+        self.assertContains(response, self.category.get_absolute_url())
 
 
     def test_index_renders_for_guest(self):
     def test_index_renders_for_guest(self):
         """categories list renders for guest"""
         """categories list renders for guest"""
         self.logout_user()
         self.logout_user()
 
 
         response = self.client.get(reverse('misago:categories'))
         response = self.client.get(reverse('misago:categories'))
+        self.assertContains(response, self.category.name)
+        self.assertContains(response, self.category.get_absolute_url())
 
 
-        for node in get_categories_tree(self.user):
-            self.assertContains(response, node.name)
-            if node.level > 1:
-                self.assertContains(response, node.get_absolute_url())
-
+    @patch_user_acl({'visible_categories': []})
     def test_index_no_perms_renders(self):
     def test_index_no_perms_renders(self):
         """categories list renders no visible categories for authenticated"""
         """categories list renders no visible categories for authenticated"""
-        override_acl(self.user, {'visible_categories': []})
         response = self.client.get(reverse('misago:categories'))
         response = self.client.get(reverse('misago:categories'))
+        self.assertNotContains(response, self.category.name)
+        self.assertNotContains(response, self.category.get_absolute_url())
 
 
-        for node in get_categories_tree(self.user):
-            self.assertNotIn(node.name, response.content)
-            if node.level > 1:
-                self.assertNotContains(response, node.get_absolute_url())
-
+    @patch_user_acl({'visible_categories': []})
     def test_index_no_perms_renders_for_guest(self):
     def test_index_no_perms_renders_for_guest(self):
         """categories list renders no visible categories for guest"""
         """categories list renders no visible categories for guest"""
         self.logout_user()
         self.logout_user()
 
 
-        override_acl(self.user, {'visible_categories': []})
         response = self.client.get(reverse('misago:categories'))
         response = self.client.get(reverse('misago:categories'))
-
-        for node in get_categories_tree(self.user):
-            self.assertNotIn(node.name, response.content)
-            if node.level > 1:
-                self.assertNotContains(response, node.get_absolute_url())
+        self.assertNotContains(response, self.category.name)
+        self.assertNotContains(response, self.category.get_absolute_url())
 
 
 
 
 class CategoryAPIViewsTests(AuthenticatedUserTestCase):
 class CategoryAPIViewsTests(AuthenticatedUserTestCase):
@@ -59,41 +53,27 @@ class CategoryAPIViewsTests(AuthenticatedUserTestCase):
     def test_list_renders(self):
     def test_list_renders(self):
         """api returns categories for authenticated"""
         """api returns categories for authenticated"""
         response = self.client.get(reverse('misago:api:category-list'))
         response = self.client.get(reverse('misago:api:category-list'))
-
-        for node in get_categories_tree(self.user):
-            self.assertContains(response, node.name)
-            if node.level > 1:
-                self.assertNotContains(response, node.get_absolute_url())
+        self.assertContains(response, self.category.name)
+        self.assertContains(response, self.category.get_absolute_url())
 
 
     def test_list_renders_for_guest(self):
     def test_list_renders_for_guest(self):
         """api returns categories for guest"""
         """api returns categories for guest"""
         self.logout_user()
         self.logout_user()
 
 
         response = self.client.get(reverse('misago:api:category-list'))
         response = self.client.get(reverse('misago:api:category-list'))
+        self.assertContains(response, self.category.name)
+        self.assertContains(response, self.category.get_absolute_url())
 
 
-        for node in get_categories_tree(self.user):
-            self.assertContains(response, node.name)
-            if node.level > 1:
-                self.assertNotContains(response, node.get_absolute_url())
-
+    @patch_user_acl({'visible_categories': []})
     def test_list_no_perms_renders(self):
     def test_list_no_perms_renders(self):
         """api returns no categories for authenticated"""
         """api returns no categories for authenticated"""
-        override_acl(self.user, {'visible_categories': []})
         response = self.client.get(reverse('misago:api:category-list'))
         response = self.client.get(reverse('misago:api:category-list'))
+        assert json.loads(response.content) == []
 
 
-        for node in get_categories_tree(self.user):
-            self.assertNotIn(node.name, response.content)
-            if node.level > 1:
-                self.assertNotContains(response, node.get_absolute_url())
-
+    @patch_user_acl({'visible_categories': []})
     def test_list_no_perms_renders_for_guest(self):
     def test_list_no_perms_renders_for_guest(self):
         """api returns no categories for guest"""
         """api returns no categories for guest"""
         self.logout_user()
         self.logout_user()
 
 
-        override_acl(self.user, {'visible_categories': []})
         response = self.client.get(reverse('misago:api:category-list'))
         response = self.client.get(reverse('misago:api:category-list'))
-
-        for node in get_categories_tree(self.user):
-            self.assertNotContains(response, node.name)
-            if node.level > 1:
-                self.assertNotContains(response, node.get_absolute_url())
+        assert json.loads(response.content) == []