test_roleadmin_views.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. from django.urls import reverse
  2. from misago.acl import ACL_CACHE
  3. from misago.acl.models import Role
  4. from misago.acl.test import mock_role_form_data
  5. from misago.cache.test import assert_invalidates_cache
  6. from misago.admin.testutils import AdminTestCase
  7. def create_data(data_dict):
  8. return mock_role_form_data(Role(), data_dict)
  9. class RoleAdminViewsTests(AdminTestCase):
  10. def test_link_registered(self):
  11. """admin nav contains user roles link"""
  12. response = self.client.get(reverse('misago:admin:permissions:users:index'))
  13. self.assertContains(response, reverse('misago:admin:permissions:users:index'))
  14. def test_list_view(self):
  15. """roles list view returns 200"""
  16. response = self.client.get(reverse('misago:admin:permissions:users:index'))
  17. self.assertEqual(response.status_code, 200)
  18. def test_new_view(self):
  19. """new role view has no showstoppers"""
  20. response = self.client.get(reverse('misago:admin:permissions:users:new'))
  21. self.assertEqual(response.status_code, 200)
  22. response = self.client.post(
  23. reverse('misago:admin:permissions:users:new'), data=create_data({
  24. 'name': 'Test Role',
  25. })
  26. )
  27. self.assertEqual(response.status_code, 302)
  28. test_role = Role.objects.get(name='Test Role')
  29. response = self.client.get(reverse('misago:admin:permissions:users:index'))
  30. self.assertEqual(response.status_code, 200)
  31. self.assertContains(response, test_role.name)
  32. def test_edit_view(self):
  33. """edit role view has no showstoppers"""
  34. self.client.post(
  35. reverse('misago:admin:permissions:users:new'), data=create_data({
  36. 'name': 'Test Role',
  37. })
  38. )
  39. test_role = Role.objects.get(name='Test Role')
  40. response = self.client.get(
  41. reverse('misago:admin:permissions:users:edit', kwargs={
  42. 'pk': test_role.pk,
  43. })
  44. )
  45. self.assertEqual(response.status_code, 200)
  46. self.assertContains(response, 'Test Role')
  47. response = self.client.post(
  48. reverse('misago:admin:permissions:users:edit', kwargs={
  49. 'pk': test_role.pk,
  50. }),
  51. data=create_data({
  52. 'name': 'Top Lel',
  53. })
  54. )
  55. self.assertEqual(response.status_code, 302)
  56. test_role = Role.objects.get(name='Top Lel')
  57. response = self.client.get(reverse('misago:admin:permissions:users:index'))
  58. self.assertEqual(response.status_code, 200)
  59. self.assertContains(response, test_role.name)
  60. def test_editing_role_invalidates_acl_cache(self):
  61. self.client.post(
  62. reverse('misago:admin:permissions:users:new'), data=create_data({
  63. 'name': 'Test Role',
  64. })
  65. )
  66. test_role = Role.objects.get(name='Test Role')
  67. with assert_invalidates_cache(ACL_CACHE):
  68. self.client.post(
  69. reverse('misago:admin:permissions:users:edit', kwargs={
  70. 'pk': test_role.pk,
  71. }),
  72. data=create_data({
  73. 'name': 'Top Lel',
  74. })
  75. )
  76. def test_users_view(self):
  77. """users with this role view has no showstoppers"""
  78. response = self.client.post(
  79. reverse('misago:admin:permissions:users:new'), data=create_data({
  80. 'name': 'Test Role',
  81. })
  82. )
  83. test_role = Role.objects.get(name='Test Role')
  84. response = self.client.get(
  85. reverse('misago:admin:permissions:users:users', kwargs={
  86. 'pk': test_role.pk,
  87. })
  88. )
  89. self.assertEqual(response.status_code, 302)
  90. def test_delete_view(self):
  91. """delete role view has no showstoppers"""
  92. self.client.post(
  93. reverse('misago:admin:permissions:users:new'), data=create_data({
  94. 'name': 'Test Role',
  95. })
  96. )
  97. test_role = Role.objects.get(name='Test Role')
  98. response = self.client.post(
  99. reverse('misago:admin:permissions:users:delete', kwargs={
  100. 'pk': test_role.pk,
  101. })
  102. )
  103. self.assertEqual(response.status_code, 302)
  104. # Get the page twice so no alert is renderered on second request
  105. self.client.get(reverse('misago:admin:permissions:users:index'))
  106. response = self.client.get(reverse('misago:admin:permissions:users:index'))
  107. self.assertNotContains(response, test_role.name)
  108. def test_deleting_role_invalidates_acl_cache(self):
  109. self.client.post(
  110. reverse('misago:admin:permissions:users:new'), data=create_data({
  111. 'name': 'Test Role',
  112. })
  113. )
  114. test_role = Role.objects.get(name='Test Role')
  115. with assert_invalidates_cache(ACL_CACHE):
  116. self.client.post(
  117. reverse('misago:admin:permissions:users:delete', kwargs={
  118. 'pk': test_role.pk,
  119. })
  120. )