test_errorpages.py 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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, encode_json_html("<p>Banned for test!</p>"), status_code=403)
  21. def test_permission_denied_returns_403(self):
  22. """permission_denied error page has no show-stoppers"""
  23. response = self.client.get(reverse('raise-misago-403'))
  24. self.assertContains(response, "Page not available", status_code=403)
  25. def test_page_not_found_returns_404(self):
  26. """page_not_found error page has no show-stoppers"""
  27. response = self.client.get(reverse('raise-misago-404'))
  28. self.assertContains(response, "Page not found", status_code=404)
  29. def test_not_allowed_returns_405(self):
  30. """not allowed error page has no showstoppers"""
  31. response = self.client.get(reverse('raise-misago-405'))
  32. self.assertContains(response, "Wrong way", status_code=405)
  33. @override_settings(ROOT_URLCONF='misago.core.testproject.urlswitherrorhandlers')
  34. class CustomErrorPagesTests(TestCase):
  35. def setUp(self):
  36. self.misago_request = RequestFactory().get(reverse('misago:index'))
  37. self.site_request = RequestFactory().get(reverse('raise-403'))
  38. self.misago_request.user = AnonymousUser()
  39. self.site_request.user = AnonymousUser()
  40. self.misago_request.include_frontend_context = True
  41. self.site_request.include_frontend_context = True
  42. self.misago_request.frontend_context = {
  43. 'auth': {},
  44. 'conf': {},
  45. 'store': {},
  46. 'url': {},
  47. }
  48. self.site_request.frontend_context = {
  49. 'auth': {},
  50. 'conf': {},
  51. 'store': {},
  52. 'url': {},
  53. }
  54. def test_shared_403_decorator(self):
  55. """shared_403_decorator calls correct error handler"""
  56. response = self.client.get(reverse('raise-misago-403'))
  57. self.assertEqual(response.status_code, 403)
  58. response = self.client.get(reverse('raise-403'))
  59. self.assertContains(response, "Custom 403", status_code=403)
  60. response = mock_custom_403_error_page(self.misago_request, PermissionDenied())
  61. self.assertNotContains(response, "Custom 403", status_code=403)
  62. response = mock_custom_403_error_page(self.site_request, PermissionDenied())
  63. self.assertContains(response, "Custom 403", status_code=403)
  64. def test_shared_404_decorator(self):
  65. """shared_404_decorator calls correct error handler"""
  66. response = self.client.get(reverse('raise-misago-404'))
  67. self.assertEqual(response.status_code, 404)
  68. response = self.client.get(reverse('raise-404'))
  69. self.assertContains(response, "Custom 404", status_code=404)
  70. response = mock_custom_404_error_page(self.misago_request, Http404())
  71. self.assertNotContains(response, "Custom 404", status_code=404)
  72. response = mock_custom_404_error_page(self.site_request, Http404())
  73. self.assertContains(response, "Custom 404", status_code=404)