test_treesmap.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. from django.test import TestCase
  2. from misago.categories.models import Category
  3. from misago.threads.threadtypes.treesmap import TreesMap
  4. THREAD_TYPE = "misago.threads.threadtypes.thread.Thread"
  5. class TreesMapTests(TestCase):
  6. def test_load_types(self):
  7. """TreesMap().load_types() loads types modules"""
  8. trees_map = TreesMap(None)
  9. types = trees_map.load_types([THREAD_TYPE])
  10. self.assertEqual(len(types), 1, "expected to load only one thread type")
  11. self.assertIn("root_category", types, "invalid thread type was loaded")
  12. def test_load_trees(self):
  13. """TreesMap().load_trees() loads trees ids"""
  14. trees_map = TreesMap(None)
  15. types = trees_map.load_types([THREAD_TYPE])
  16. trees = trees_map.load_trees(types)
  17. tree_id = Category.objects.get(special_role="root_category").tree_id
  18. self.assertEqual(len(trees), 1, "expected to load only one tree")
  19. self.assertEqual(
  20. trees[tree_id].root_name, "root_category", "invalid tree was loaded"
  21. )
  22. def test_get_roots(self):
  23. """TreesMap().get_roots() returns roots to trees dict"""
  24. trees_map = TreesMap(None)
  25. types = trees_map.load_types([THREAD_TYPE])
  26. trees = trees_map.load_trees(types)
  27. roots = trees_map.get_roots(trees)
  28. tree_id = Category.objects.get(special_role="root_category").tree_id
  29. self.assertEqual(len(roots), 1, "expected to load only one root")
  30. self.assertIn("root_category", roots, "invalid root was loaded")
  31. self.assertEqual(roots["root_category"], tree_id, "invalid tree_id was loaded")
  32. def test_load(self):
  33. """TreesMap().load() populates trees map"""
  34. trees_map = TreesMap([THREAD_TYPE])
  35. self.assertFalse(
  36. trees_map.is_loaded, "trees map should be not loaded by default"
  37. )
  38. trees_map.load()
  39. self.assertTrue(
  40. trees_map.is_loaded, "trees map should be loaded after call to load()"
  41. )
  42. self.assertEqual(len(trees_map.types), 1, "expected to load one type")
  43. self.assertEqual(len(trees_map.trees), 1, "expected to load one tree")
  44. self.assertEqual(len(trees_map.roots), 1, "expected to load one root")
  45. tree_id = Category.objects.get(special_role="root_category").tree_id
  46. self.assertIn(
  47. "root_category", trees_map.types, "invalid thread type was loaded"
  48. )
  49. self.assertEqual(
  50. trees_map.trees[tree_id].root_name,
  51. "root_category",
  52. "invalid tree was loaded",
  53. )
  54. self.assertIn("root_category", trees_map.roots, "invalid root was loaded")
  55. def test_get_type_for_tree_id(self):
  56. """TreesMap().get_type_for_tree_id() returns type for valid id"""
  57. trees_map = TreesMap([THREAD_TYPE])
  58. trees_map.load()
  59. tree_id = Category.objects.get(special_role="root_category").tree_id
  60. thread_type = trees_map.get_type_for_tree_id(tree_id)
  61. self.assertEqual(
  62. thread_type.root_name,
  63. "root_category",
  64. "returned invalid thread type for given tree id",
  65. )
  66. try:
  67. trees_map.get_type_for_tree_id(tree_id + 1000)
  68. self.fail("invalid tree id should cause KeyError being raised")
  69. except KeyError as e:
  70. self.assertIn(
  71. "tree id has no type defined",
  72. str(e),
  73. "invalid exception message as given",
  74. )
  75. def test_get_tree_id_for_root(self):
  76. """TreesMap().get_tree_id_for_root() returns tree id for valid type name"""
  77. trees_map = TreesMap([THREAD_TYPE])
  78. trees_map.load()
  79. in_db_tree_id = Category.objects.get(special_role="root_category").tree_id
  80. tree_id = trees_map.get_tree_id_for_root("root_category")
  81. self.assertEqual(
  82. tree_id, in_db_tree_id, "root name didn't match one in database"
  83. )
  84. try:
  85. trees_map.get_tree_id_for_root("hurr_durr")
  86. self.fail("invalid root name should cause KeyError being raised")
  87. except KeyError as e:
  88. self.assertIn(
  89. '"hurr_durr" root has no tree defined',
  90. str(e),
  91. "invalid exception message as given",
  92. )