test_utils.py 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. from misago.acl.useracl import get_user_acl
  2. from misago.categories.models import Category
  3. from misago.categories.utils import get_categories_tree, get_category_path
  4. from misago.conftest import get_cache_versions
  5. from misago.users.test import AuthenticatedUserTestCase
  6. cache_versions = get_cache_versions()
  7. def get_patched_user_acl(user):
  8. user_acl = get_user_acl(user, cache_versions)
  9. categories_acl = {"categories": {}, "visible_categories": []}
  10. for category in Category.objects.all_categories():
  11. categories_acl["visible_categories"].append(category.id)
  12. categories_acl["categories"][category.id] = {"can_see": 1, "can_browse": 1}
  13. user_acl.update(categories_acl)
  14. return user_acl
  15. class CategoriesUtilsTests(AuthenticatedUserTestCase):
  16. def setUp(self):
  17. """
  18. Create categories tree for test cases:
  19. First category (created by migration)
  20. Category A
  21. + Category B
  22. + Subcategory C
  23. + Subcategory D
  24. Category E
  25. + Subcategory F
  26. """
  27. super().setUp()
  28. self.root = Category.objects.root_category()
  29. self.first_category = Category.objects.get(slug="first-category")
  30. Category(name="Category A", slug="category-a").insert_at(
  31. self.root, position="last-child", save=True
  32. )
  33. Category(name="Category E", slug="category-e").insert_at(
  34. self.root, position="last-child", save=True
  35. )
  36. self.category_a = Category.objects.get(slug="category-a")
  37. Category(name="Category B", slug="category-b").insert_at(
  38. self.category_a, position="last-child", save=True
  39. )
  40. self.category_b = Category.objects.get(slug="category-b")
  41. Category(name="Subcategory C", slug="subcategory-c").insert_at(
  42. self.category_b, position="last-child", save=True
  43. )
  44. Category(name="Subcategory D", slug="subcategory-d").insert_at(
  45. self.category_b, position="last-child", save=True
  46. )
  47. self.category_e = Category.objects.get(slug="category-e")
  48. Category(name="Subcategory F", slug="subcategory-f").insert_at(
  49. self.category_e, position="last-child", save=True
  50. )
  51. self.user_acl = get_patched_user_acl(self.user)
  52. def test_root_categories_tree_no_parent(self):
  53. """get_categories_tree returns all children of root nodes"""
  54. categories_tree = get_categories_tree(self.user, self.user_acl)
  55. self.assertEqual(len(categories_tree), 3)
  56. self.assertEqual(
  57. categories_tree[0], Category.objects.get(slug="first-category")
  58. )
  59. self.assertEqual(categories_tree[1], Category.objects.get(slug="category-a"))
  60. self.assertEqual(categories_tree[2], Category.objects.get(slug="category-e"))
  61. def test_root_categories_tree_with_parent(self):
  62. """get_categories_tree returns all children of given node"""
  63. categories_tree = get_categories_tree(self.user, self.user_acl, self.category_a)
  64. self.assertEqual(len(categories_tree), 1)
  65. self.assertEqual(categories_tree[0], Category.objects.get(slug="category-b"))
  66. def test_root_categories_tree_with_leaf(self):
  67. """get_categories_tree returns all children of given node"""
  68. categories_tree = get_categories_tree(
  69. self.user, self.user_acl, Category.objects.get(slug="subcategory-f")
  70. )
  71. self.assertEqual(len(categories_tree), 0)
  72. def test_get_category_path(self):
  73. """get_categories_tree returns all children of root nodes"""
  74. for node in get_categories_tree(self.user, self.user_acl):
  75. parent_nodes = len(get_category_path(node))
  76. self.assertEqual(parent_nodes, node.level)