From 9d6dbaf0ecfaf576d0c966ca0c93ba68dbd07544 Mon Sep 17 00:00:00 2001 From: Kevin Morris Date: Sat, 30 Oct 2021 00:36:21 -0700 Subject: [PATCH] feat(rpc): add suggest type handler Signed-off-by: Kevin Morris --- aurweb/rpc.py | 8 ++++++++ test/test_rpc.py | 24 +++++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/aurweb/rpc.py b/aurweb/rpc.py index 87700a2f..5c9df1a7 100644 --- a/aurweb/rpc.py +++ b/aurweb/rpc.py @@ -175,6 +175,14 @@ class RPC: models.Package.Name.in_(args)) return [self._get_json_data(pkg) for pkg in packages] + def _handle_suggest_type(self, args: List[str] = []): + arg = args[0] + packages = db.query(models.Package).join(models.PackageBase).filter( + and_(models.PackageBase.PackagerUID.isnot(None), + models.Package.Name.like(f"%{arg}%")) + ).order_by(models.Package.Name.asc()).limit(20) + return [pkg.Name for pkg in packages] + def _handle_suggest_pkgbase_type(self, args: List[str] = []): records = db.query(models.PackageBase).filter( and_(models.PackageBase.PackagerUID.isnot(None), diff --git a/test/test_rpc.py b/test/test_rpc.py index 00703c23..71c7397f 100644 --- a/test/test_rpc.py +++ b/test/test_rpc.py @@ -98,6 +98,17 @@ def setup(): Maintainer=user1, Packager=user1) + pkgbase4 = create(PackageBase, Name="fugly-chungus", + Maintainer=user1, + Packager=user1) + + desc = "A Package belonging to a PackageBase with another name." + create(Package, + PackageBase=pkgbase4, + Name="other-pkg", + Description=desc, + URL="https://example.com") + create(Package, PackageBase=pkgbase3, Name=pkgbase3.Name, @@ -451,8 +462,19 @@ def test_rpc_suggest_pkgbase(): assert data == ["chungy-chungus"] +def test_rpc_suggest(): + response = make_request("/rpc?v=5&type=suggest&arg=other") + data = response.json() + assert data == ["other-pkg"] + + # Test non-existent Package. + response = make_request("/rpc?v=5&type=suggest&arg=nonexistent") + data = response.json() + assert data == [] + + def test_rpc_unimplemented_types(): - unimplemented = ["search", "msearch", "suggest"] + unimplemented = ["search", "msearch"] for type in unimplemented: response = make_request(f"/rpc?v=5&type={type}&arg=big") data = response.json()