mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
add /pkgbase/{name} route
Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
parent
ae3d302c47
commit
88569b6d09
4 changed files with 88 additions and 0 deletions
|
@ -96,3 +96,20 @@ async def package(request: Request, name: str) -> Response:
|
||||||
context["conflicts"] = conflicts
|
context["conflicts"] = conflicts
|
||||||
|
|
||||||
return render_template(request, "packages/show.html", context)
|
return render_template(request, "packages/show.html", context)
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/pkgbase/{name}")
|
||||||
|
async def package_base(request: Request, name: str) -> Response:
|
||||||
|
# Get the PackageBase.
|
||||||
|
pkgbase = get_pkgbase(name)
|
||||||
|
|
||||||
|
# If this is not a split package, redirect to /packages/{name}.
|
||||||
|
if pkgbase.packages.count() == 1:
|
||||||
|
return RedirectResponse(f"/packages/{name}",
|
||||||
|
status_code=int(HTTPStatus.SEE_OTHER))
|
||||||
|
|
||||||
|
# Add our base information.
|
||||||
|
context = await make_single_context(request, pkgbase)
|
||||||
|
context["packages"] = pkgbase.packages.all() # Doesn't need to be here.
|
||||||
|
|
||||||
|
return render_template(request, "pkgbase.html", context)
|
||||||
|
|
13
templates/partials/packages/pkgbase_metadata.html
Normal file
13
templates/partials/packages/pkgbase_metadata.html
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<div id="pkgs" class="listing">
|
||||||
|
<h3>Packages ({{ packages_count }})</h3>
|
||||||
|
<ul>
|
||||||
|
{% for result in packages %}
|
||||||
|
<li>
|
||||||
|
<a href="/packages/{{ result.Name }}/"
|
||||||
|
title="{{ 'View packages details for' | tr }} {{ result.Name }}">
|
||||||
|
{{ result.Name }}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
21
templates/pkgbase.html
Normal file
21
templates/pkgbase.html
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{% extends "partials/layout.html" %}
|
||||||
|
|
||||||
|
{% block pageContent %}
|
||||||
|
{% include "partials/packages/search.html" %}
|
||||||
|
<div id="pkgdetails" class="box">
|
||||||
|
<h2>{{ 'Package Base Details' | tr }}: {{ pkgbase.Name }}</h2>
|
||||||
|
|
||||||
|
{% set result = pkgbase %}
|
||||||
|
{% include "partials/packages/actions.html" %}
|
||||||
|
{% include "partials/packages/details.html" %}
|
||||||
|
|
||||||
|
<div id="metadata">
|
||||||
|
{% include "partials/packages/pkgbase_metadata.html" %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% set pkgname = result.Name %}
|
||||||
|
{% set pkgbase_id = result.ID %}
|
||||||
|
{% set comments = comments %}
|
||||||
|
{% include "partials/packages/comments.html" %}
|
||||||
|
{% endblock %}
|
|
@ -281,3 +281,40 @@ def test_package_dependencies(client: TestClient, maintainer: User,
|
||||||
|
|
||||||
broken_node = root.find('.//ul[@id="pkgdepslist"]/li/span')
|
broken_node = root.find('.//ul[@id="pkgdepslist"]/li/span')
|
||||||
assert broken_node.text.strip() == broken_dep.DepName
|
assert broken_node.text.strip() == broken_dep.DepName
|
||||||
|
|
||||||
|
|
||||||
|
def test_pkgbase_not_found(client: TestClient):
|
||||||
|
with client as request:
|
||||||
|
resp = request.get("/pkgbase/not_found")
|
||||||
|
assert resp.status_code == int(HTTPStatus.NOT_FOUND)
|
||||||
|
|
||||||
|
|
||||||
|
def test_pkgbase_redirect(client: TestClient, package: Package):
|
||||||
|
with client as request:
|
||||||
|
resp = request.get(f"/pkgbase/{package.Name}",
|
||||||
|
allow_redirects=False)
|
||||||
|
assert resp.status_code == int(HTTPStatus.SEE_OTHER)
|
||||||
|
assert resp.headers.get("location") == f"/packages/{package.Name}"
|
||||||
|
|
||||||
|
|
||||||
|
def test_pkgbase(client: TestClient, package: Package):
|
||||||
|
second = db.create(Package, Name="second-pkg",
|
||||||
|
PackageBase=package.PackageBase)
|
||||||
|
|
||||||
|
expected = [package.Name, second.Name]
|
||||||
|
with client as request:
|
||||||
|
resp = request.get(f"/pkgbase/{package.Name}",
|
||||||
|
allow_redirects=False)
|
||||||
|
assert resp.status_code == int(HTTPStatus.OK)
|
||||||
|
|
||||||
|
root = parse_root(resp.text)
|
||||||
|
|
||||||
|
# Check the details box title.
|
||||||
|
title = root.find('.//div[@id="pkgdetails"]/h2')
|
||||||
|
title, pkgname = title.text.split(": ")
|
||||||
|
assert title == "Package Base Details"
|
||||||
|
assert pkgname == package.Name
|
||||||
|
|
||||||
|
pkgs = root.findall('.//div[@id="pkgs"]/ul/li/a')
|
||||||
|
for i, name in enumerate(expected):
|
||||||
|
assert pkgs[i].text.strip() == name
|
||||||
|
|
Loading…
Add table
Reference in a new issue