test_treesmap.py 4.1 KB

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