test_admin_views.py 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. from django.contrib.auth import get_user_model
  2. from django.test import TestCase
  3. from django.urls import reverse
  4. from ..testutils import AdminTestCase
  5. from ..views import get_protected_namespace
  6. class FakeRequest(object):
  7. def __init__(self, path):
  8. self.path = path
  9. self.path_info = path
  10. class AdminProtectedNamespaceTests(TestCase):
  11. def test_valid_cases(self):
  12. """get_protected_namespace returns true for protected links"""
  13. links_prefix = reverse('misago:admin:index')
  14. TEST_CASES = (
  15. '',
  16. 'somewhere/',
  17. 'ejksajdlksajldjskajdlksajlkdas',
  18. )
  19. for case in TEST_CASES:
  20. request = FakeRequest(links_prefix + case)
  21. self.assertEqual(get_protected_namespace(request), 'misago:admin')
  22. def test_invalid_cases(self):
  23. """get_protected_namespace returns none for other links"""
  24. TEST_CASES = (
  25. '/',
  26. '/somewhere/',
  27. '/ejksajdlksajldjskajdlksajlkdas',
  28. )
  29. for case in TEST_CASES:
  30. request = FakeRequest(case)
  31. self.assertEqual(get_protected_namespace(request), None)
  32. class AdminLoginViewTests(TestCase):
  33. def test_login_returns_200_on_get(self):
  34. """unauthenticated request to admin index produces login form"""
  35. response = self.client.get(reverse('misago:admin:index'))
  36. self.assertContains(response, 'Sign in')
  37. self.assertContains(response, 'Username or e-mail')
  38. self.assertContains(response, 'Password')
  39. def test_login_returns_200_on_invalid_post(self):
  40. """form handles invalid data gracefully"""
  41. response = self.client.post(
  42. reverse('misago:admin:index'),
  43. data={'username': 'Nope', 'password': 'Nope'})
  44. self.assertContains(response, "Login or password is incorrect.")
  45. self.assertContains(response, "Sign in")
  46. self.assertContains(response, "Username or e-mail")
  47. self.assertContains(response, "Password")
  48. def test_login_denies_non_staff_non_superuser(self):
  49. """login rejects user thats non staff and non superuser"""
  50. User = get_user_model()
  51. user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  52. user.is_staff = False
  53. user.is_superuser = False
  54. user.save()
  55. response = self.client.post(
  56. reverse('misago:admin:index'),
  57. data={'username': 'Bob', 'password': 'Pass.123'})
  58. self.assertContains(response, "Your account does not have admin privileges.")
  59. def test_login_denies_non_staff_superuser(self):
  60. """login rejects user thats non staff and superuser"""
  61. User = get_user_model()
  62. user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  63. user.is_staff = False
  64. user.is_superuser = True
  65. user.save()
  66. response = self.client.post(
  67. reverse('misago:admin:index'),
  68. data={'username': 'Bob', 'password': 'Pass.123'})
  69. self.assertContains(response, "Your account does not have admin privileges.")
  70. def test_login_signs_in_staff_non_superuser(self):
  71. """login passess user thats staff and non superuser"""
  72. User = get_user_model()
  73. user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  74. user.is_staff = True
  75. user.is_superuser = False
  76. user.save()
  77. response = self.client.post(
  78. reverse('misago:admin:index'),
  79. data={'username': 'Bob', 'password': 'Pass.123'})
  80. self.assertEqual(response.status_code, 302)
  81. def test_login_signs_in_staff_superuser(self):
  82. """login passess user thats staff and superuser"""
  83. User = get_user_model()
  84. user = User.objects.create_user('Bob', 'bob@test.com', 'Pass.123')
  85. user.is_staff = True
  86. user.is_superuser = True
  87. user.save()
  88. response = self.client.post(
  89. reverse('misago:admin:index'),
  90. data={'username': 'Bob', 'password': 'Pass.123'})
  91. self.assertEqual(response.status_code, 302)
  92. class AdminLogoutTests(AdminTestCase):
  93. def test_admin_logout(self):
  94. """admin logout logged from admin only"""
  95. response = self.client.post(reverse('misago:admin:logout'))
  96. self.assertEqual(response.status_code, 302)
  97. response = self.client.get(reverse('misago:admin:index'))
  98. self.assertContains(response, "Your admin session has been closed.")
  99. response = self.client.get(reverse('misago:index'))
  100. self.assertContains(response, self.user.username)
  101. def test_complete_logout(self):
  102. """complete logout logged from both admin and site"""
  103. response = self.client.post(reverse('misago:logout'))
  104. self.assertEqual(response.status_code, 302)
  105. response = self.client.get(reverse('misago:admin:index'))
  106. self.assertContains(response, "Sign in")
  107. response = self.client.get(reverse('misago:index'))
  108. self.assertContains(response, "Sign in")
  109. class AdminViewAccessTests(AdminTestCase):
  110. def test_admin_denies_non_staff_non_superuser(self):
  111. """admin middleware rejects user thats non staff and non superuser"""
  112. self.user.is_staff = False
  113. self.user.is_superuser = False
  114. self.user.save()
  115. response = self.client.get(reverse('misago:admin:index'))
  116. self.assertContains(response, "Sign in")
  117. def test_admin_denies_non_staff_superuser(self):
  118. """admin middleware rejects user thats non staff and superuser"""
  119. self.user.is_staff = False
  120. self.user.is_superuser = True
  121. self.user.save()
  122. response = self.client.get(reverse('misago:admin:index'))
  123. self.assertContains(response, "Sign in")
  124. def test_admin_passess_in_staff_non_superuser(self):
  125. """admin middleware passess user thats staff and non superuser"""
  126. self.user.is_staff = True
  127. self.user.is_superuser = False
  128. self.user.save()
  129. response = self.client.get(reverse('misago:admin:index'))
  130. self.assertContains(response, self.user.username)
  131. def test_admin_passess_in_staff_superuser(self):
  132. """admin middleware passess user thats staff and superuser"""
  133. self.user.is_staff = True
  134. self.user.is_superuser = True
  135. self.user.save()
  136. response = self.client.get(reverse('misago:admin:index'))
  137. self.assertContains(response, self.user.username)
  138. class AdminIndexViewTests(AdminTestCase):
  139. def test_view_returns_200(self):
  140. """admin index view returns 200"""
  141. response = self.client.get(reverse('misago:admin:index'))
  142. self.assertContains(response, self.user.username)