test_utils.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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.core import threadstore
  6. from misago.users.testutils import AuthenticatedUserTestCase
  7. cache_versions = get_cache_versions()
  8. def get_patched_user_acl(user):
  9. user_acl = get_user_acl(user, cache_versions)
  10. categories_acl = {'categories': {}, 'visible_categories': []}
  11. for category in Category.objects.all_categories():
  12. categories_acl['visible_categories'].append(category.id)
  13. categories_acl['categories'][category.id] = {'can_see': 1, 'can_browse': 1}
  14. user_acl.update(categories_acl)
  15. return user_acl
  16. class CategoriesUtilsTests(AuthenticatedUserTestCase):
  17. def setUp(self):
  18. """
  19. Create categories tree for test cases:
  20. First category (created by migration)
  21. Category A
  22. + Category B
  23. + Subcategory C
  24. + Subcategory D
  25. Category E
  26. + Subcategory F
  27. """
  28. super().setUp()
  29. threadstore.clear()
  30. self.root = Category.objects.root_category()
  31. self.first_category = Category.objects.get(slug='first-category')
  32. Category(
  33. name='Category A',
  34. slug='category-a',
  35. ).insert_at(
  36. self.root,
  37. position='last-child',
  38. save=True,
  39. )
  40. Category(
  41. name='Category E',
  42. slug='category-e',
  43. ).insert_at(
  44. self.root,
  45. position='last-child',
  46. save=True,
  47. )
  48. self.category_a = Category.objects.get(slug='category-a')
  49. Category(
  50. name='Category B',
  51. slug='category-b',
  52. ).insert_at(
  53. self.category_a,
  54. position='last-child',
  55. save=True,
  56. )
  57. self.category_b = Category.objects.get(slug='category-b')
  58. Category(
  59. name='Subcategory C',
  60. slug='subcategory-c',
  61. ).insert_at(
  62. self.category_b,
  63. position='last-child',
  64. save=True,
  65. )
  66. Category(
  67. name='Subcategory D',
  68. slug='subcategory-d',
  69. ).insert_at(
  70. self.category_b,
  71. position='last-child',
  72. save=True,
  73. )
  74. self.category_e = Category.objects.get(slug='category-e')
  75. Category(
  76. name='Subcategory F',
  77. slug='subcategory-f',
  78. ).insert_at(
  79. self.category_e,
  80. position='last-child',
  81. save=True,
  82. )
  83. self.user_acl = get_patched_user_acl(self.user)
  84. def test_root_categories_tree_no_parent(self):
  85. """get_categories_tree returns all children of root nodes"""
  86. categories_tree = get_categories_tree(self.user, self.user_acl)
  87. self.assertEqual(len(categories_tree), 3)
  88. self.assertEqual(categories_tree[0], Category.objects.get(slug='first-category'))
  89. self.assertEqual(categories_tree[1], Category.objects.get(slug='category-a'))
  90. self.assertEqual(categories_tree[2], Category.objects.get(slug='category-e'))
  91. def test_root_categories_tree_with_parent(self):
  92. """get_categories_tree returns all children of given node"""
  93. categories_tree = get_categories_tree(self.user, self.user_acl, self.category_a)
  94. self.assertEqual(len(categories_tree), 1)
  95. self.assertEqual(categories_tree[0], Category.objects.get(slug='category-b'))
  96. def test_root_categories_tree_with_leaf(self):
  97. """get_categories_tree returns all children of given node"""
  98. categories_tree = get_categories_tree(
  99. self.user, self.user_acl, Category.objects.get(slug='subcategory-f')
  100. )
  101. self.assertEqual(len(categories_tree), 0)
  102. def test_get_category_path(self):
  103. """get_categories_tree returns all children of root nodes"""
  104. for node in get_categories_tree(self.user, self.user_acl):
  105. parent_nodes = len(get_category_path(node))
  106. self.assertEqual(parent_nodes, node.level)