From b9df7541b3a6be400dd2249772833b87ebcf85d0 Mon Sep 17 00:00:00 2001 From: moson-mo Date: Tue, 14 Mar 2023 11:17:45 +0100 Subject: [PATCH] fix: add comments in email for direct deletion/merge TUs and Devs can delete and merge packages directly. Currently the comments they enter, don't end up in the ML notification. Include the comment in the notifications for direct deletion / merge Signed-off-by: moson-mo --- aurweb/packages/requests.py | 8 ++++-- aurweb/pkgbase/actions.py | 4 +-- test/test_requests.py | 52 +++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 4 deletions(-) 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,