43 lines
1.1 KiB
Python
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")) == []
|