diff --git a/aurweb/packages/requests.py b/aurweb/packages/requests.py index c09082f5..be35a3d3 100644 --- a/aurweb/packages/requests.py +++ b/aurweb/packages/requests.py @@ -153,7 +153,11 @@ def close_pkgreq( @db.retry_deadlock def handle_request( - request: Request, reqtype_id: int, pkgbase: PackageBase, target: PackageBase = None + request: Request, + reqtype_id: int, + pkgbase: PackageBase, + target: PackageBase = None, + comments: str = str(), ) -> list[notify.Notification]: """ Handle package requests before performing an action. @@ -228,7 +232,7 @@ def handle_request( PackageBase=pkgbase, PackageBaseName=pkgbase.Name, Comments="Autogenerated by aurweb.", - ClosureComment=str(), + ClosureComment=comments, ) # If it's a merge request, set MergeBaseName to `target`.Name. diff --git a/aurweb/pkgbase/actions.py b/aurweb/pkgbase/actions.py index 56ba738d..00efc1ff 100644 --- a/aurweb/pkgbase/actions.py +++ b/aurweb/pkgbase/actions.py @@ -133,7 +133,7 @@ def pkgbase_delete_instance( request: Request, pkgbase: PackageBase, comments: str = str() ) -> list[notify.Notification]: notif = notify.DeleteNotification(request.user.ID, pkgbase.ID) - notifs = handle_request(request, DELETION_ID, pkgbase) + [notif] + notifs = handle_request(request, DELETION_ID, pkgbase, comments=comments) + [notif] _retry_delete(pkgbase, comments) @@ -181,7 +181,7 @@ def pkgbase_merge_instance( pkgbasename = str(pkgbase.Name) # Create notifications. - notifs = handle_request(request, MERGE_ID, pkgbase, target) + notifs = handle_request(request, MERGE_ID, pkgbase, target, comments) _retry_merge(pkgbase, target) diff --git a/test/test_requests.py b/test/test_requests.py index 18b860f2..eb05596c 100644 --- a/test/test_requests.py +++ b/test/test_requests.py @@ -479,6 +479,27 @@ def test_deletion_autorequest(client: TestClient, tu_user: User, pkgbase: Packag assert "[Autogenerated]" in email.body +def test_deletion_autorequest_with_comment( + client: TestClient, tu_user: User, pkgbase: PackageBase +): + """Test deleting a package without a request and a comment.""" + # `pkgreq`.ReqTypeID is already DELETION_ID. + endpoint = f"/pkgbase/{pkgbase.Name}/delete" + data = {"confirm": True, "comments": "deleted with comment"} + with client as request: + request.cookies = tu_user.cookies + resp = request.post(endpoint, data=data) + assert resp.status_code == int(HTTPStatus.SEE_OTHER) + + assert resp.headers.get("location") == "/packages" + assert Email.count() == 1 + + email = Email(1).parse() + subject = r"^\[PRQ#\d+\] Deletion Request for [^ ]+ Accepted$" + assert re.match(subject, email.headers.get("Subject")) + assert "deleted with comment" in email.body + + def test_merge_request( client: TestClient, user: User, @@ -568,6 +589,37 @@ def test_merge_autorequest( assert "[Autogenerated]" in email.body +def test_merge_autorequest_with_comment( + client: TestClient, + user: User, + tu_user: User, + pkgbase: PackageBase, + target: PackageBase, +): + """Test merging a package without a request.""" + with db.begin(): + pkgreq.ReqTypeID = MERGE_ID + pkgreq.MergeBaseName = target.Name + + # `pkgreq`.ReqTypeID is already DELETION_ID. + endpoint = f"/pkgbase/{pkgbase.Name}/merge" + data = {"into": target.Name, "confirm": True, "comments": "merged with comment"} + with client as request: + request.cookies = tu_user.cookies + resp = request.post(endpoint, data=data) + assert resp.status_code == int(HTTPStatus.SEE_OTHER) + assert resp.headers.get("location") == f"/pkgbase/{target.Name}" + + # Should've gotten one email with our comment + assert Email.count() == 1 + + # Test accepted merge request notification. + email = Email(1).parse() + subj = r"^\[PRQ#\d+\] Merge Request for [^ ]+ Accepted$" + assert re.match(subj, email.headers.get("Subject")) + assert "merged with comment" in email.body + + def test_orphan_request( client: TestClient, user: User,