test_permissions_admin_views.py 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. from django.core.urlresolvers import reverse
  2. from misago.acl import get_change_permissions_forms
  3. from misago.acl.models import Role
  4. from misago.acl.testutils import fake_post_data
  5. from misago.admin.testutils import AdminTestCase
  6. from misago.forums.models import Forum, ForumRole
  7. def fake_data(data_dict):
  8. return fake_post_data(ForumRole(), data_dict)
  9. class ForumRoleAdminViewsTests(AdminTestCase):
  10. def test_link_registered(self):
  11. """admin nav contains forum roles link"""
  12. response = self.client.get(
  13. reverse('misago:admin:permissions:forums:index'))
  14. self.assertIn(reverse('misago:admin:permissions:forums:index'),
  15. response.content)
  16. def test_list_view(self):
  17. """roles list view returns 200"""
  18. response = self.client.get(
  19. reverse('misago:admin:permissions:forums:index'))
  20. self.assertEqual(response.status_code, 200)
  21. def test_new_view(self):
  22. """new role view has no showstoppers"""
  23. response = self.client.get(
  24. reverse('misago:admin:permissions:forums:new'))
  25. self.assertEqual(response.status_code, 200)
  26. response = self.client.post(
  27. reverse('misago:admin:permissions:forums:new'),
  28. data=fake_data({'name': 'Test ForumRole'}))
  29. self.assertEqual(response.status_code, 302)
  30. test_role = ForumRole.objects.get(name='Test ForumRole')
  31. response = self.client.get(
  32. reverse('misago:admin:permissions:forums:index'))
  33. self.assertEqual(response.status_code, 200)
  34. self.assertIn(test_role.name, response.content)
  35. def test_edit_view(self):
  36. """edit role view has no showstoppers"""
  37. self.client.post(
  38. reverse('misago:admin:permissions:forums:new'),
  39. data=fake_data({'name': 'Test ForumRole'}))
  40. test_role = ForumRole.objects.get(name='Test ForumRole')
  41. response = self.client.get(
  42. reverse('misago:admin:permissions:forums:edit',
  43. kwargs={'role_id': test_role.pk}))
  44. self.assertEqual(response.status_code, 200)
  45. self.assertIn('Test ForumRole', response.content)
  46. response = self.client.post(
  47. reverse('misago:admin:permissions:forums:edit',
  48. kwargs={'role_id': test_role.pk}),
  49. data=fake_data({'name': 'Top Lel'}))
  50. self.assertEqual(response.status_code, 302)
  51. test_role = ForumRole.objects.get(name='Top Lel')
  52. response = self.client.get(
  53. reverse('misago:admin:permissions:forums:index'))
  54. self.assertEqual(response.status_code, 200)
  55. self.assertIn(test_role.name, response.content)
  56. def test_delete_view(self):
  57. """delete role view has no showstoppers"""
  58. self.client.post(
  59. reverse('misago:admin:permissions:forums:new'),
  60. data=fake_data({'name': 'Test ForumRole'}))
  61. test_role = ForumRole.objects.get(name='Test ForumRole')
  62. response = self.client.post(
  63. reverse('misago:admin:permissions:forums:delete',
  64. kwargs={'role_id': test_role.pk}))
  65. self.assertEqual(response.status_code, 302)
  66. self.client.get(reverse('misago:admin:permissions:forums:index'))
  67. response = self.client.get(
  68. reverse('misago:admin:permissions:forums:index'))
  69. self.assertEqual(response.status_code, 200)
  70. self.assertTrue(test_role.name not in response.content)
  71. def test_change_role_forums_permissions_view(self):
  72. """change role forums perms view"""
  73. self.client.post(
  74. reverse('misago:admin:permissions:users:new'),
  75. data=fake_post_data(Role(), {'name': 'Test ForumRole'}))
  76. test_role = Role.objects.get(name='Test ForumRole')
  77. self.assertEqual(Forum.objects.count(), 2)
  78. response = self.client.get(
  79. reverse('misago:admin:permissions:users:forums',
  80. kwargs={'role_id': test_role.pk}))
  81. self.assertEqual(response.status_code, 302)
  82. """
  83. Create forums tree for test cases:
  84. Category A
  85. + Forum B
  86. Category C
  87. + Forum D
  88. """
  89. root = Forum.objects.root_category()
  90. self.client.post(reverse('misago:admin:forums:nodes:new'),
  91. data={
  92. 'name': 'Category A',
  93. 'new_parent': root.pk,
  94. 'role': 'category',
  95. 'prune_started_after': 0,
  96. 'prune_replied_after': 0,
  97. })
  98. self.client.post(reverse('misago:admin:forums:nodes:new'),
  99. data={
  100. 'name': 'Category C',
  101. 'new_parent': root.pk,
  102. 'role': 'category',
  103. 'prune_started_after': 0,
  104. 'prune_replied_after': 0,
  105. })
  106. category_a = Forum.objects.get(slug='category-a')
  107. category_c = Forum.objects.get(slug='category-c')
  108. self.client.post(reverse('misago:admin:forums:nodes:new'),
  109. data={
  110. 'name': 'Forum B',
  111. 'new_parent': category_a.pk,
  112. 'role': 'forum',
  113. 'prune_started_after': 0,
  114. 'prune_replied_after': 0,
  115. })
  116. forum_b = Forum.objects.get(slug='forum-b')
  117. self.client.post(reverse('misago:admin:forums:nodes:new'),
  118. data={
  119. 'name': 'Forum D',
  120. 'new_parent': category_c.pk,
  121. 'role': 'forum',
  122. 'prune_started_after': 0,
  123. 'prune_replied_after': 0,
  124. })
  125. forum_d = Forum.objects.get(slug='forum-d')
  126. self.assertEqual(Forum.objects.count(), 6)
  127. # See if form page is rendered
  128. response = self.client.get(
  129. reverse('misago:admin:permissions:users:forums',
  130. kwargs={'role_id': test_role.pk}))
  131. self.assertEqual(response.status_code, 200)
  132. self.assertIn(category_a.name, response.content)
  133. self.assertIn(forum_b.name, response.content)
  134. self.assertIn(category_c.name, response.content)
  135. self.assertIn(forum_d.name, response.content)
  136. # Set test roles
  137. self.client.post(
  138. reverse('misago:admin:permissions:forums:new'),
  139. data=fake_data({'name': 'Test Comments'}))
  140. role_comments = ForumRole.objects.get(name='Test Comments')
  141. self.client.post(
  142. reverse('misago:admin:permissions:forums:new'),
  143. data=fake_data({'name': 'Test Full'}))
  144. role_full = ForumRole.objects.get(name='Test Full')
  145. # See if form contains those roles
  146. response = self.client.get(
  147. reverse('misago:admin:permissions:users:forums',
  148. kwargs={'role_id': test_role.pk}))
  149. self.assertEqual(response.status_code, 200)
  150. self.assertIn(role_comments.name, response.content)
  151. self.assertIn(role_full.name, response.content)
  152. # Assign roles to forums
  153. response = self.client.post(
  154. reverse('misago:admin:permissions:users:forums',
  155. kwargs={'role_id': test_role.pk}),
  156. data={
  157. ('%s-role' % category_a.pk): role_comments.pk,
  158. ('%s-role' % forum_b.pk): role_comments.pk,
  159. ('%s-role' % category_c.pk): role_full.pk,
  160. ('%s-role' % forum_d.pk): role_full.pk,
  161. })
  162. self.assertEqual(response.status_code, 302)
  163. # Check that roles were assigned
  164. self.assertEqual(
  165. test_role.forums_acls.get(forum=category_a).forum_role_id,
  166. role_comments.pk)
  167. self.assertEqual(
  168. test_role.forums_acls.get(forum=forum_b).forum_role_id,
  169. role_comments.pk)
  170. self.assertEqual(
  171. test_role.forums_acls.get(forum=category_c).forum_role_id,
  172. role_full.pk)
  173. self.assertEqual(
  174. test_role.forums_acls.get(forum=forum_d).forum_role_id,
  175. role_full.pk)