diff --git a/swh/web/admin/origin_save.py b/swh/web/admin/origin_save.py --- a/swh/web/admin/origin_save.py +++ b/swh/web/admin/origin_save.py @@ -3,6 +3,8 @@ # License: GNU Affero General Public License version 3, or any later version # See top-level LICENSE file for more information +import json + from django.conf import settings from django.contrib.admin.views.decorators import staff_member_required from django.core.exceptions import ObjectDoesNotExist @@ -188,7 +190,9 @@ sor = SaveOriginRequest.objects.get( visit_type=visit_type, origin_url=origin_url, status=SAVE_REQUEST_PENDING ) + sor.status = SAVE_REQUEST_REJECTED + sor.note = json.loads(request.body).get("note") sor.save() return HttpResponse(status=200) diff --git a/swh/web/tests/admin/test_origin_save.py b/swh/web/tests/admin/test_origin_save.py --- a/swh/web/tests/admin/test_origin_save.py +++ b/swh/web/tests/admin/test_origin_save.py @@ -161,6 +161,37 @@ response = check_http_get_response(client, save_request_url, status_code=200) assert response.data[0]["save_request_status"] == SAVE_REQUEST_REJECTED + assert response.data[0]["note"] is None + + +def test_reject_pending_save_request_with_note(client, staff_user, swh_scheduler): + + visit_type = "git" + origin_url = "https://wikipedia.com" + + save_request_url = reverse( + "api-1-save-origin", + url_args={"visit_type": visit_type, "origin_url": origin_url}, + ) + + response = check_http_post_response(client, save_request_url, status_code=200) + assert response.data["save_request_status"] == SAVE_REQUEST_PENDING + + reject_request_url = reverse( + "admin-origin-save-request-reject", + url_args={"visit_type": visit_type, "origin_url": origin_url}, + ) + + data = {"note": "The URL does not target a git repository"} + + client.force_login(staff_user) + response = check_http_post_response( + client, reject_request_url, status_code=200, data=data + ) + + response = check_http_get_response(client, save_request_url, status_code=200) + assert response.data[0]["save_request_status"] == SAVE_REQUEST_REJECTED + assert response.data[0]["note"] == data["note"] def test_remove_save_request(client, staff_user):