aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_pagination.py
diff options
context:
space:
mode:
authorTom Christie2015-01-19 09:24:42 +0000
committerTom Christie2015-01-19 09:24:42 +0000
commitdbb684117f6fe0f9c34f98d5e914fc106090cdbc (patch)
tree3e6c56bbfc6231f82c06986b57d28dbed5446c12 /tests/test_pagination.py
parent492f3c410d3a91a3f37218e93485a693d9078000 (diff)
downloaddjango-rest-framework-dbb684117f6fe0f9c34f98d5e914fc106090cdbc.tar.bz2
Add offset support for cursor pagination
Diffstat (limited to 'tests/test_pagination.py')
-rw-r--r--tests/test_pagination.py64
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,