feat: add branded error pages
This commit is contained in:
28
backend/workflows/tests/error_test_urls.py
Normal file
28
backend/workflows/tests/error_test_urls.py
Normal file
@@ -0,0 +1,28 @@
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.http import HttpResponse
|
||||
from django.urls import include, path
|
||||
|
||||
|
||||
def ok_view(request):
|
||||
return HttpResponse('ok')
|
||||
|
||||
|
||||
def deny_view(request):
|
||||
raise PermissionDenied('forbidden')
|
||||
|
||||
|
||||
def explode_view(request):
|
||||
raise RuntimeError('boom')
|
||||
|
||||
|
||||
handler400 = 'workflows.error_views.bad_request'
|
||||
handler403 = 'workflows.error_views.permission_denied'
|
||||
handler404 = 'workflows.error_views.not_found'
|
||||
handler500 = 'workflows.error_views.server_error'
|
||||
|
||||
urlpatterns = [
|
||||
path('healthz/', ok_view, name='healthz'),
|
||||
path('raise-403/', deny_view, name='raise_403'),
|
||||
path('raise-500/', explode_view, name='raise_500'),
|
||||
path('', include('workflows.urls')),
|
||||
]
|
||||
62
backend/workflows/tests/test_error_pages.py
Normal file
62
backend/workflows/tests/test_error_pages.py
Normal file
@@ -0,0 +1,62 @@
|
||||
from django.test import Client, RequestFactory, TestCase, override_settings
|
||||
|
||||
from workflows.error_views import csrf_failure
|
||||
|
||||
|
||||
@override_settings(
|
||||
DEBUG=False,
|
||||
ROOT_URLCONF='workflows.tests.error_test_urls',
|
||||
ALLOWED_HOSTS=['testserver'],
|
||||
)
|
||||
class ErrorPageTests(TestCase):
|
||||
def setUp(self):
|
||||
self.client = Client()
|
||||
self.client.raise_request_exception = False
|
||||
|
||||
def test_custom_404_page_is_rendered(self):
|
||||
response = self.client.get('/missing-page/')
|
||||
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.assertTemplateUsed(response, 'workflows/errors/error_page.html')
|
||||
self.assertContains(response, '404', status_code=404)
|
||||
|
||||
def test_custom_403_page_is_rendered(self):
|
||||
response = self.client.get('/raise-403/')
|
||||
|
||||
self.assertEqual(response.status_code, 403)
|
||||
self.assertTemplateUsed(response, 'workflows/errors/error_page.html')
|
||||
self.assertContains(response, '403', status_code=403)
|
||||
|
||||
def test_custom_500_page_is_rendered(self):
|
||||
response = self.client.get('/raise-500/')
|
||||
|
||||
self.assertEqual(response.status_code, 500)
|
||||
self.assertTemplateUsed(response, 'workflows/errors/error_page.html')
|
||||
self.assertContains(response, '500', status_code=500)
|
||||
|
||||
def test_csrf_failure_view_uses_custom_400_page(self):
|
||||
request = RequestFactory().post('/test/')
|
||||
|
||||
response = csrf_failure(request)
|
||||
|
||||
self.assertEqual(response.status_code, 400)
|
||||
self.assertContains(response, '400', status_code=400)
|
||||
|
||||
|
||||
@override_settings(
|
||||
DEBUG=True,
|
||||
FORCE_BRANDED_ERROR_PAGES=True,
|
||||
ROOT_URLCONF='workflows.tests.error_test_urls',
|
||||
ALLOWED_HOSTS=['testserver'],
|
||||
)
|
||||
class ForcedBrandedErrorPageTests(TestCase):
|
||||
def setUp(self):
|
||||
self.client = Client()
|
||||
self.client.raise_request_exception = False
|
||||
|
||||
def test_missing_url_uses_branded_404_even_with_debug_enabled(self):
|
||||
response = self.client.get('/missing-page/')
|
||||
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.assertTemplateUsed(response, 'workflows/errors/error_page.html')
|
||||
self.assertContains(response, '404', status_code=404)
|
||||
Reference in New Issue
Block a user