57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
from types import SimpleNamespace
|
|
|
|
from enhanced_drf_jsonapi.pagination import NgxJsonApiPageNumberPagination
|
|
|
|
|
|
def make_page(*, number, pages, count, per_page, next_page=None, previous_page=None):
|
|
return SimpleNamespace(
|
|
number=number,
|
|
paginator=SimpleNamespace(num_pages=pages, count=count, per_page=per_page),
|
|
has_next=lambda: next_page is not None,
|
|
has_previous=lambda: previous_page is not None,
|
|
next_page_number=lambda: next_page,
|
|
previous_page_number=lambda: previous_page,
|
|
)
|
|
|
|
|
|
def test_pagination_response_preserves_ngx_jsonapi_contract():
|
|
pagination = NgxJsonApiPageNumberPagination()
|
|
pagination.page = make_page(
|
|
number=2,
|
|
pages=4,
|
|
count=37,
|
|
per_page=10,
|
|
next_page=3,
|
|
previous_page=1,
|
|
)
|
|
pagination.build_link = lambda page: None if page is None else f"/items?page={page}"
|
|
|
|
response = pagination.get_paginated_response([{"id": "one"}])
|
|
|
|
assert response.data == {
|
|
"results": [{"id": "one"}],
|
|
"meta": {
|
|
"page": 2,
|
|
"pages": 4,
|
|
"total_resources": 37,
|
|
"resources_per_page": 10,
|
|
},
|
|
"links": {
|
|
"first": "/items?page=1",
|
|
"last": "/items?page=4",
|
|
"next": "/items?page=3",
|
|
"prev": "/items?page=1",
|
|
},
|
|
}
|
|
|
|
|
|
def test_pagination_uses_null_links_at_the_boundaries():
|
|
pagination = NgxJsonApiPageNumberPagination()
|
|
pagination.page = make_page(number=1, pages=1, count=0, per_page=25)
|
|
pagination.build_link = lambda page: None if page is None else f"/items?page={page}"
|
|
|
|
response = pagination.get_paginated_response([])
|
|
|
|
assert response.data["links"]["next"] is None
|
|
assert response.data["links"]["prev"] is None
|