diff --git a/swh/web/misc/origin_save.py b/swh/web/misc/origin_save.py --- a/swh/web/misc/origin_save.py +++ b/swh/web/misc/origin_save.py @@ -7,7 +7,9 @@ from django.conf.urls import url from django.core.paginator import Paginator -from django.http import HttpResponse, HttpResponseForbidden +from django.http import ( + HttpResponse, HttpResponseForbidden, HttpResponseServerError +) from django.shortcuts import render from rest_framework.decorators import api_view, authentication_classes @@ -45,6 +47,9 @@ except ForbiddenExc as exc: return HttpResponseForbidden(json.dumps({'detail': str(exc)}), content_type='application/json') + except Exception as exc: + return HttpResponseServerError(json.dumps({'detail': str(exc)}), + content_type='application/json') def _visit_save_types_list(request): diff --git a/swh/web/tests/misc/test_origin_save.py b/swh/web/tests/misc/test_origin_save.py --- a/swh/web/tests/misc/test_origin_save.py +++ b/swh/web/tests/misc/test_origin_save.py @@ -62,6 +62,21 @@ assert resp.status_code == 429 +def test_save_request_form_server_error(client, mocker): + mock_create_save_origin_request = mocker.patch( + 'swh.web.misc.origin_save.create_save_origin_request') + mock_create_save_origin_request.side_effect = Exception('Server error') + + url = reverse('origin-save-request', + url_args={'visit_type': visit_type, + 'origin_url': origin['url']}) + + data = _get_csrf_token(client, reverse('origin-save')) + + resp = client.post(url, data=data) + assert resp.status_code == 500 + + def test_old_save_url_redirection(client): url = reverse('browse-origin-save') resp = client.get(url)