test_pagination.py•1.89 kB
"""unit tests for pagination detection."""
import pytest
from src.pagination import PaginationDetector, PaginationAdapter
import inspect
def list_items(page: int = 1, per_page: int = 10):
"""function with pagination params."""
return [f"item-{i}" for i in range(page * per_page, (page + 1) * per_page)]
def get_single_item(id: int):
"""function without pagination."""
return f"item-{id}"
def test_detect_pagination_params():
"""test detection of pagination parameters."""
detector = PaginationDetector()
sig = inspect.signature(list_items)
config = detector.detect(list_items, sig)
assert config.has_pagination
assert config.cursor_param == "page"
assert config.limit_param == "per_page"
def test_detect_no_pagination():
"""test detection of non-paginated function."""
detector = PaginationDetector()
sig = inspect.signature(get_single_item)
config = detector.detect(get_single_item, sig)
assert not config.has_pagination
def test_pagination_adapter_executes_simple():
"""test pagination adapter with simple function."""
from src.pagination import PaginationConfig
adapter = PaginationAdapter(max_items=100)
config = PaginationConfig(has_pagination=False)
result = adapter.execute(get_single_item, (), {"id": 42}, config)
assert result == "item-42"
def test_pagination_adapter_with_iterator():
"""test pagination adapter with iterator."""
from src.pagination import PaginationConfig
def items_generator():
for i in range(200):
yield f"item-{i}"
adapter = PaginationAdapter(max_items=50)
config = PaginationConfig(has_pagination=True, is_iterator=True)
result = adapter.execute(items_generator, (), {}, config)
assert isinstance(result, list)
assert len(result) == 50 # capped at max_items