Files
openstack-api-simulator/tests/openstack/test_paging.py
T
inecs 6033967e6a Initial commit: stateful OpenStack API laboratory simulator.
Ship Keystone auth, multi-service handlers (Yoga→Dalmatian), Compose/Helm
packaging, API contract packs, and pytest/Pulumi coverage labs.
2026-07-18 04:26:48 +03:00

43 lines
1.2 KiB
Python

"""Unit tests for OpenStack pagination helper."""
from __future__ import annotations
from starlette.requests import Request
from app.openstack.paging import paginate_rows, parse_limit
def _request(query: str = "") -> Request:
scope = {
"type": "http",
"asgi": {"version": "3.0"},
"http_version": "1.1",
"method": "GET",
"scheme": "http",
"path": "/v2.1/servers",
"raw_path": b"/v2.1/servers",
"query_string": query.encode(),
"headers": [],
"client": ("127.0.0.1", 123),
"server": ("test", 80),
}
return Request(scope)
def test_parse_limit_clamps() -> None:
assert parse_limit(_request("")) == 0
assert parse_limit(_request("limit=25")) == 25
assert parse_limit(_request("limit=99999"), maximum=100) == 100
def test_paginate_rows_marker_and_next_link() -> None:
rows = [{"id": f"id-{i}"} for i in range(10)]
page, links = paginate_rows(
rows,
_request("limit=3&marker=id-2"),
id_attr=lambda r: r["id"],
)
assert [r["id"] for r in page] == ["id-3", "id-4", "id-5"]
assert links and links[0]["rel"] == "next"
assert "marker=id-5" in links[0]["href"]