mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-11-04 18:08:03 +03:00 
			
		
		
		
	use PageSizePaginationMixin for CursorPagination
tests for custom page_size in CursorPagination
This commit is contained in:
		
							parent
							
								
									9a5373d41c
								
							
						
					
					
						commit
						30b36a594f
					
				| 
						 | 
				
			
			@ -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()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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():
 | 
			
		||||
    """
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user