mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
fix: allow co-maintainers to [un]pin comments on a package
Closes #279 Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
parent
35e7486ea3
commit
708ade4dbf
6 changed files with 47 additions and 8 deletions
|
@ -52,3 +52,11 @@ class PackageComment(Base):
|
|||
|
||||
if self.RenderedComment is None:
|
||||
self.RenderedComment = str()
|
||||
|
||||
def maintainers(self):
|
||||
return list(filter(
|
||||
lambda e: e is not None,
|
||||
[self.PackageBase.Maintainer] + [
|
||||
c.User for c in self.PackageBase.comaintainers
|
||||
]
|
||||
))
|
||||
|
|
|
@ -25,9 +25,11 @@ def make_context(request: Request, pkgbase: PackageBase) -> Dict[str, Any]:
|
|||
context["git_clone_uri_anon"] = config.get("options", "git_clone_uri_anon")
|
||||
context["git_clone_uri_priv"] = config.get("options", "git_clone_uri_priv")
|
||||
context["pkgbase"] = pkgbase
|
||||
context["comaintainers"] = pkgbase.comaintainers.order_by(
|
||||
context["comaintainers"] = [
|
||||
c.User for c in pkgbase.comaintainers.order_by(
|
||||
PackageComaintainer.Priority.asc()
|
||||
).all()
|
||||
]
|
||||
context["packages_count"] = pkgbase.packages.count()
|
||||
context["keywords"] = pkgbase.keywords
|
||||
context["comments"] = pkgbase.comments.order_by(
|
||||
|
|
|
@ -318,7 +318,7 @@ async def pkgbase_comment_pin(request: Request, name: str, id: int,
|
|||
comment = get_pkgbase_comment(pkgbase, id)
|
||||
|
||||
has_cred = request.user.has_credential(creds.COMMENT_PIN,
|
||||
approved=[pkgbase.Maintainer])
|
||||
approved=comment.maintainers())
|
||||
if not has_cred:
|
||||
_ = l10n.get_translator_for_request(request)
|
||||
raise HTTPException(
|
||||
|
@ -353,7 +353,7 @@ async def pkgbase_comment_unpin(request: Request, name: str, id: int,
|
|||
comment = get_pkgbase_comment(pkgbase, id)
|
||||
|
||||
has_cred = request.user.has_credential(creds.COMMENT_PIN,
|
||||
approved=[pkgbase.Maintainer])
|
||||
approved=comment.maintainers())
|
||||
if not has_cred:
|
||||
_ = l10n.get_translator_for_request(request)
|
||||
raise HTTPException(
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
|
||||
{% endif %}
|
||||
|
||||
{% if request.user.has_credential(creds.COMMENT_PIN, approved=[comment.PackageBase.Maintainer]) %}
|
||||
{% if request.user.has_credential(creds.COMMENT_PIN, approved=comment.maintainers()) %}
|
||||
{% if comment.PinnedTS %}
|
||||
<form class="pin-comment-form"
|
||||
method="post"
|
||||
|
|
|
@ -114,7 +114,7 @@
|
|||
</a>
|
||||
{% set len = comaintainers | length %}
|
||||
{% if comaintainers %}
|
||||
({% for co in comaintainers %}<a href="{{ co.User | account_url }}">{{ co.User }}</a>{% if loop.index < len %}, {% endif %}{% endfor %})
|
||||
({% for co in comaintainers %}<a href="{{ co | account_url }}">{{ co }}</a>{% if loop.index < len %}, {% endif %}{% endfor %})
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{{ pkgbase.Maintainer.Username | default("None" | tr) }}
|
||||
|
|
|
@ -534,6 +534,35 @@ def test_pkgbase_comment_undelete_not_found(client: TestClient,
|
|||
assert resp.status_code == int(HTTPStatus.NOT_FOUND)
|
||||
|
||||
|
||||
def test_pkgbase_comment_pin_as_co(client: TestClient, package: Package,
|
||||
comment: PackageComment):
|
||||
comaint = create_user("comaint1")
|
||||
|
||||
with db.begin():
|
||||
db.create(PackageComaintainer, PackageBase=package.PackageBase,
|
||||
User=comaint, Priority=1)
|
||||
|
||||
# Pin the comment.
|
||||
pkgbasename = package.PackageBase.Name
|
||||
endpoint = f"/pkgbase/{pkgbasename}/comments/{comment.ID}/pin"
|
||||
cookies = {"AURSID": comaint.login(Request(), "testPassword")}
|
||||
with client as request:
|
||||
resp = request.post(endpoint, cookies=cookies)
|
||||
assert resp.status_code == int(HTTPStatus.SEE_OTHER)
|
||||
|
||||
# Assert that PinnedTS got set.
|
||||
assert comment.PinnedTS > 0
|
||||
|
||||
# Unpin the comment we just pinned.
|
||||
endpoint = f"/pkgbase/{pkgbasename}/comments/{comment.ID}/unpin"
|
||||
with client as request:
|
||||
resp = request.post(endpoint, cookies=cookies)
|
||||
assert resp.status_code == int(HTTPStatus.SEE_OTHER)
|
||||
|
||||
# Let's assert that PinnedTS was unset.
|
||||
assert comment.PinnedTS == 0
|
||||
|
||||
|
||||
def test_pkgbase_comment_pin(client: TestClient,
|
||||
maintainer: User,
|
||||
package: Package,
|
||||
|
|
Loading…
Add table
Reference in a new issue