test_forums_admin_views.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. from django.core.urlresolvers import reverse
  2. from misago.admin.testutils import AdminTestCase
  3. from misago.forums.models import Forum
  4. class ForumAdminViewsTests(AdminTestCase):
  5. def test_link_registered(self):
  6. """admin nav contains forums link"""
  7. response = self.client.get(reverse('misago:admin:forums:nodes:index'))
  8. self.assertIn(reverse('misago:admin:forums:nodes:index'),
  9. response.content)
  10. def test_list_view(self):
  11. """forums list view returns 200"""
  12. response = self.client.get(reverse('misago:admin:forums:nodes:index'))
  13. self.assertEqual(response.status_code, 200)
  14. self.assertIn('No forums', response.content)
  15. def test_new_view(self):
  16. """new forum view has no showstoppers"""
  17. root = Forum.objects.root_category()
  18. response = self.client.get(
  19. reverse('misago:admin:forums:nodes:new'))
  20. self.assertEqual(response.status_code, 200)
  21. response = self.client.post(
  22. reverse('misago:admin:forums:nodes:new'),
  23. data={
  24. 'name': 'Test Category',
  25. 'description': 'Lorem ipsum dolor met',
  26. 'new_parent': root.pk,
  27. 'role': 'category',
  28. 'prune_started_after': 0,
  29. 'prune_replied_after': 0,
  30. })
  31. self.assertEqual(response.status_code, 302)
  32. response = self.client.get(reverse('misago:admin:forums:nodes:index'))
  33. self.assertEqual(response.status_code, 200)
  34. self.assertIn('Test Category', response.content)
  35. test_category = Forum.objects.all_forums().get(slug='test-category')
  36. response = self.client.post(
  37. reverse('misago:admin:forums:nodes:new'),
  38. data={
  39. 'name': 'Test Forum',
  40. 'new_parent': test_category.pk,
  41. 'role': 'forum',
  42. 'copy_permissions': test_category.pk,
  43. 'prune_started_after': 0,
  44. 'prune_replied_after': 0,
  45. })
  46. self.assertEqual(response.status_code, 302)
  47. response = self.client.get(reverse('misago:admin:forums:nodes:index'))
  48. self.assertEqual(response.status_code, 200)
  49. self.assertIn('Test Forum', response.content)
  50. def test_edit_view(self):
  51. """edit forum view has no showstoppers"""
  52. private_threads = Forum.objects.private_threads()
  53. root = Forum.objects.root_category()
  54. response = self.client.get(
  55. reverse('misago:admin:forums:nodes:edit',
  56. kwargs={'forum_id': private_threads.pk}))
  57. self.assertEqual(response.status_code, 302)
  58. response = self.client.get(
  59. reverse('misago:admin:forums:nodes:edit',
  60. kwargs={'forum_id': root.pk}))
  61. self.assertEqual(response.status_code, 302)
  62. response = self.client.post(
  63. reverse('misago:admin:forums:nodes:new'),
  64. data={
  65. 'name': 'Test Category',
  66. 'description': 'Lorem ipsum dolor met',
  67. 'new_parent': root.pk,
  68. 'role': 'category',
  69. 'prune_started_after': 0,
  70. 'prune_replied_after': 0,
  71. })
  72. self.assertEqual(response.status_code, 302)
  73. test_category = Forum.objects.all_forums().get(slug='test-category')
  74. response = self.client.get(
  75. reverse('misago:admin:forums:nodes:edit',
  76. kwargs={'forum_id': test_category.pk}))
  77. self.assertEqual(response.status_code, 200)
  78. self.assertIn('Test Category', response.content)
  79. response = self.client.post(
  80. reverse('misago:admin:forums:nodes:edit',
  81. kwargs={'forum_id': test_category.pk}),
  82. data={
  83. 'name': 'Test Category Edited',
  84. 'new_parent': root.pk,
  85. 'role': 'category',
  86. 'prune_started_after': 0,
  87. 'prune_replied_after': 0,
  88. })
  89. self.assertEqual(response.status_code, 302)
  90. response = self.client.get(reverse('misago:admin:forums:nodes:index'))
  91. self.assertEqual(response.status_code, 200)
  92. self.assertIn('Test Category Edited', response.content)
  93. def test_move_views(self):
  94. """move up/down views have no showstoppers"""
  95. root = Forum.objects.root_category()
  96. self.client.post(reverse('misago:admin:forums:nodes:new'),
  97. data={
  98. 'name': 'Category A',
  99. 'new_parent': root.pk,
  100. 'role': 'category',
  101. 'prune_started_after': 0,
  102. 'prune_replied_after': 0,
  103. })
  104. self.client.post(reverse('misago:admin:forums:nodes:new'),
  105. data={
  106. 'name': 'Category B',
  107. 'new_parent': root.pk,
  108. 'role': 'category',
  109. 'prune_started_after': 0,
  110. 'prune_replied_after': 0,
  111. })
  112. category_a = Forum.objects.get(slug='category-a')
  113. category_b = Forum.objects.get(slug='category-b')
  114. response = self.client.post(
  115. reverse('misago:admin:forums:nodes:up',
  116. kwargs={'forum_id': category_b.pk}))
  117. self.assertEqual(response.status_code, 302)
  118. self.client.get(reverse('misago:admin:forums:nodes:index'))
  119. response = self.client.get(reverse('misago:admin:forums:nodes:index'))
  120. self.assertEqual(response.status_code, 200)
  121. position_a = response.content.find('Category A')
  122. position_b = response.content.find('Category B')
  123. self.assertTrue(position_a > position_b)
  124. response = self.client.post(
  125. reverse('misago:admin:forums:nodes:up',
  126. kwargs={'forum_id': category_b.pk}))
  127. self.assertEqual(response.status_code, 302)
  128. self.client.get(reverse('misago:admin:forums:nodes:index'))
  129. response = self.client.get(reverse('misago:admin:forums:nodes:index'))
  130. self.assertEqual(response.status_code, 200)
  131. position_a = response.content.find('Category A')
  132. position_b = response.content.find('Category B')
  133. self.assertTrue(position_a > position_b)
  134. response = self.client.post(
  135. reverse('misago:admin:forums:nodes:down',
  136. kwargs={'forum_id': category_b.pk}))
  137. self.assertEqual(response.status_code, 302)
  138. self.client.get(reverse('misago:admin:forums:nodes:index'))
  139. response = self.client.get(reverse('misago:admin:forums:nodes:index'))
  140. self.assertEqual(response.status_code, 200)
  141. position_a = response.content.find('Category A')
  142. position_b = response.content.find('Category B')
  143. self.assertTrue(position_a < position_b)
  144. response = self.client.post(
  145. reverse('misago:admin:forums:nodes:down',
  146. kwargs={'forum_id': category_b.pk}))
  147. self.assertEqual(response.status_code, 302)
  148. self.client.get(reverse('misago:admin:forums:nodes:index'))
  149. response = self.client.get(reverse('misago:admin:forums:nodes:index'))
  150. self.assertEqual(response.status_code, 200)
  151. position_a = response.content.find('Category A')
  152. position_b = response.content.find('Category B')
  153. self.assertTrue(position_a < position_b)
  154. class ForumAdminDeleteViewTests(AdminTestCase):
  155. def setUp(self):
  156. super(ForumAdminDeleteViewTests, self).setUp()
  157. self.root = Forum.objects.root_category()
  158. """
  159. Create forums tree for test cases:
  160. Category A
  161. + Forum B
  162. + Subcategory C
  163. + Subforum D
  164. Category E
  165. + Forum F
  166. """
  167. self.client.post(reverse('misago:admin:forums:nodes:new'),
  168. data={
  169. 'name': 'Category A',
  170. 'new_parent': self.root.pk,
  171. 'role': 'category',
  172. 'prune_started_after': 0,
  173. 'prune_replied_after': 0,
  174. })
  175. self.client.post(reverse('misago:admin:forums:nodes:new'),
  176. data={
  177. 'name': 'Category E',
  178. 'new_parent': self.root.pk,
  179. 'role': 'category',
  180. 'prune_started_after': 0,
  181. 'prune_replied_after': 0,
  182. })
  183. self.category_a = Forum.objects.get(slug='category-a')
  184. self.category_e = Forum.objects.get(slug='category-e')
  185. self.client.post(reverse('misago:admin:forums:nodes:new'),
  186. data={
  187. 'name': 'Forum B',
  188. 'new_parent': self.category_a.pk,
  189. 'role': 'forum',
  190. 'prune_started_after': 0,
  191. 'prune_replied_after': 0,
  192. })
  193. self.forum_b = Forum.objects.get(slug='forum-b')
  194. self.client.post(reverse('misago:admin:forums:nodes:new'),
  195. data={
  196. 'name': 'Subcategory C',
  197. 'new_parent': self.forum_b.pk,
  198. 'role': 'category',
  199. 'prune_started_after': 0,
  200. 'prune_replied_after': 0,
  201. })
  202. self.client.post(reverse('misago:admin:forums:nodes:new'),
  203. data={
  204. 'name': 'Subforum D',
  205. 'new_parent': self.forum_b.pk,
  206. 'role': 'forum',
  207. 'prune_started_after': 0,
  208. 'prune_replied_after': 0,
  209. })
  210. self.subforum_d = Forum.objects.get(slug='subforum-d')
  211. self.client.post(reverse('misago:admin:forums:nodes:new'),
  212. data={
  213. 'name': 'Forum F',
  214. 'new_parent': self.category_e.pk,
  215. 'role': 'forum',
  216. 'prune_started_after': 0,
  217. 'prune_replied_after': 0,
  218. })
  219. def test_delete_forum_and_threads(self):
  220. """forum and its contents were deleted"""
  221. response = self.client.get(
  222. reverse('misago:admin:forums:nodes:delete',
  223. kwargs={'forum_id': self.subforum_d.pk}))
  224. self.assertEqual(response.status_code, 200)
  225. response = self.client.post(
  226. reverse('misago:admin:forums:nodes:delete',
  227. kwargs={'forum_id': self.subforum_d.pk}),
  228. data={'move_children_to': '', 'move_threads_to': '',})
  229. self.assertEqual(response.status_code, 302)
  230. self.assertEqual(Forum.objects.all_forums().count(), 5)
  231. def test_delete_forum_move_threads(self):
  232. """forum was deleted and its contents were moved"""
  233. response = self.client.get(
  234. reverse('misago:admin:forums:nodes:delete',
  235. kwargs={'forum_id': self.forum_b.pk}))
  236. self.assertEqual(response.status_code, 200)
  237. response = self.client.post(
  238. reverse('misago:admin:forums:nodes:delete',
  239. kwargs={'forum_id': self.forum_b.pk}),
  240. data={
  241. 'move_children_to': self.category_e.pk,
  242. 'move_threads_to': self.subforum_d.pk,
  243. })
  244. self.assertEqual(response.status_code, 302)
  245. self.assertEqual(Forum.objects.all_forums().count(), 5)
  246. def test_delete_all(self):
  247. """forum and its contents were deleted"""
  248. response = self.client.get(
  249. reverse('misago:admin:forums:nodes:delete',
  250. kwargs={'forum_id': self.forum_b.pk}))
  251. self.assertEqual(response.status_code, 200)
  252. response = self.client.post(
  253. reverse('misago:admin:forums:nodes:delete',
  254. kwargs={'forum_id': self.forum_b.pk}),
  255. data={'move_children_to': self.root.pk, 'move_threads_to': '',})
  256. self.assertEqual(response.status_code, 200)
  257. self.assertEqual(Forum.objects.all_forums().count(), 6)
  258. response = self.client.post(
  259. reverse('misago:admin:forums:nodes:delete',
  260. kwargs={'forum_id': self.forum_b.pk}),
  261. data={'move_children_to': '', 'move_threads_to': '',})
  262. self.assertEqual(response.status_code, 302)
  263. self.assertEqual(Forum.objects.all_forums().count(), 3)