test_permissions_admin_views.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. from django.core.urlresolvers import reverse
  2. from misago.acl.models import Role
  3. from misago.acl.testutils import fake_post_data
  4. from misago.admin.testutils import AdminTestCase
  5. from misago.forums.models import Forum, ForumRole
  6. def fake_data(data_dict):
  7. return fake_post_data(ForumRole(), data_dict)
  8. class ForumRoleAdminViewsTests(AdminTestCase):
  9. def test_link_registered(self):
  10. """admin nav contains forum roles link"""
  11. response = self.client.get(
  12. reverse('misago:admin:permissions:forums:index'))
  13. self.assertIn(reverse('misago:admin:permissions:forums:index'),
  14. response.content)
  15. def test_list_view(self):
  16. """roles list view returns 200"""
  17. response = self.client.get(
  18. reverse('misago:admin:permissions:forums:index'))
  19. self.assertEqual(response.status_code, 200)
  20. def test_new_view(self):
  21. """new role view has no showstoppers"""
  22. response = self.client.get(
  23. reverse('misago:admin:permissions:forums:new'))
  24. self.assertEqual(response.status_code, 200)
  25. response = self.client.post(
  26. reverse('misago:admin:permissions:forums:new'),
  27. data=fake_data({'name': 'Test ForumRole'}))
  28. self.assertEqual(response.status_code, 302)
  29. test_role = ForumRole.objects.get(name='Test ForumRole')
  30. response = self.client.get(
  31. reverse('misago:admin:permissions:forums:index'))
  32. self.assertEqual(response.status_code, 200)
  33. self.assertIn(test_role.name, response.content)
  34. def test_edit_view(self):
  35. """edit role view has no showstoppers"""
  36. self.client.post(
  37. reverse('misago:admin:permissions:forums:new'),
  38. data=fake_data({'name': 'Test ForumRole'}))
  39. test_role = ForumRole.objects.get(name='Test ForumRole')
  40. response = self.client.get(
  41. reverse('misago:admin:permissions:forums:edit',
  42. kwargs={'role_id': test_role.pk}))
  43. self.assertEqual(response.status_code, 200)
  44. self.assertIn('Test ForumRole', response.content)
  45. response = self.client.post(
  46. reverse('misago:admin:permissions:forums:edit',
  47. kwargs={'role_id': test_role.pk}),
  48. data=fake_data({'name': 'Top Lel'}))
  49. self.assertEqual(response.status_code, 302)
  50. test_role = ForumRole.objects.get(name='Top Lel')
  51. response = self.client.get(
  52. reverse('misago:admin:permissions:forums:index'))
  53. self.assertEqual(response.status_code, 200)
  54. self.assertIn(test_role.name, response.content)
  55. def test_delete_view(self):
  56. """delete role view has no showstoppers"""
  57. self.client.post(
  58. reverse('misago:admin:permissions:forums:new'),
  59. data=fake_data({'name': 'Test ForumRole'}))
  60. test_role = ForumRole.objects.get(name='Test ForumRole')
  61. response = self.client.post(
  62. reverse('misago:admin:permissions:forums:delete',
  63. kwargs={'role_id': test_role.pk}))
  64. self.assertEqual(response.status_code, 302)
  65. self.client.get(reverse('misago:admin:permissions:forums:index'))
  66. response = self.client.get(
  67. reverse('misago:admin:permissions:forums:index'))
  68. self.assertEqual(response.status_code, 200)
  69. self.assertTrue(test_role.name not in response.content)
  70. def test_change_forum_roles_view(self):
  71. """change forum roles perms view works"""
  72. root = Forum.objects.root_category()
  73. for descendant in root.get_descendants():
  74. descendant.delete()
  75. """
  76. Create forums tree for test cases:
  77. Category A
  78. + Forum B
  79. Category C
  80. + Forum D
  81. """
  82. root = Forum.objects.root_category()
  83. self.client.post(reverse('misago:admin:forums:nodes:new'),
  84. data={
  85. 'name': 'Category A',
  86. 'new_parent': root.pk,
  87. 'role': 'category',
  88. 'prune_started_after': 0,
  89. 'prune_replied_after': 0,
  90. })
  91. test_category = Forum.objects.get(slug='category-a')
  92. self.assertEqual(Forum.objects.count(), 3)
  93. """
  94. Create test roles
  95. """
  96. self.client.post(
  97. reverse('misago:admin:permissions:users:new'),
  98. data=fake_post_data(Role(), {'name': 'Test Role A'}))
  99. self.client.post(
  100. reverse('misago:admin:permissions:users:new'),
  101. data=fake_post_data(Role(), {'name': 'Test Role B'}))
  102. test_role_a = Role.objects.get(name='Test Role A')
  103. test_role_b = Role.objects.get(name='Test Role B')
  104. self.client.post(
  105. reverse('misago:admin:permissions:forums:new'),
  106. data=fake_data({'name': 'Test Comments'}))
  107. self.client.post(
  108. reverse('misago:admin:permissions:forums:new'),
  109. data=fake_data({'name': 'Test Full'}))
  110. role_comments = ForumRole.objects.get(name='Test Comments')
  111. role_full = ForumRole.objects.get(name='Test Full')
  112. """
  113. Test view itself
  114. """
  115. # See if form page is rendered
  116. response = self.client.get(
  117. reverse('misago:admin:forums:nodes:permissions',
  118. kwargs={'forum_id': test_category.pk}))
  119. self.assertEqual(response.status_code, 200)
  120. self.assertIn(test_category.name, response.content)
  121. self.assertIn(test_role_a.name, response.content)
  122. self.assertIn(test_role_b.name, response.content)
  123. self.assertIn(role_comments.name, response.content)
  124. self.assertIn(role_full.name, response.content)
  125. # Assign roles to forums
  126. response = self.client.post(
  127. reverse('misago:admin:forums:nodes:permissions',
  128. kwargs={'forum_id': test_category.pk}),
  129. data={
  130. ('%s-forum_role' % test_role_a.pk): role_full.pk,
  131. ('%s-forum_role' % test_role_b.pk): role_comments.pk,
  132. })
  133. self.assertEqual(response.status_code, 302)
  134. # Check that roles were assigned
  135. self.assertEqual(
  136. test_category.forum_role_set.get(role=test_role_a).forum_role_id,
  137. role_full.pk)
  138. self.assertEqual(
  139. test_category.forum_role_set.get(role=test_role_b).forum_role_id,
  140. role_comments.pk)
  141. def test_change_role_forums_permissions_view(self):
  142. """change role forums perms view works"""
  143. self.client.post(
  144. reverse('misago:admin:permissions:users:new'),
  145. data=fake_post_data(Role(), {'name': 'Test ForumRole'}))
  146. test_role = Role.objects.get(name='Test ForumRole')
  147. root = Forum.objects.root_category()
  148. for descendant in root.get_descendants():
  149. descendant.delete()
  150. self.assertEqual(Forum.objects.count(), 2)
  151. response = self.client.get(
  152. reverse('misago:admin:permissions:users:forums',
  153. kwargs={'role_id': test_role.pk}))
  154. self.assertEqual(response.status_code, 302)
  155. """
  156. Create forums tree for test cases:
  157. Category A
  158. + Forum B
  159. Category C
  160. + Forum D
  161. """
  162. root = Forum.objects.root_category()
  163. self.client.post(reverse('misago:admin:forums:nodes:new'),
  164. data={
  165. 'name': 'Category A',
  166. 'new_parent': root.pk,
  167. 'role': 'category',
  168. 'prune_started_after': 0,
  169. 'prune_replied_after': 0,
  170. })
  171. self.client.post(reverse('misago:admin:forums:nodes:new'),
  172. data={
  173. 'name': 'Category C',
  174. 'new_parent': root.pk,
  175. 'role': 'category',
  176. 'prune_started_after': 0,
  177. 'prune_replied_after': 0,
  178. })
  179. category_a = Forum.objects.get(slug='category-a')
  180. category_c = Forum.objects.get(slug='category-c')
  181. self.client.post(reverse('misago:admin:forums:nodes:new'),
  182. data={
  183. 'name': 'Forum B',
  184. 'new_parent': category_a.pk,
  185. 'role': 'forum',
  186. 'prune_started_after': 0,
  187. 'prune_replied_after': 0,
  188. })
  189. forum_b = Forum.objects.get(slug='forum-b')
  190. self.client.post(reverse('misago:admin:forums:nodes:new'),
  191. data={
  192. 'name': 'Forum D',
  193. 'new_parent': category_c.pk,
  194. 'role': 'forum',
  195. 'prune_started_after': 0,
  196. 'prune_replied_after': 0,
  197. })
  198. forum_d = Forum.objects.get(slug='forum-d')
  199. self.assertEqual(Forum.objects.count(), 6)
  200. # See if form page is rendered
  201. response = self.client.get(
  202. reverse('misago:admin:permissions:users:forums',
  203. kwargs={'role_id': test_role.pk}))
  204. self.assertEqual(response.status_code, 200)
  205. self.assertIn(category_a.name, response.content)
  206. self.assertIn(forum_b.name, response.content)
  207. self.assertIn(category_c.name, response.content)
  208. self.assertIn(forum_d.name, response.content)
  209. # Set test roles
  210. self.client.post(
  211. reverse('misago:admin:permissions:forums:new'),
  212. data=fake_data({'name': 'Test Comments'}))
  213. role_comments = ForumRole.objects.get(name='Test Comments')
  214. self.client.post(
  215. reverse('misago:admin:permissions:forums:new'),
  216. data=fake_data({'name': 'Test Full'}))
  217. role_full = ForumRole.objects.get(name='Test Full')
  218. # See if form contains those roles
  219. response = self.client.get(
  220. reverse('misago:admin:permissions:users:forums',
  221. kwargs={'role_id': test_role.pk}))
  222. self.assertEqual(response.status_code, 200)
  223. self.assertIn(role_comments.name, response.content)
  224. self.assertIn(role_full.name, response.content)
  225. # Assign roles to forums
  226. response = self.client.post(
  227. reverse('misago:admin:permissions:users:forums',
  228. kwargs={'role_id': test_role.pk}),
  229. data={
  230. ('%s-role' % category_a.pk): role_comments.pk,
  231. ('%s-role' % forum_b.pk): role_comments.pk,
  232. ('%s-role' % category_c.pk): role_full.pk,
  233. ('%s-role' % forum_d.pk): role_full.pk,
  234. })
  235. self.assertEqual(response.status_code, 302)
  236. # Check that roles were assigned
  237. self.assertEqual(
  238. test_role.forums_acls.get(forum=category_a).forum_role_id,
  239. role_comments.pk)
  240. self.assertEqual(
  241. test_role.forums_acls.get(forum=forum_b).forum_role_id,
  242. role_comments.pk)
  243. self.assertEqual(
  244. test_role.forums_acls.get(forum=category_c).forum_role_id,
  245. role_full.pk)
  246. self.assertEqual(
  247. test_role.forums_acls.get(forum=forum_d).forum_role_id,
  248. role_full.pk)