network/gaiia/tests/test_pagination.py
2026-07-19 14:42:02 -05:00

43 lines
1.1 KiB
Python

import pytest
from gaiia.pagination import extract_connection, iter_nodes
def _conn(nodes, has_next=False, end="cur"):
return {
"nodes": nodes,
"pageInfo": {"hasNextPage": has_next, "endCursor": end if has_next else None},
}
def test_extract_connection_walks_dotted_path():
data = {"a": {"b": _conn([1, 2])}}
conn = extract_connection(data, "a.b")
assert conn["nodes"] == [1, 2]
def test_extract_connection_missing_path_raises():
with pytest.raises(KeyError):
extract_connection({"a": {}}, "a.b")
def test_iter_nodes_terminates_on_last_page():
pages = [
{"things": _conn(["a", "b"], has_next=True, end="x")},
{"things": _conn(["c"], has_next=False)},
]
calls = []
def fetch(cursor):
calls.append(cursor)
return pages.pop(0)
assert list(iter_nodes(fetch, "things")) == ["a", "b", "c"]
assert calls == [None, "x"]
def test_iter_nodes_handles_empty():
def fetch(cursor):
return {"things": _conn([])}
assert list(iter_nodes(fetch, "things")) == []