test_threadslist_view.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. from django.test import TestCase
  2. from misago.threads.moderation import ModerationError
  3. from misago.threads.views.generic.threads import Actions, Sorting
  4. from misago.users.testutils import AuthenticatedUserTestCase
  5. class MockRequest(object):
  6. def __init__(self, user, method='GET', POST=None):
  7. self.POST = POST or {}
  8. self.user = user
  9. self.session = {}
  10. self.path = '/cool-threads/'
  11. class MockActions(Actions):
  12. def get_available_actions(self, kwargs):
  13. return []
  14. def action_test(self):
  15. pass
  16. class ActionsTests(AuthenticatedUserTestCase):
  17. def test_resolve_valid_action(self):
  18. """resolve_action returns valid action"""
  19. actions = MockActions(user=self.user)
  20. actions.available_actions = [{
  21. 'action': 'test',
  22. 'name': "Test action"
  23. }]
  24. resolution = actions.resolve_action(MockRequest(
  25. user=self.user,
  26. POST={'action': 'test'},
  27. ))
  28. self.assertEqual(resolution[0], actions.action_test)
  29. self.assertIsNone(resolution[1])
  30. def test_resolve_arg_action(self):
  31. """resolve_action returns valid action and argument"""
  32. actions = MockActions(user=self.user)
  33. actions.available_actions = [{
  34. 'action': 'test:1234',
  35. 'name': "Test action"
  36. }]
  37. resolution = actions.resolve_action(MockRequest(
  38. user=self.user,
  39. POST={'action': 'test:1234'},
  40. ))
  41. self.assertEqual(resolution[0], actions.action_test)
  42. self.assertEqual(resolution[1], '1234')
  43. def test_resolve_invalid_action(self):
  44. """resolve_action handles invalid actions gracefully"""
  45. actions = MockActions(user=self.user)
  46. actions.available_actions = [{
  47. 'action': 'test',
  48. 'name': "Test action"
  49. }]
  50. with self.assertRaises(ModerationError):
  51. resolution = actions.resolve_action(MockRequest(
  52. user=self.user,
  53. POST={'action': 'test:1234'},
  54. ))
  55. with self.assertRaises(ModerationError):
  56. resolution = actions.resolve_action(MockRequest(
  57. user=self.user,
  58. POST={'action': 'test:1234'},
  59. ))
  60. actions.available_actions = [{
  61. 'action': 'test:123',
  62. 'name': "Test action"
  63. }]
  64. with self.assertRaises(ModerationError):
  65. resolution = actions.resolve_action(MockRequest(
  66. user=self.user,
  67. POST={'action': 'test'},
  68. ))
  69. with self.assertRaises(ModerationError):
  70. resolution = actions.resolve_action(MockRequest(
  71. user=self.user,
  72. POST={'action': 'test:'},
  73. ))
  74. with self.assertRaises(ModerationError):
  75. resolution = actions.resolve_action(MockRequest(
  76. user=self.user,
  77. POST={'action': 'test:321'},
  78. ))
  79. def test_clean_selection(self):
  80. """clean_selection clears valid input"""
  81. actions = MockActions(user=self.user)
  82. self.assertEqual(actions.clean_selection(['1', '-', '9']), [1, 9])
  83. def test_clean_invalid_selection(self):
  84. """clean_selection raises exception for invalid/empty input"""
  85. actions = MockActions(user=self.user)
  86. with self.assertRaises(ModerationError):
  87. actions.clean_selection([])
  88. with self.assertRaises(ModerationError):
  89. actions.clean_selection(['abc'])
  90. def get_list(self):
  91. """get_list returns list of available actions"""
  92. actions = MockActions(user=self.user)
  93. actions.available_actions = [{
  94. 'action': 'test:123',
  95. 'name': "Test action"
  96. }]
  97. self.assertEqual(actions.get_list(), actions.available_actions)
  98. def get_selected_ids(self):
  99. """get_selected_ids returns list of selected items"""
  100. actions = MockActions(user=self.user)
  101. actions.selected_ids = [1, 2, 4, 5, 6]
  102. self.assertEqual(actions.get_selected_ids(), actions.selected_ids)
  103. class SortingTests(TestCase):
  104. def setUp(self):
  105. self.sorting = Sorting('misago:category', {
  106. 'category_slug': "test-category",
  107. 'category_id': 42,
  108. })
  109. def test_clean_kwargs_removes_default_sorting(self):
  110. """clean_kwargs removes default sorting"""
  111. default_sorting = self.sorting.sortings[0]['method']
  112. cleaned_kwargs = self.sorting.clean_kwargs({'sort': default_sorting})
  113. cleaned_kwargs['pie'] = 'yum-yum'
  114. self.assertEqual(cleaned_kwargs, {'pie': 'yum-yum'})
  115. def test_clean_kwargs_removes_invalid_sorting(self):
  116. """clean_kwargs removes invalid sorting"""
  117. default_sorting = self.sorting.sortings[0]['method']
  118. cleaned_kwargs = self.sorting.clean_kwargs({'sort': 'bad-sort'})
  119. cleaned_kwargs['pie'] = 'yum-yum'
  120. self.assertEqual(cleaned_kwargs, {'pie': 'yum-yum'})
  121. def test_clean_kwargs_preserves_valid_sorting(self):
  122. """clean_kwargs preserves valid sorting"""
  123. default_sorting = self.sorting.sortings[0]['method']
  124. cleaned_kwargs = self.sorting.clean_kwargs({'sort': 'oldest'})
  125. cleaned_kwargs['pie'] = 'yum-yum'
  126. self.assertEqual(cleaned_kwargs, {'sort': 'oldest', 'pie': 'yum-yum'})
  127. def test_set_sorting_sets_valid_method(self):
  128. """set_sorting sets valid sorting"""
  129. for sorting in self.sorting.sortings:
  130. self.sorting.set_sorting(sorting['method'])
  131. self.assertEqual(sorting, self.sorting.sorting)
  132. self.assertEqual(sorting['name'], self.sorting.name)
  133. def test_choices(self):
  134. """choices returns set of valid choices"""
  135. for sorting in self.sorting.sortings:
  136. self.sorting.set_sorting(sorting['method'])
  137. choices = [choice['name'] for choice in self.sorting.choices()]
  138. self.assertNotIn(sorting['name'], choices)
  139. for other_sorting in self.sorting.sortings:
  140. if other_sorting != sorting:
  141. self.assertIn(other_sorting['name'], choices)