test_permissions_admin_views.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  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.categories.models import Category, CategoryRole
  6. def fake_data(data_dict):
  7. return fake_post_data(CategoryRole(), data_dict)
  8. class CategoryRoleAdminViewsTests(AdminTestCase):
  9. def test_link_registered(self):
  10. """admin nav contains category roles link"""
  11. response = self.client.get(
  12. reverse('misago:admin:permissions:categories:index'))
  13. self.assertIn(reverse('misago:admin:permissions:categories: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:categories: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:categories:new'))
  24. self.assertEqual(response.status_code, 200)
  25. response = self.client.post(
  26. reverse('misago:admin:permissions:categories:new'),
  27. data=fake_data({'name': 'Test CategoryRole'}))
  28. self.assertEqual(response.status_code, 302)
  29. test_role = CategoryRole.objects.get(name='Test CategoryRole')
  30. response = self.client.get(
  31. reverse('misago:admin:permissions:categories: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:categories:new'),
  38. data=fake_data({'name': 'Test CategoryRole'}))
  39. test_role = CategoryRole.objects.get(name='Test CategoryRole')
  40. response = self.client.get(
  41. reverse('misago:admin:permissions:categories:edit',
  42. kwargs={'role_id': test_role.pk}))
  43. self.assertEqual(response.status_code, 200)
  44. self.assertIn('Test CategoryRole', response.content)
  45. response = self.client.post(
  46. reverse('misago:admin:permissions:categories: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 = CategoryRole.objects.get(name='Top Lel')
  51. response = self.client.get(
  52. reverse('misago:admin:permissions:categories: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:categories:new'),
  59. data=fake_data({'name': 'Test CategoryRole'}))
  60. test_role = CategoryRole.objects.get(name='Test CategoryRole')
  61. response = self.client.post(
  62. reverse('misago:admin:permissions:categories:delete',
  63. kwargs={'role_id': test_role.pk}))
  64. self.assertEqual(response.status_code, 302)
  65. self.client.get(reverse('misago:admin:permissions:categories:index'))
  66. response = self.client.get(
  67. reverse('misago:admin:permissions:categories:index'))
  68. self.assertEqual(response.status_code, 200)
  69. self.assertTrue(test_role.name not in response.content)
  70. def test_change_category_roles_view(self):
  71. """change category roles perms view works"""
  72. root = Category.objects.root_category()
  73. for descendant in root.get_descendants():
  74. descendant.delete()
  75. """
  76. Create categories tree for test cases:
  77. Category A
  78. + Category B
  79. Category C
  80. + Category D
  81. """
  82. root = Category.objects.root_category()
  83. self.client.post(reverse('misago:admin:categories:nodes:new'), data={
  84. 'name': 'Category A',
  85. 'new_parent': root.pk,
  86. 'prune_started_after': 0,
  87. 'prune_replied_after': 0,
  88. })
  89. test_category = Category.objects.get(slug='category-a')
  90. self.assertEqual(Category.objects.count(), 3)
  91. """
  92. Create test roles
  93. """
  94. self.client.post(
  95. reverse('misago:admin:permissions:users:new'),
  96. data=fake_post_data(Role(), {'name': 'Test Role A'}))
  97. self.client.post(
  98. reverse('misago:admin:permissions:users:new'),
  99. data=fake_post_data(Role(), {'name': 'Test Role B'}))
  100. test_role_a = Role.objects.get(name='Test Role A')
  101. test_role_b = Role.objects.get(name='Test Role B')
  102. self.client.post(
  103. reverse('misago:admin:permissions:categories:new'),
  104. data=fake_data({'name': 'Test Comments'}))
  105. self.client.post(
  106. reverse('misago:admin:permissions:categories:new'),
  107. data=fake_data({'name': 'Test Full'}))
  108. role_comments = CategoryRole.objects.get(name='Test Comments')
  109. role_full = CategoryRole.objects.get(name='Test Full')
  110. """
  111. Test view itself
  112. """
  113. # See if form page is rendered
  114. response = self.client.get(
  115. reverse('misago:admin:categories:nodes:permissions',
  116. kwargs={'category_id': test_category.pk}))
  117. self.assertEqual(response.status_code, 200)
  118. self.assertIn(test_category.name, response.content)
  119. self.assertIn(test_role_a.name, response.content)
  120. self.assertIn(test_role_b.name, response.content)
  121. self.assertIn(role_comments.name, response.content)
  122. self.assertIn(role_full.name, response.content)
  123. # Assign roles to categories
  124. response = self.client.post(
  125. reverse('misago:admin:categories:nodes:permissions',
  126. kwargs={'category_id': test_category.pk}),
  127. data={
  128. ('%s-category_role' % test_role_a.pk): role_full.pk,
  129. ('%s-category_role' % test_role_b.pk): role_comments.pk,
  130. })
  131. self.assertEqual(response.status_code, 302)
  132. # Check that roles were assigned
  133. category_role_set = test_category.category_role_set
  134. self.assertEqual(
  135. category_role_set.get(role=test_role_a).category_role_id,
  136. role_full.pk)
  137. self.assertEqual(
  138. category_role_set.get(role=test_role_b).category_role_id,
  139. role_comments.pk)
  140. def test_change_role_categories_permissions_view(self):
  141. """change role categories perms view works"""
  142. self.client.post(
  143. reverse('misago:admin:permissions:users:new'),
  144. data=fake_post_data(Role(), {'name': 'Test CategoryRole'}))
  145. test_role = Role.objects.get(name='Test CategoryRole')
  146. root = Category.objects.root_category()
  147. for descendant in root.get_descendants():
  148. descendant.delete()
  149. self.assertEqual(Category.objects.count(), 2)
  150. response = self.client.get(
  151. reverse('misago:admin:permissions:users:categories',
  152. kwargs={'role_id': test_role.pk}))
  153. self.assertEqual(response.status_code, 302)
  154. """
  155. Create categories tree for test cases:
  156. Category A
  157. + Category B
  158. Category C
  159. + Category D
  160. """
  161. root = Category.objects.root_category()
  162. self.client.post(reverse('misago:admin:categories:nodes:new'), data={
  163. 'name': 'Category A',
  164. 'new_parent': root.pk,
  165. 'prune_started_after': 0,
  166. 'prune_replied_after': 0,
  167. })
  168. self.client.post(reverse('misago:admin:categories:nodes:new'), data={
  169. 'name': 'Category C',
  170. 'new_parent': root.pk,
  171. 'prune_started_after': 0,
  172. 'prune_replied_after': 0,
  173. })
  174. category_a = Category.objects.get(slug='category-a')
  175. category_c = Category.objects.get(slug='category-c')
  176. self.client.post(reverse('misago:admin:categories:nodes:new'), data={
  177. 'name': 'Category B',
  178. 'new_parent': category_a.pk,
  179. 'prune_started_after': 0,
  180. 'prune_replied_after': 0,
  181. })
  182. category_b = Category.objects.get(slug='category-b')
  183. self.client.post(reverse('misago:admin:categories:nodes:new'), data={
  184. 'name': 'Category D',
  185. 'new_parent': category_c.pk,
  186. 'prune_started_after': 0,
  187. 'prune_replied_after': 0,
  188. })
  189. category_d = Category.objects.get(slug='category-d')
  190. self.assertEqual(Category.objects.count(), 6)
  191. # See if form page is rendered
  192. response = self.client.get(
  193. reverse('misago:admin:permissions:users:categories',
  194. kwargs={'role_id': test_role.pk}))
  195. self.assertEqual(response.status_code, 200)
  196. self.assertIn(category_a.name, response.content)
  197. self.assertIn(category_b.name, response.content)
  198. self.assertIn(category_c.name, response.content)
  199. self.assertIn(category_d.name, response.content)
  200. # Set test roles
  201. self.client.post(
  202. reverse('misago:admin:permissions:categories:new'),
  203. data=fake_data({'name': 'Test Comments'}))
  204. role_comments = CategoryRole.objects.get(name='Test Comments')
  205. self.client.post(
  206. reverse('misago:admin:permissions:categories:new'),
  207. data=fake_data({'name': 'Test Full'}))
  208. role_full = CategoryRole.objects.get(name='Test Full')
  209. # See if form contains those roles
  210. response = self.client.get(
  211. reverse('misago:admin:permissions:users:categories',
  212. kwargs={'role_id': test_role.pk}))
  213. self.assertEqual(response.status_code, 200)
  214. self.assertIn(role_comments.name, response.content)
  215. self.assertIn(role_full.name, response.content)
  216. # Assign roles to categories
  217. response = self.client.post(
  218. reverse('misago:admin:permissions:users:categories',
  219. kwargs={'role_id': test_role.pk}),
  220. data={
  221. ('%s-role' % category_a.pk): role_comments.pk,
  222. ('%s-role' % category_b.pk): role_comments.pk,
  223. ('%s-role' % category_c.pk): role_full.pk,
  224. ('%s-role' % category_d.pk): role_full.pk,
  225. })
  226. self.assertEqual(response.status_code, 302)
  227. # Check that roles were assigned
  228. categories_acls = test_role.categories_acls
  229. self.assertEqual(
  230. categories_acls.get(category=category_a).category_role_id,
  231. role_comments.pk)
  232. self.assertEqual(
  233. categories_acls.get(category=category_b).category_role_id,
  234. role_comments.pk)
  235. self.assertEqual(
  236. categories_acls.get(category=category_c).category_role_id,
  237. role_full.pk)
  238. self.assertEqual(
  239. categories_acls.get(category=category_d).category_role_id,
  240. role_full.pk)