From fee7e41ae48594e90f5efb945684799b76f56772 Mon Sep 17 00:00:00 2001 From: Kevin Morris Date: Thu, 20 Jan 2022 09:04:55 -0800 Subject: [PATCH 1/3] fix(routers.html): show comaintained packages which have been flagged Signed-off-by: Kevin Morris --- aurweb/routers/html.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/aurweb/routers/html.py b/aurweb/routers/html.py index 74901762..74df62f7 100644 --- a/aurweb/routers/html.py +++ b/aurweb/routers/html.py @@ -138,9 +138,15 @@ async def index(request: Request): packages = db.query(models.Package).join(models.PackageBase) maintained = packages.join( - models.User, models.PackageBase.MaintainerUID == models.User.ID + models.PackageComaintainer, + models.PackageComaintainer.PackageBaseID == models.PackageBase.ID, + isouter=True + ).join( + models.User, + or_(models.PackageBase.MaintainerUID == models.User.ID, + models.PackageComaintainer.UsersID == models.User.ID) ).filter( - models.PackageBase.MaintainerUID == request.user.ID + models.User.ID == request.user.ID ) # Packages maintained by the user that have been flagged. From 2c4f4155d623298859f539af4c8415ecca6f8fe1 Mon Sep 17 00:00:00 2001 From: Kevin Morris Date: Thu, 20 Jan 2022 09:14:30 -0800 Subject: [PATCH 2/3] fix(templates): Maintainer field does not require auth Signed-off-by: Kevin Morris --- templates/partials/packages/details.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/partials/packages/details.html b/templates/partials/packages/details.html index 6dc8ae77..7467f9ba 100644 --- a/templates/partials/packages/details.html +++ b/templates/partials/packages/details.html @@ -108,7 +108,7 @@ {{ "Maintainer" | tr }}: - {% if request.user.is_authenticated() and pkgbase.Maintainer %} + {% if pkgbase.Maintainer %} {{ pkgbase.Maintainer.Username }} From 62388b4161077c8df1ac29c14db92bcd6c1124d1 Mon Sep 17 00:00:00 2001 From: Kevin Morris Date: Thu, 20 Jan 2022 09:15:20 -0800 Subject: [PATCH 3/3] fix(package/pkgbase view): include comaintainers in Maintainer field Signed-off-by: Kevin Morris --- aurweb/pkgbase/util.py | 3 +++ templates/partials/packages/details.html | 5 ++++- test/test_pkgbase_routes.py | 25 ++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/aurweb/pkgbase/util.py b/aurweb/pkgbase/util.py index 76b8a8c9..fbfcd869 100644 --- a/aurweb/pkgbase/util.py +++ b/aurweb/pkgbase/util.py @@ -25,6 +25,9 @@ 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( + PackageComaintainer.Priority.asc() + ).all() context["packages_count"] = pkgbase.packages.count() context["keywords"] = pkgbase.keywords context["comments"] = pkgbase.comments.order_by( diff --git a/templates/partials/packages/details.html b/templates/partials/packages/details.html index 7467f9ba..1c4d01d6 100644 --- a/templates/partials/packages/details.html +++ b/templates/partials/packages/details.html @@ -105,13 +105,16 @@ {% endif %} - + {{ "Maintainer" | tr }}: {% if pkgbase.Maintainer %} {{ pkgbase.Maintainer.Username }} + {% if comaintainers %} + ({% for co in comaintainers %}{{ co.User }}{% endfor %}) + {% endif %} {% else %} {{ pkgbase.Maintainer.Username | default("None" | tr) }} {% endif %} diff --git a/test/test_pkgbase_routes.py b/test/test_pkgbase_routes.py index 17f69811..3f5a791a 100644 --- a/test/test_pkgbase_routes.py +++ b/test/test_pkgbase_routes.py @@ -253,6 +253,31 @@ def test_pkgbase(client: TestClient, package: Package): assert pkgs[i].text.strip() == name +def test_pkgbase_maintainer(client: TestClient, user: User, maintainer: User, + package: Package): + """ + Test that the Maintainer field is beind displayed correctly. + + Co-maintainers are displayed, if they exist, within a parens after + the maintainer. + """ + with db.begin(): + db.create(PackageComaintainer, User=user, + PackageBase=package.PackageBase, + Priority=1) + + with client as request: + resp = request.get(f"/pkgbase/{package.Name}") + assert resp.status_code == int(HTTPStatus.OK) + + root = parse_root(resp.text) + + maint = root.xpath('//table[@id="pkginfo"]/tr[@class="pkgmaint"]/td')[0] + maint, comaint = maint.xpath('./a') + assert maint.text.strip() == maintainer.Username + assert comaint.text.strip() == user.Username + + def test_pkgbase_voters(client: TestClient, tu_user: User, package: Package): pkgbase = package.PackageBase endpoint = f"/pkgbase/{pkgbase.Name}/voters"