test_forums_admin_views.py 13 KB

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