diff options
| author | Tom Christie | 2015-01-19 09:24:42 +0000 | 
|---|---|---|
| committer | Tom Christie | 2015-01-19 09:24:42 +0000 | 
| commit | dbb684117f6fe0f9c34f98d5e914fc106090cdbc (patch) | |
| tree | 3e6c56bbfc6231f82c06986b57d28dbed5446c12 /tests/test_pagination.py | |
| parent | 492f3c410d3a91a3f37218e93485a693d9078000 (diff) | |
| download | django-rest-framework-dbb684117f6fe0f9c34f98d5e914fc106090cdbc.tar.bz2 | |
Add offset support for cursor pagination
Diffstat (limited to 'tests/test_pagination.py')
| -rw-r--r-- | tests/test_pagination.py | 64 | 
1 files changed, 61 insertions, 3 deletions
| diff --git a/tests/test_pagination.py b/tests/test_pagination.py index 7f18b446..f04079a7 100644 --- a/tests/test_pagination.py +++ b/tests/test_pagination.py @@ -447,7 +447,7 @@ class TestCursorPagination:          self.pagination = pagination.CursorPagination()          self.queryset = MockQuerySet( -            [MockObject(idx) for idx in range(1, 21)] +            [MockObject(idx) for idx in range(1, 16)]          )      def paginate_queryset(self, request): @@ -480,15 +480,73 @@ class TestCursorPagination:          assert [item.created for item in queryset] == [11, 12, 13, 14, 15]          next_url = self.pagination.get_next_link() +        assert next_url is None + + +class TestCrazyCursorPagination: +    """ +    Unit tests for `pagination.CursorPagination`. +    """ + +    def setup(self): +        class MockObject(object): +            def __init__(self, idx): +                self.created = idx + +        class MockQuerySet(object): +            def __init__(self, items): +                self.items = items + +            def filter(self, created__gt): +                return [ +                    item for item in self.items +                    if item.created > int(created__gt) +                ] + +            def __getitem__(self, sliced): +                return self.items[sliced] + +        self.pagination = pagination.CursorPagination() +        self.queryset = MockQuerySet([ +            MockObject(idx) for idx in [ +                1, 1, 1, 1, 1, +                1, 1, 1, 1, 1, +                1, 1, 2, 3, 4, +                5, 6, 7, 8, 9 +            ] +        ]) + +    def paginate_queryset(self, request): +        return list(self.pagination.paginate_queryset(self.queryset, request)) + +    def test_following_cursor_identical_items(self): +        request = Request(factory.get('/')) +        queryset = self.paginate_queryset(request) +        assert [item.created for item in queryset] == [1, 1, 1, 1, 1] + +        next_url = self.pagination.get_next_link()          assert next_url          request = Request(factory.get(next_url))          queryset = self.paginate_queryset(request) -        assert [item.created for item in queryset] == [16, 17, 18, 19, 20] +        assert [item.created for item in queryset] == [1, 1, 1, 1, 1]          next_url = self.pagination.get_next_link() -        assert next_url is None +        assert next_url + +        request = Request(factory.get(next_url)) +        queryset = self.paginate_queryset(request) +        assert [item.created for item in queryset] == [1, 1, 2, 3, 4] + +        next_url = self.pagination.get_next_link() +        assert next_url + +        request = Request(factory.get(next_url)) +        queryset = self.paginate_queryset(request) +        assert [item.created for item in queryset] == [5, 6, 7, 8, 9] +        next_url = self.pagination.get_next_link() +        assert next_url is None          # assert content == {          #     'results': [1, 2, 3, 4, 5],          #     'previous': None, | 
