test_admin_views.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. from django.test import TestCase
  2. from django.urls import reverse
  3. from ...users.test import create_test_user
  4. from ..test import AdminTestCase
  5. from ..views import get_protected_namespace
  6. class MockRequest:
  7. def __init__(self, path):
  8. self.path = path
  9. class AdminProtectedNamespaceTests(TestCase):
  10. def test_valid_cases(self):
  11. """get_protected_namespace returns true for protected links"""
  12. TEST_CASES = ("", "somewhere/", "ejksajdlksajldjskajdlksajlkdas")
  13. links_prefix = reverse("misago:admin:index")
  14. for case in TEST_CASES:
  15. request = MockRequest(links_prefix + case)
  16. self.assertEqual(get_protected_namespace(request), "misago:admin")
  17. def test_invalid_cases(self):
  18. """get_protected_namespace returns none for other links"""
  19. TEST_CASES = ("/", "/somewhere/", "/ejksajdlksajldjskajdlksajlkdas")
  20. for case in TEST_CASES:
  21. request = MockRequest(case)
  22. self.assertEqual(get_protected_namespace(request), None)
  23. class AdminViewAccessTests(AdminTestCase):
  24. def test_admin_denies_non_staff_non_superuser(self):
  25. """admin middleware rejects user thats non staff and non superuser"""
  26. self.user.is_staff = False
  27. self.user.is_superuser = False
  28. self.user.save()
  29. response = self.client.get(reverse("misago:admin:index"))
  30. self.assertContains(response, "Sign in")
  31. def test_admin_denies_non_staff_superuser(self):
  32. """admin middleware rejects user thats non staff and superuser"""
  33. self.user.is_staff = False
  34. self.user.is_superuser = True
  35. self.user.save()
  36. response = self.client.get(reverse("misago:admin:index"))
  37. self.assertContains(response, "Sign in")
  38. def test_admin_passess_in_staff_non_superuser(self):
  39. """admin middleware passess user thats staff and non superuser"""
  40. self.user.is_staff = True
  41. self.user.is_superuser = False
  42. self.user.save()
  43. response = self.client.get(reverse("misago:admin:index"))
  44. self.assertContains(response, self.user.username)
  45. def test_admin_passess_in_staff_superuser(self):
  46. """admin middleware passess user thats staff and superuser"""
  47. self.user.is_staff = True
  48. self.user.is_superuser = True
  49. self.user.save()
  50. response = self.client.get(reverse("misago:admin:index"))
  51. self.assertContains(response, self.user.username)
  52. class Admin404ErrorTests(AdminTestCase):
  53. def test_list_search_unicode_handling(self):
  54. """querystring creation handles unicode strings"""
  55. test_link = "%stotally-errored/" % reverse("misago:admin:index")
  56. response = self.client.get(test_link)
  57. self.assertContains(
  58. response, "Requested page could not be found.", status_code=404
  59. )
  60. class AdminGenericViewsTests(AdminTestCase):
  61. def test_view_redirected_queryvar(self):
  62. """querystring redirected value is handled"""
  63. test_link = reverse("misago:admin:users:accounts:index")
  64. # request resulted in redirect with redirected=1 bit
  65. response = self.client.get("%s?username=lorem" % test_link)
  66. self.assertEqual(response.status_code, 302)
  67. self.assertIn("redirected=1", response["location"])
  68. # request with flag muted redirect
  69. response = self.client.get("%s?redirected=1&username=lorem" % test_link)
  70. self.assertEqual(response.status_code, 200)
  71. def test_list_search_unicode_handling(self):
  72. """querystring creation handles unicode strings"""
  73. test_link = reverse("misago:admin:users:accounts:index")
  74. response = self.client.get("%s?redirected=1&username=%s" % (test_link, "łut"))
  75. self.assertEqual(response.status_code, 200)