123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- from django.test import TestCase
- from misago.threads.paginator import PostsPaginator
- class PostsPaginatorTests(TestCase):
- def test_paginator(self):
- """pages share first and last items with each other"""
- items = [i + 1 for i in range(30)]
- paginator = PostsPaginator(items, 5)
- self.assertEqual(self.get_paginator_items_list(paginator), [
- [1, 2, 3, 4, 5],
- [5, 6, 7, 8, 9],
- [9, 10, 11, 12, 13],
- [13, 14, 15, 16, 17],
- [17, 18, 19, 20, 21],
- [21, 22, 23, 24, 25],
- [25, 26, 27, 28, 29],
- [29, 30],
- ])
- def test_paginator_orphans(self):
- """paginator handles orphans"""
- items = [i + 1 for i in range(16)]
- paginator = PostsPaginator(items, 8, 6)
- self.assertEqual(self.get_paginator_items_list(paginator), [
- [1, 2, 3, 4, 5, 6, 7, 8],
- [8, 9, 10, 11, 12, 13, 14, 15, 16],
- ])
- paginator = PostsPaginator(items, 4, 4)
- self.assertEqual(self.get_paginator_items_list(paginator), [
- [1, 2, 3, 4],
- [4, 5, 6, 7],
- [7, 8, 9, 10],
- [10, 11, 12, 13, 14, 15, 16],
- ])
- paginator = PostsPaginator(items, 5, 3)
- self.assertEqual(self.get_paginator_items_list(paginator), [
- [1, 2, 3, 4, 5],
- [5, 6, 7, 8, 9],
- [9, 10, 11, 12, 13, 14, 15, 16],
- ])
- paginator = PostsPaginator(items, 6, 2)
- self.assertEqual(self.get_paginator_items_list(paginator), [
- [1, 2, 3, 4, 5, 6],
- [6, 7, 8, 9, 10, 11],
- [11, 12, 13, 14, 15, 16],
- ])
- paginator = PostsPaginator(items, 7, 1)
- self.assertEqual(self.get_paginator_items_list(paginator), [
- [1, 2, 3, 4, 5, 6, 7],
- [7, 8, 9, 10, 11, 12, 13],
- [13, 14, 15, 16],
- ])
- paginator = PostsPaginator(items, 7, 3)
- self.assertEqual(self.get_paginator_items_list(paginator), [
- [1, 2, 3, 4, 5, 6, 7],
- [7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
- ])
- paginator = PostsPaginator(items, 10, 6)
- self.assertEqual(self.get_paginator_items_list(paginator), [items])
- def test_paginator_overlap(self):
- """test for #732 - assert that page contants don't overlap too much"""
- num_items = 16
- items = [i + 1 for i in range(num_items)]
- per_page = 2
- while per_page < num_items:
- orphans = 0
- while orphans + per_page <= num_items:
- paginator = PostsPaginator(items, per_page, orphans)
- pages = self.get_paginator_items_list(paginator)
- for p, page in enumerate(pages):
- for c, compared in enumerate(pages):
- if p == c:
- continue
- common_part = set(page) & set(compared)
- self.assertTrue(
- len(common_part) < 2, "invalid overlap (page %s and %s): %s" % (
- p + 1, c + 1, sorted(list(common_part))
- ))
- orphans += 1
- per_page += 1
- def get_paginator_items_list(self, paginator):
- items_list = []
- for page in paginator.page_range:
- items_list.append(paginator.page(page).object_list)
- return items_list
|