DEFAULT_ITEMS_PER_PAGE = 100
LONG_PAGE_THRESHOLD = 30
LEADING_PAGE_RANGE_DISPLAYED = 4
-TRAILING_PAGE_RANGE_DISPLAYED = 2
+TRAILING_PAGE_RANGE_DISPLAYED = 4
LEADING_PAGE_RANGE = 4
TRAILING_PAGE_RANGE = 2
NUM_PAGES_OUTSIDE_RANGE = 2
if pages <= LEADING_PAGE_RANGE_DISPLAYED:
adjacent_start = 1
adjacent_end = pages + 1
- elif page_no <= LEADING_PAGE_RANGE:
+ elif page_no < LEADING_PAGE_RANGE:
adjacent_start = 1
adjacent_end = LEADING_PAGE_RANGE_DISPLAYED + 1
self.leading_set = [n + pages for n in
range(0, -NUM_PAGES_OUTSIDE_RANGE, -1)]
- elif page_no > pages - TRAILING_PAGE_RANGE:
+ elif page_no >= pages - TRAILING_PAGE_RANGE:
adjacent_start = pages - TRAILING_PAGE_RANGE_DISPLAYED + 1
adjacent_end = pages + 1
self.trailing_set = [n + 1 for n in
self.assertEqual(response.context['page'].object_list[0].id,
self.patches[-page].id)
+ def test_navigation(self):
+ self.client.login(username=self.user.username,
+ password=self.user.username)
+ for page_num in range(1, 11):
+ response = self._get_patches({'page': page_num})
+
+ page = response.context['page']
+ leading = page.paginator.leading_set
+ adjacent = page.paginator.adjacent_set
+ trailing = page.paginator.trailing_set
+
+ # if there is a prev page, it should be:
+ if page.has_previous():
+ self.assertEqual(page.previous_page_number(),
+ page_num - 1)
+ # ... either in the adjacent set or in the trailing set
+ if adjacent is not None:
+ self.assertIn(page_num - 1, adjacent)
+ else:
+ self.assertIn(page_num - 1, trailing)
+
+ # if there is a next page, it should be:
+ if page.has_next():
+ self.assertEqual(page.next_page_number(),
+ page_num + 1)
+ # ... either in the adjacent set or in the leading set
+ if adjacent is not None:
+ self.assertIn(page_num + 1, adjacent)
+ else:
+ self.assertIn(page_num + 1, leading)
+
+ # no page number should appear more than once
+ for x in adjacent:
+ self.assertNotIn(x, leading)
+ self.assertNotIn(x, trailing)
+ for x in leading:
+ self.assertNotIn(x, trailing)
+
def test_page_invalid(self):
self.client.login(username=self.user.username,
password=self.user.username)