test_utils.py 3.8 KB

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