diff --git a/aurweb/packages/requests.py b/aurweb/packages/requests.py index d68f9688..bb21ed9e 100644 --- a/aurweb/packages/requests.py +++ b/aurweb/packages/requests.py @@ -102,10 +102,6 @@ def update_closure_comment(pkgbase: PackageBase, reqtype_id: int, def verify_orphan_request(user: User, pkgbase: PackageBase): """ Verify that an undue orphan request exists in `requests`. """ - is_maint = user == pkgbase.Maintainer - if is_maint: - return True - requests = pkgbase.requests.filter( PackageRequest.ReqTypeID == ORPHAN_ID) for pkgreq in requests: diff --git a/aurweb/routers/packages.py b/aurweb/routers/packages.py index e8455fec..08e1ff58 100644 --- a/aurweb/routers/packages.py +++ b/aurweb/routers/packages.py @@ -924,9 +924,9 @@ async def pkgbase_unvote(request: Request, name: str): def pkgbase_disown_instance(request: Request, pkgbase: models.PackageBase): disowner = request.user notifs = [notify.DisownNotification(disowner.ID, pkgbase.ID)] - notifs += handle_request(request, ORPHAN_ID, pkgbase) if disowner != pkgbase.Maintainer: + notifs += handle_request(request, ORPHAN_ID, pkgbase) with db.begin(): pkgbase.Maintainer = None else: diff --git a/test/test_requests.py b/test/test_requests.py index 867a64a0..8228e171 100644 --- a/test/test_requests.py +++ b/test/test_requests.py @@ -476,6 +476,33 @@ def test_orphan_request(client: TestClient, user: User, tu_user: User, assert re.match(subj, email.headers.get("Subject")) +def test_request_post_orphan_autogenerated_closure(client: TestClient, + tu_user: User, + pkgbase: PackageBase, + pkgreq: PackageRequest): + idle_time = config.getint("options", "request_idle_time") + now = int(datetime.utcnow().timestamp()) + with db.begin(): + pkgreq.ReqTypeID = ORPHAN_ID + # Set the request time so it's seen as due (idle_time has passed). + pkgreq.RequestTS = now - idle_time - 10 + + endpoint = f"/pkgbase/{pkgbase.Name}/disown" + data = {"confirm": True} + with client as request: + resp = request.post(endpoint, data=data, cookies=tu_user.cookies) + assert resp.status_code == int(HTTPStatus.SEE_OTHER) + assert resp.headers.get("location") == f"/pkgbase/{pkgbase.Name}" + + assert Email.count() == 1 + email = Email(1) + expr = r"^\[PRQ#\d+\] Orphan Request for .+ Accepted$" + assert re.match(expr, email.headers.get("Subject")) + + expr = r"\[Autogenerated\] Accepted orphan for .+\." + assert re.search(expr, email.body) + + def test_request_post_orphan_autoaccept(client: TestClient, auser: User, pkgbase: PackageBase, caplog: pytest.LogCaptureFixture): @@ -526,10 +553,10 @@ def test_orphan_as_maintainer(client: TestClient, auser: User, assert resp.status_code == int(HTTPStatus.SEE_OTHER) assert resp.headers.get("location") == f"/pkgbase/{pkgbase.Name}" - assert Email.count() == 1 - email = Email(1) - expr = r"^\[PRQ#\d+\] Orphan Request for [^ ]+ Accepted$" - assert re.match(expr, email.headers.get("Subject")) + # As the pkgbase maintainer, disowning the package just ends up + # either promoting the lowest priority comaintainer or removing + # the associated maintainer relationship altogether. + assert pkgbase.Maintainer is None def test_orphan_without_requests(client: TestClient, tu_user: User,