test_errorpages.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. from django.core.exceptions import PermissionDenied
  2. from django.http import Http404
  3. from django.test import Client, TestCase, override_settings
  4. from django.test.client import RequestFactory
  5. from django.urls import reverse
  6. from misago.core.testproject.views import mock_custom_403_error_page, mock_custom_404_error_page
  7. from misago.core.utils import encode_json_html
  8. from misago.users.models import AnonymousUser
  9. class CSRFErrorViewTests(TestCase):
  10. def test_csrf_failure(self):
  11. """csrf_failure error page has no show-stoppers"""
  12. csrf_client = Client(enforce_csrf_checks=True)
  13. response = csrf_client.post(reverse('misago:index'), data={'eric': 'fish'})
  14. self.assertContains(response, "Request blocked", status_code=403)
  15. @override_settings(ROOT_URLCONF='misago.core.testproject.urls')
  16. class ErrorPageViewsTests(TestCase):
  17. def test_banned_returns_403(self):
  18. """banned error page has no show-stoppers"""
  19. response = self.client.get(reverse('raise-misago-banned'))
  20. self.assertContains(response, "misago:error-banned", status_code=403)
  21. self.assertContains(response, "<p>Banned for test!</p>", status_code=403)
  22. self.assertContains(response, encode_json_html("<p>Banned for test!</p>"), status_code=403)
  23. def test_permission_denied_returns_403(self):
  24. """permission_denied error page has no show-stoppers"""
  25. response = self.client.get(reverse('raise-misago-403'))
  26. self.assertContains(response, "Page not available", status_code=403)
  27. def test_page_not_found_returns_404(self):
  28. """page_not_found error page has no show-stoppers"""
  29. response = self.client.get(reverse('raise-misago-404'))
  30. self.assertContains(response, "Page not found", status_code=404)
  31. def test_not_allowed_returns_405(self):
  32. """not allowed error page has no showstoppers"""
  33. response = self.client.get(reverse('raise-misago-405'))
  34. self.assertContains(response, "Wrong way", status_code=405)
  35. def test_social_auth_failed_returns_403(self):
  36. """social auth's failed error returns 403"""
  37. response = self.client.get(reverse('raise-social-auth-failed'))
  38. self.assertContains(response, "page-error-social", status_code=403)
  39. self.assertContains(response, "GitHub", status_code=403)
  40. def test_social_wrong_backend_returns_403(self):
  41. """social auth's wrong backend error returns 403"""
  42. response = self.client.get(reverse('raise-social-wrong-backend'))
  43. self.assertContains(response, "page-error-social", status_code=403)
  44. def test_social_not_allowed_to_disconnect_returns_403(self):
  45. """social auth's not allowed to disconnect error returns 403"""
  46. response = self.client.get(reverse('raise-social-not-allowed-to-disconnect'))
  47. self.assertContains(response, "page-error-social", status_code=403)
  48. def test_social_failed_message(self):
  49. """misago-specific social auth failed exception error page returns 403 with message"""
  50. response = self.client.get(reverse('raise-social-auth-failed-message'))
  51. self.assertContains(response, "page-error-social", status_code=403)
  52. self.assertContains(response, "This message will be shown to user!", status_code=403)
  53. def test_social_auth_banned(self):
  54. """misago-specific social auth banned exception error page returns 403 with ban message"""
  55. response = self.client.get(reverse('raise-social-auth-banned'))
  56. self.assertContains(response, "page-error-social", status_code=403)
  57. self.assertContains(response, "Banned in auth!", status_code=403)
  58. @override_settings(ROOT_URLCONF='misago.core.testproject.urlswitherrorhandlers')
  59. class CustomErrorPagesTests(TestCase):
  60. def setUp(self):
  61. self.misago_request = RequestFactory().get(reverse('misago:index'))
  62. self.site_request = RequestFactory().get(reverse('raise-403'))
  63. self.misago_request.user = AnonymousUser()
  64. self.site_request.user = AnonymousUser()
  65. self.misago_request.include_frontend_context = True
  66. self.site_request.include_frontend_context = True
  67. self.misago_request.frontend_context = {
  68. 'auth': {},
  69. 'conf': {},
  70. 'store': {},
  71. 'url': {},
  72. }
  73. self.site_request.frontend_context = {
  74. 'auth': {},
  75. 'conf': {},
  76. 'store': {},
  77. 'url': {},
  78. }
  79. def test_shared_403_decorator(self):
  80. """shared_403_decorator calls correct error handler"""
  81. response = self.client.get(reverse('raise-misago-403'))
  82. self.assertEqual(response.status_code, 403)
  83. response = self.client.get(reverse('raise-403'))
  84. self.assertContains(response, "Custom 403", status_code=403)
  85. response = mock_custom_403_error_page(self.misago_request, PermissionDenied())
  86. self.assertNotContains(response, "Custom 403", status_code=403)
  87. response = mock_custom_403_error_page(self.site_request, PermissionDenied())
  88. self.assertContains(response, "Custom 403", status_code=403)
  89. def test_shared_404_decorator(self):
  90. """shared_404_decorator calls correct error handler"""
  91. response = self.client.get(reverse('raise-misago-404'))
  92. self.assertEqual(response.status_code, 404)
  93. response = self.client.get(reverse('raise-404'))
  94. self.assertContains(response, "Custom 404", status_code=404)
  95. response = mock_custom_404_error_page(self.misago_request, Http404())
  96. self.assertNotContains(response, "Custom 404", status_code=404)
  97. response = mock_custom_404_error_page(self.site_request, Http404())
  98. self.assertContains(response, "Custom 404", status_code=404)