FEAT: Modernized to support latest Pythons and DRF JSONAPI
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
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
|
||||
Reference in New Issue
Block a user