test_utils.py 4.6 KB

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