Merge branch 'feature/error-handling-jinja' into 'master'

Add Jinja error handling details from #117

See merge request cara/cara!167
This commit is contained in:
Gabriella Azzopardi 2021-05-10 17:29:05 +00:00
commit 87c7733bb5
2 changed files with 31 additions and 0 deletions

View file

@ -66,6 +66,7 @@ class BaseRequestHandler(RequestHandler):
print(traceback.format_exc())
self.finish(template.render(
user=self.current_user,
active_page='Error',
contents=contents
))
@ -78,6 +79,7 @@ class Missing404Handler(BaseRequestHandler):
"page.html.j2")
self.finish(template.render(
user=self.current_user,
active_page='Error',
contents='Unfortunately the page you were looking for does not exist.<br><br><br><br>'
))
@ -185,6 +187,7 @@ def make_app(
loader = jinja2.FileSystemLoader([str(path) for path in templates_directories])
template_environment = jinja2.Environment(
loader=loader,
undefined=jinja2.StrictUndefined, # fail when rendering any undefined template context variable
)
template_environment.globals['common_text'] = markdown_tools.extract_rendered_markdown_blocks(

View file

@ -31,6 +31,17 @@ async def test_user_guide(http_server_client):
assert resp.code == 200
@pytest.mark.xfail(reason="about page not yet implemented")
async def test_about(http_server_client):
resp = await http_server_client.fetch('/about')
assert resp.code == 200
async def test_404(http_server_client):
resp = await http_server_client.fetch('/doesnt-exist', raise_error=False)
assert resp.code == 404
class TestBasicApp(tornado.testing.AsyncHTTPTestCase):
def get_app(self):
return cara.apps.calculator.make_app()
@ -83,3 +94,20 @@ async def test_invalid_compressed_url(http_server_client, baseline_form):
raise_error=False,
)
assert response.code == 400
class TestError500(tornado.testing.AsyncHTTPTestCase):
def get_app(self):
class ProcessingErrorPage(cara.apps.calculator.BaseRequestHandler):
def get(self):
raise ValueError('some unexpected error')
app = cara.apps.calculator.make_app()
page = [
(r'/', ProcessingErrorPage),
]
return tornado.web.Application(page, **app.settings)
def test_500(self):
response = self.fetch('/')
assert response.code == 500
assert 'Unfortunately an error occurred when processing your request' in response.body.decode()