X-Git-Url: https://git.mdrn.pl/django-pagination.git/blobdiff_plain/994531a1c248812008f698a7c2f6cfb7eddf2170..b401bf0ef7b6945ffb07f905dd59e1868a48671c:/linaro_django_pagination/tests/test_main.py?page=2 diff --git a/linaro_django_pagination/tests/test_main.py b/linaro_django_pagination/tests/test_main.py index ba1baa1..1dc6d2c 100644 --- a/linaro_django_pagination/tests/test_main.py +++ b/linaro_django_pagination/tests/test_main.py @@ -28,243 +28,340 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from django.core.paginator import Paginator +from django.http import HttpRequest as DjangoHttpRequest +from django.template import Template, Context + +try: + from django.test import SimpleTestCase +except ImportError: # Django 1.2 compatible + from django.test import TestCase as SimpleTestCase + +from linaro_django_pagination.paginator import InfinitePaginator, FinitePaginator +from linaro_django_pagination.templatetags.pagination_tags import paginate +from linaro_django_pagination.middleware import PaginationMiddleware + + +class HttpRequest(DjangoHttpRequest): + page = lambda self, suffix: 1 + + +class CommonTestCase(SimpleTestCase): + def test_records_for_the_first_page(self): + p = Paginator(range(15), 2) + pg = paginate({'paginator': p, 'page_obj': p.page(1)}) + self.assertListEqual(pg['pages'], [1, 2, 3, 4, 5, 6, 7, 8]) + self.assertEqual(pg['records']['first'], 1) + self.assertEqual(pg['records']['last'], 2) + + def test_records_for_the_last_page(self): + p = Paginator(range(15), 2) + pg = paginate({'paginator': p, 'page_obj': p.page(8)}) + self.assertListEqual(pg['pages'], [1, 2, 3, 4, 5, 6, 7, 8]) + self.assertEqual(pg['records']['first'], 15) + self.assertEqual(pg['records']['last'], 15) + + def test_pages_list(self): + p = Paginator(range(17), 2) + self.assertEqual(paginate({'paginator': p, 'page_obj': p.page(1)})['pages'], [1, 2, 3, 4, 5, 6, 7, 8, 9]) + + def test_page_with_empty_objects_list(self): + p = Paginator(range(0), 2) + self.assertListEqual(paginate({'paginator': p, 'page_obj': p.page(1)})['pages'], [1]) + + +class DefaultWindowTestCase(SimpleTestCase): + """ + Test paginate using default window setting + moving the window from 1 ... to end + window size = 2, margin = 2 + window = 2 -> show 5 pages + """ + def setUp(self): + self.p = Paginator(range(31), 2) + + def test_on_start_page_1(self): + # [1] 2 3 4 5 ... 15, 16 + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(1)}, 2, 2)['pages'], + [1, 2, 3, 4, 5, None, 15, 16] + ) + + def test_on_start_page_2(self): + # 1 [2] 3 4 5 ... 15, 16 + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(2)}, 2, 2)['pages'], + [1, 2, 3, 4, 5, None, 15, 16] + ) + + def test_on_start_page_3(self): + # 1 2 [3] 4 5 ... 15, 16 + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(3)}, 2, 2)['pages'], + [1, 2, 3, 4, 5, None, 15, 16] + ) + + def test_on_start_page_4(self): + # 1 2 3 [4] 5 6 ... 15, 16 + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(4)}, 2, 2)['pages'], + [1, 2, 3, 4, 5, 6, None, 15, 16]) + + def test_on_start_page_5(self): + # 1 2 3 4 [5] 6 7 ... 15, 16 + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(5)}, 2, 2)['pages'], + [1, 2, 3, 4, 5, 6, 7, None, 15, 16] + ) + + def test_in_middle(self): + # 1 2 ... 5 6 [7] 8 9 ... 15, 16 + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(7)}, 2, 2)['pages'], + [1, 2, None, 5, 6, 7, 8, 9, None, 15, 16] + ) + + def test_on_end_page_13(self): + # 1 2 ... 12 [13] 14 15 16 + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(13)}, 2, 2)['pages'], + [1, 2, None, 11, 12, 13, 14, 15, 16], + ) + + def test_on_end(self): + # 1 2 ... 12 13 14 15 [16 + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(16)}, 2, 2)['pages'], + [1, 2, None, 12, 13, 14, 15, 16] + ) + + +class NoMarginTestCase(SimpleTestCase): + def setUp(self): + self.p = Paginator(range(31), 2) + + def test_on_start(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(3)}, 2, 0)['pages'], + [1, 2, 3, 4, 5, None], + ) + + def test_in_middle(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(5)}, 2, 0)['pages'], + [None, 3, 4, 5, 6, 7, None], + ) + + def test_on_end(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(16)}, 2, 0)['pages'], + [None, 12, 13, 14, 15, 16], + ) + + +class ZeroWindowZeroMarginTestCase(SimpleTestCase): + """ + Test paginate using window=0 and margin=0 + """ + def setUp(self): + self.p = Paginator(range(31), 2) + + def test_on_start_page_1(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(1)}, 0, 0)['pages'], + [1, None], + ) + + def test_in_middle_page_2(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(2)}, 0, 0)['pages'], + [None, 2, None], + ) + + def test_in_middle_page_3(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(3)}, 0, 0)['pages'], + [None, 3, None], + ) + + def test_in_middle_page_10(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(10)}, 0, 0)['pages'], + [None, 10, None], + ) + + def test_in_middle_page_14(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(14)}, 0, 0)['pages'], + [None, 14, None], + ) + + def test_in_middle_page_15(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(15)}, 0, 0)['pages'], + [None, 15, None], + ) + + def test_on_end_page_16(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(16)}, 0, 0)['pages'], + [None, 16], + ) + + +class SpecialTestCase(SimpleTestCase): + def test_middle_with_no_window_and_margin_1(self): + p = Paginator(range(31), 2) + self.assertListEqual( + paginate({'paginator': p, 'page_obj': p.page(5)}, 0, 1)['pages'], + [1, None, 5, None, 16], + ) + + def test_middle_with_no_window_and_margin_4(self): + p = Paginator(range(21), 2, 1) + self.assertListEqual( + paginate({'paginator': p, 'page_obj': p.page(1)}, 0, 4)['pages'], + [1, 2, 3, 4, None, 7, 8, 9, 10], + ) + + +class TemplateRenderingTestCase(SimpleTestCase): + def test_default_tag_options(self): + t = Template("{% load pagination_tags %}{% autopaginate var %}{% paginate %}") + self.assertIn( + '