test_utils.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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.testutils 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(
  31. name='Category A',
  32. slug='category-a',
  33. ).insert_at(
  34. self.root,
  35. position='last-child',
  36. save=True,
  37. )
  38. Category(
  39. name='Category E',
  40. slug='category-e',
  41. ).insert_at(
  42. self.root,
  43. position='last-child',
  44. save=True,
  45. )
  46. self.category_a = Category.objects.get(slug='category-a')
  47. Category(
  48. name='Category B',
  49. slug='category-b',
  50. ).insert_at(
  51. self.category_a,
  52. position='last-child',
  53. save=True,
  54. )
  55. self.category_b = Category.objects.get(slug='category-b')
  56. Category(
  57. name='Subcategory C',
  58. slug='subcategory-c',
  59. ).insert_at(
  60. self.category_b,
  61. position='last-child',
  62. save=True,
  63. )
  64. Category(
  65. name='Subcategory D',
  66. slug='subcategory-d',
  67. ).insert_at(
  68. self.category_b,
  69. position='last-child',
  70. save=True,
  71. )
  72. self.category_e = Category.objects.get(slug='category-e')
  73. Category(
  74. name='Subcategory F',
  75. slug='subcategory-f',
  76. ).insert_at(
  77. self.category_e,
  78. position='last-child',
  79. save=True,
  80. )
  81. self.user_acl = get_patched_user_acl(self.user)
  82. def test_root_categories_tree_no_parent(self):
  83. """get_categories_tree returns all children of root nodes"""
  84. categories_tree = get_categories_tree(self.user, self.user_acl)
  85. self.assertEqual(len(categories_tree), 3)
  86. self.assertEqual(categories_tree[0], Category.objects.get(slug='first-category'))
  87. self.assertEqual(categories_tree[1], Category.objects.get(slug='category-a'))
  88. self.assertEqual(categories_tree[2], Category.objects.get(slug='category-e'))
  89. def test_root_categories_tree_with_parent(self):
  90. """get_categories_tree returns all children of given node"""
  91. categories_tree = get_categories_tree(self.user, self.user_acl, self.category_a)
  92. self.assertEqual(len(categories_tree), 1)
  93. self.assertEqual(categories_tree[0], Category.objects.get(slug='category-b'))
  94. def test_root_categories_tree_with_leaf(self):
  95. """get_categories_tree returns all children of given node"""
  96. categories_tree = get_categories_tree(
  97. self.user, self.user_acl, Category.objects.get(slug='subcategory-f')
  98. )
  99. self.assertEqual(len(categories_tree), 0)
  100. def test_get_category_path(self):
  101. """get_categories_tree returns all children of root nodes"""
  102. for node in get_categories_tree(self.user, self.user_acl):
  103. parent_nodes = len(get_category_path(node))
  104. self.assertEqual(parent_nodes, node.level)