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
|
||||
|
||||
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')
|
||||
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