From 30b36a594f3f262ca5fcab49ac03d29cab9f2f09 Mon Sep 17 00:00:00 2001 From: homm Date: Fri, 12 Jun 2015 18:57:46 +0300 Subject: [PATCH] use PageSizePaginationMixin for CursorPagination tests for custom page_size in CursorPagination --- rest_framework/pagination.py | 6 +++--- tests/test_pagination.py | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/rest_framework/pagination.py b/rest_framework/pagination.py index 2b4a14a2d..5d0dc70d7 100644 --- a/rest_framework/pagination.py +++ b/rest_framework/pagination.py @@ -487,20 +487,20 @@ class LimitOffsetPagination(BasePagination): return template.render(context) -class CursorPagination(BasePagination): +class CursorPagination(BasePageSizePagination): """ The cursor pagination implementation is neccessarily complex. For an overview of the position/offset style we use, see this post: http://cramer.io/2011/03/08/building-cursors-for-the-disqus-api/ """ cursor_query_param = 'cursor' - page_size = api_settings.PAGE_SIZE invalid_cursor_message = _('Invalid cursor') ordering = '-created' template = 'rest_framework/pagination/previous_and_next.html' def paginate_queryset(self, queryset, request, view=None): - if self.page_size is None: + self.page_size = self.get_page_size(request) + if not self.page_size: return None self.base_url = request.build_absolute_uri() diff --git a/tests/test_pagination.py b/tests/test_pagination.py index c67550c85..1c23c91bb 100644 --- a/tests/test_pagination.py +++ b/tests/test_pagination.py @@ -508,6 +508,8 @@ class TestCursorPagination: class ExamplePagination(pagination.CursorPagination): page_size = 5 + page_size_query_param = 'page_size' + max_page_size = 20 ordering = 'created' self.pagination = ExamplePagination() @@ -643,6 +645,24 @@ class TestCursorPagination: assert isinstance(self.pagination.to_html(), type('')) + def test_page_size(self): + (previous, current, next, previous_url, next_url) = \ + self.get_pages('/?page_size=10') + + assert previous is None + assert current == [1, 1, 1, 1, 1, 1, 2, 3, 4, 4] + assert next == [4, 4, 5, 6, 7, 7, 7, 7, 7, 7] + assert 'page_size=10' in next_url + + (previous, current, next, previous_url, next_url) = \ + self.get_pages(next_url.replace('page_size=10', 'page_size=4')) + + assert previous == [2, 3, 4, 4] + assert current == [4, 4, 5, 6] + assert next == [7, 7, 7, 7] + assert 'page_size=4' in previous_url + assert 'page_size=4' in next_url + def test_get_displayed_page_numbers(): """