fix: strip whitespace when parsing package keywords

Remove all extra whitespace when parsing Keywords to ensure we don't add
empty keywords in the DB.

Closes: #332

Signed-off-by: Leonidas Spyropoulos <artafinde@archlinux.org>
This commit is contained in:
Leonidas Spyropoulos 2022-08-01 19:02:17 +03:00
parent a509e40474
commit 1d6335363c
2 changed files with 31 additions and 1 deletions

View file

@ -98,7 +98,7 @@ async def pkgbase_keywords(request: Request, name: str,
# Lowercase all keywords. Our database table is case insensitive, # Lowercase all keywords. Our database table is case insensitive,
# and providing CI duplicates of keywords is erroneous. # and providing CI duplicates of keywords is erroneous.
keywords = set(k.lower() for k in keywords.split(" ")) keywords = set(k.lower() for k in keywords.split())
# Delete all keywords which are not supplied by the user. # Delete all keywords which are not supplied by the user.
with db.begin(): with db.begin():

View file

@ -1396,3 +1396,33 @@ def test_pkgbase_keywords(client: TestClient, user: User, package: Package):
expected = ["abc", "test"] expected = ["abc", "test"]
for i, keyword in enumerate(keywords): for i, keyword in enumerate(keywords):
assert keyword.text.strip() == expected[i] assert keyword.text.strip() == expected[i]
def test_pkgbase_empty_keywords(client: TestClient, user: User, package: Package):
endpoint = f"/pkgbase/{package.PackageBase.Name}"
with client as request:
resp = request.get(endpoint)
assert resp.status_code == int(HTTPStatus.OK)
root = parse_root(resp.text)
keywords = root.xpath('//a[@class="keyword"]')
assert len(keywords) == 0
cookies = {"AURSID": user.login(Request(), "testPassword")}
post_endpoint = f"{endpoint}/keywords"
with client as request:
resp = request.post(post_endpoint, data={
"keywords": "abc test foo bar "
}, cookies=cookies)
assert resp.status_code == int(HTTPStatus.SEE_OTHER)
with client as request:
resp = request.get(resp.headers.get("location"))
assert resp.status_code == int(HTTPStatus.OK)
root = parse_root(resp.text)
keywords = root.xpath('//a[@class="keyword"]')
assert len(keywords) == 4
expected = ["abc", "bar", "foo", "test"]
for i, keyword in enumerate(keywords):
assert keyword.text.strip() == expected[i]