Skip to content

Commit

Permalink
fix: correct pagination for namespaces (#496)
Browse files Browse the repository at this point in the history
Fixes #495.
  • Loading branch information
leafty authored Oct 31, 2024
1 parent a8a3326 commit ddeb8d1
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 1 deletion.
3 changes: 2 additions & 1 deletion components/renku_data_services/namespace/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,8 @@ async def get_namespaces(
group_count = (
await session.scalar(group_ns_stmt.with_only_columns(func.count(schemas.NamespaceORM.id))) or 0
)
group_count += len(output)
if personal_ns is not None:
group_count += 1
for ns_orm in group_ns:
output.append(ns_orm.dump())
return output, group_count
Expand Down
32 changes: 32 additions & 0 deletions test/bases/renku_data_services/data_api/test_namespaces.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,38 @@ async def test_list_namespaces(sanic_client, user_headers) -> None:
assert group_ns["slug"] == "group-1"


@pytest.mark.asyncio
async def test_list_namespaces_pagination(sanic_client, user_headers) -> None:
for idx in range(1, 7):
payload = {"name": f"Group {idx}", "slug": f"group-{idx}"}
_, response = await sanic_client.post("/api/data/groups", headers=user_headers, json=payload)
assert response.status_code == 201, response.text

_, response = await sanic_client.get("/api/data/namespaces?per_page=2", headers=user_headers)
assert response.status_code == 200, response.text
res_json = response.json
assert len(res_json) == 2
user_ns = res_json[0]
assert user_ns["slug"] == "user.doe"
group_ns = res_json[1]
assert group_ns["slug"] == "group-1"
assert response.headers.get("page") == "1"
assert response.headers.get("per-page") == "2"
assert response.headers.get("total") == "7"
assert response.headers.get("total-pages") == "4"

_, response = await sanic_client.get("/api/data/namespaces?per_page=2&page=4", headers=user_headers)
assert response.status_code == 200, response.text
res_json = response.json
assert len(res_json) == 1
user_ns = res_json[0]
assert user_ns["slug"] == "group-6"
assert response.headers.get("page") == "4"
assert response.headers.get("per-page") == "2"
assert response.headers.get("total") == "7"
assert response.headers.get("total-pages") == "4"


@pytest.mark.asyncio
async def test_list_namespaces_all_groups_are_public(sanic_client, user_headers, member_1_headers) -> None:
payload = {
Expand Down

0 comments on commit ddeb8d1

Please sign in to comment.