test_permissions_admin_views.py 11 KB

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