test_roleadmin_views.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. from django.urls import reverse
  2. from .. import ACL_CACHE
  3. from ...admin.test import AdminTestCase
  4. from ...cache.test import assert_invalidates_cache
  5. from ..models import Role
  6. from ..test import mock_role_form_data
  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:index"))
  13. self.assertContains(response, reverse("misago:admin:permissions:index"))
  14. def test_list_view(self):
  15. """roles list view returns 200"""
  16. response = self.client.get(reverse("misago:admin:permissions: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:new"))
  21. self.assertEqual(response.status_code, 200)
  22. response = self.client.post(
  23. reverse("misago:admin:permissions:new"),
  24. data=create_data({"name": "Test Role"}),
  25. )
  26. self.assertEqual(response.status_code, 302)
  27. test_role = Role.objects.get(name="Test Role")
  28. response = self.client.get(reverse("misago:admin:permissions:index"))
  29. self.assertEqual(response.status_code, 200)
  30. self.assertContains(response, test_role.name)
  31. def test_edit_view(self):
  32. """edit role view has no showstoppers"""
  33. self.client.post(
  34. reverse("misago:admin:permissions:new"),
  35. data=create_data({"name": "Test Role"}),
  36. )
  37. test_role = Role.objects.get(name="Test Role")
  38. response = self.client.get(
  39. reverse("misago:admin:permissions:edit", kwargs={"pk": test_role.pk})
  40. )
  41. self.assertEqual(response.status_code, 200)
  42. self.assertContains(response, "Test Role")
  43. response = self.client.post(
  44. reverse("misago:admin:permissions:edit", kwargs={"pk": test_role.pk}),
  45. data=create_data({"name": "Top Lel"}),
  46. )
  47. self.assertEqual(response.status_code, 302)
  48. test_role = Role.objects.get(name="Top Lel")
  49. response = self.client.get(reverse("misago:admin:permissions:index"))
  50. self.assertEqual(response.status_code, 200)
  51. self.assertContains(response, test_role.name)
  52. def test_editing_role_invalidates_acl_cache(self):
  53. self.client.post(
  54. reverse("misago:admin:permissions:new"),
  55. data=create_data({"name": "Test Role"}),
  56. )
  57. test_role = Role.objects.get(name="Test Role")
  58. with assert_invalidates_cache(ACL_CACHE):
  59. self.client.post(
  60. reverse("misago:admin:permissions:edit", kwargs={"pk": test_role.pk}),
  61. data=create_data({"name": "Top Lel"}),
  62. )
  63. def test_users_view(self):
  64. """users with this role view has no showstoppers"""
  65. response = self.client.post(
  66. reverse("misago:admin:permissions:new"),
  67. data=create_data({"name": "Test Role"}),
  68. )
  69. test_role = Role.objects.get(name="Test Role")
  70. response = self.client.get(
  71. reverse("misago:admin:permissions:users", kwargs={"pk": test_role.pk})
  72. )
  73. self.assertEqual(response.status_code, 302)
  74. def test_delete_view(self):
  75. """delete role view has no showstoppers"""
  76. self.client.post(
  77. reverse("misago:admin:permissions:new"),
  78. data=create_data({"name": "Test Role"}),
  79. )
  80. test_role = Role.objects.get(name="Test Role")
  81. response = self.client.post(
  82. reverse("misago:admin:permissions:delete", kwargs={"pk": test_role.pk})
  83. )
  84. self.assertEqual(response.status_code, 302)
  85. # Get the page twice so no alert is renderered on second request
  86. self.client.get(reverse("misago:admin:permissions:index"))
  87. response = self.client.get(reverse("misago:admin:permissions:index"))
  88. self.assertNotContains(response, test_role.name)
  89. def test_deleting_role_invalidates_acl_cache(self):
  90. self.client.post(
  91. reverse("misago:admin:permissions:new"),
  92. data=create_data({"name": "Test Role"}),
  93. )
  94. test_role = Role.objects.get(name="Test Role")
  95. with assert_invalidates_cache(ACL_CACHE):
  96. self.client.post(
  97. reverse("misago:admin:permissions:delete", kwargs={"pk": test_role.pk})
  98. )