test_utils.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. from unittest.mock import Mock
  2. import pytest
  3. from ..models import Category
  4. from ..utils import get_categories_tree, get_category_path
  5. @pytest.fixture
  6. def categories_tree(root_category, default_category):
  7. Category(name="Category A", slug="category-a").insert_at(
  8. root_category, position="last-child", save=True
  9. )
  10. Category(name="Category E", slug="category-e").insert_at(
  11. root_category, position="last-child", save=True
  12. )
  13. category_a = Category.objects.get(slug="category-a")
  14. Category(name="Category B", slug="category-b").insert_at(
  15. category_a, position="last-child", save=True
  16. )
  17. category_b = Category.objects.get(slug="category-b")
  18. category_c = Category(name="Subcategory C", slug="subcategory-c").insert_at(
  19. category_b, position="last-child", save=True
  20. )
  21. category_d = Category(name="Subcategory D", slug="subcategory-d").insert_at(
  22. category_b, position="last-child", save=True
  23. )
  24. category_e = Category.objects.get(slug="category-e")
  25. Category(name="Subcategory F", slug="subcategory-f").insert_at(
  26. category_e, position="last-child", save=True
  27. )
  28. return {
  29. "root": root_category,
  30. "first": default_category,
  31. "a": Category.objects.get(slug="category-a"),
  32. "b": Category.objects.get(slug="category-b"),
  33. "c": Category.objects.get(slug="subcategory-c"),
  34. "d": Category.objects.get(slug="subcategory-d"),
  35. "e": Category.objects.get(slug="category-e"),
  36. "f": Category.objects.get(slug="subcategory-f"),
  37. }
  38. @pytest.fixture
  39. def full_access_user_acl(categories_tree, user_acl):
  40. user_acl = user_acl.copy()
  41. categories_acl = {"categories": {}, "visible_categories": []}
  42. for category in Category.objects.all_categories():
  43. categories_acl["visible_categories"].append(category.id)
  44. categories_acl["categories"][category.id] = {"can_see": 1, "can_browse": 1}
  45. user_acl.update(categories_acl)
  46. return user_acl
  47. @pytest.fixture
  48. def request_mock(user, full_access_user_acl, dynamic_settings):
  49. return Mock(settings=dynamic_settings, user=user, user_acl=full_access_user_acl)
  50. def test_tree_getter_defaults_to_returning_top_level_categories(
  51. request_mock, categories_tree
  52. ):
  53. assert get_categories_tree(request_mock) == [
  54. categories_tree["first"],
  55. categories_tree["a"],
  56. categories_tree["e"],
  57. ]
  58. def test_tree_getter_returns_category_subtree(request_mock, categories_tree):
  59. assert get_categories_tree(request_mock, categories_tree["a"]) == [
  60. categories_tree["b"]
  61. ]
  62. def test_tree_getter_returns_empty_list_for_leaf_category(
  63. request_mock, categories_tree
  64. ):
  65. assert get_categories_tree(request_mock, categories_tree["f"]) == []
  66. def test_path_getter_returns_path_to_category(request_mock, categories_tree):
  67. for node in get_categories_tree(request_mock):
  68. parent_nodes = len(get_category_path(node))
  69. assert parent_nodes == node.level