test_utils.py 3.7 KB

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