Files

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