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