Esempio n. 1
0
    def test_in_query(self):
        paginator = DjangoNonrelPaginator(
            DjangoNonrelPaginationModel.objects.filter(
                field1__in=xrange(12)).all().order_by("field1"), 5)

        page1 = paginator.page(1)
        self.assertEqual(5, len(page1.object_list))
        self.assertEqual(0, page1.object_list[0].field1)
        self.assertTrue(page1.has_next())
        self.assertFalse(page1.has_previous())
        self.assertEqual([1, 2], page1.available_pages())

        page2 = paginator.page(2)
        self.assertEqual(5, len(page2.object_list))
        self.assertEqual(5, page2.object_list[0].field1)
        self.assertTrue(page2.has_next())
        self.assertTrue(page2.has_previous())
        self.assertEqual([1, 2, 3], page2.available_pages())

        page3 = paginator.page(3)
        self.assertEqual(2, len(page3.object_list))
        self.assertEqual(10, page3.object_list[0].field1)
        self.assertFalse(page3.has_next())
        self.assertTrue(page3.has_previous())
        self.assertEqual([2, 3], page3.available_pages())

        self.assertRaises(EmptyPage, paginator.page, 4)
Esempio n. 2
0
    def test_cursor_caching(self):
        paginator = DjangoNonrelPaginator(
            DjangoNonrelPaginationModel.objects.all().order_by("field1"),
            5,
            batch_size=2)

        paginator.page(3)

        self.assertFalse(paginator.has_cursor_for_page(2))
        self.assertFalse(paginator.has_cursor_for_page(3))
        self.assertTrue(paginator.has_cursor_for_page(5))

        paginator.page(1)
        self.assertFalse(paginator.has_cursor_for_page(2))
        self.assertTrue(paginator.has_cursor_for_page(3))
        self.assertTrue(paginator.has_cursor_for_page(5))

        with mock.patch(
                "potatopage.paginator.DjangoNonrelPaginator._process_batch_hook"
        ) as mock_obj:
            #Should now use the cached cursor
            page3 = paginator.page(3)
            #Should have been called with a cursor as the 3rd argument
            self.assertTrue(mock_obj.call_args[0][2])

        self.assertEqual(2, len(page3.object_list))
        self.assertEqual(10, page3.object_list[0].field1)
Esempio n. 3
0
    def test_in_query(self):
        paginator = DjangoNonrelPaginator(DjangoNonrelPaginationModel.objects.filter(field1__in=xrange(12)).all().order_by("field1"), 5)

        page1 = paginator.page(1)
        self.assertEqual(5, len(page1.object_list))
        self.assertEqual(0, page1.object_list[0].field1)
        self.assertTrue(page1.has_next())
        self.assertFalse(page1.has_previous())
        self.assertEqual([1, 2], page1.available_pages())

        page2 = paginator.page(2)
        self.assertEqual(5, len(page2.object_list))
        self.assertEqual(5, page2.object_list[0].field1)
        self.assertTrue(page2.has_next())
        self.assertTrue(page2.has_previous())
        self.assertEqual([1, 2, 3], page2.available_pages())

        page3 = paginator.page(3)
        self.assertEqual(2, len(page3.object_list))
        self.assertEqual(10, page3.object_list[0].field1)
        self.assertFalse(page3.has_next())
        self.assertTrue(page3.has_previous())
        self.assertEqual([2, 3], page3.available_pages())

        self.assertRaises(EmptyPage, paginator.page, 4)
Esempio n. 4
0
    def test_total_items_count(self):
        """ Test total items count 
            We don't know the real count until we reach the last page 
            and because of that we cannt say what's the total number of items straight away.
            The _get_known_items_count should always return max known number of items (estimated or exact one).
        """

        per_page = 5
        paginator = DjangoNonrelPaginator(DjangoNonrelPaginationModel.objects.all().order_by("field1"), per_page)

        # get the first page
        page = paginator.page(1)
        self.assertEqual(page.paginator._get_known_items_count(), per_page)  # estimated number

        # go to the next (but not last) page
        page = paginator.page(page.next_page_number())
        self.assertEqual(page.paginator._get_known_items_count(), 2 * per_page)  # estimated number

        # go back to the first page
        page = paginator.page(page.previous_page_number())
        self.assertEqual(page.paginator._get_known_items_count(), 2 * per_page)  # estimated number (from cache)

        # go to the next (but not last) page
        page = paginator.page(page.next_page_number())
        self.assertEqual(page.paginator._get_known_items_count(), 2 * per_page)  # estimated number (from cache)

        # go to the last page
        page = paginator.page(page.next_page_number())
        self.assertEqual(page.paginator._get_known_items_count(), 2 * per_page + 2)  # exact number

        # go back to the previous page
        page = paginator.page(page.previous_page_number())
        self.assertEqual(page.paginator._get_known_items_count(), 2 * per_page + 2)  # exact number (from cache)
Esempio n. 5
0
    def test_cursor_caching(self):
        paginator = DjangoNonrelPaginator(DjangoNonrelPaginationModel.objects.all().order_by("field1"), 5, batch_size=2)

        paginator.page(3)

        self.assertFalse(paginator.has_cursor_for_page(2))
        self.assertFalse(paginator.has_cursor_for_page(3))
        self.assertTrue(paginator.has_cursor_for_page(5))

        paginator.page(1)
        self.assertFalse(paginator.has_cursor_for_page(2))
        self.assertTrue(paginator.has_cursor_for_page(3))
        self.assertTrue(paginator.has_cursor_for_page(5))

        with mock.patch("potatopage.paginator.DjangoNonrelPaginator._process_batch_hook") as mock_obj:
            #Should now use the cached cursor
            page3 = paginator.page(3)
            #Should have been called with a cursor as the 3rd argument
            self.assertTrue(mock_obj.call_args[0][2])

        self.assertEqual(2, len(page3.object_list))
        self.assertEqual(10, page3.object_list[0].field1)
Esempio n. 6
0
    def test_total_items_count(self):
        """ Test total items count 
            We don't know the real count until we reach the last page 
            and because of that we cannt say what's the total number of items straight away.
            The _get_known_items_count should always return max known number of items (estimated or exact one).
        """

        per_page = 5
        paginator = DjangoNonrelPaginator(
            DjangoNonrelPaginationModel.objects.all().order_by("field1"),
            per_page)

        # get the first page
        page = paginator.page(1)
        self.assertEqual(page.paginator._get_known_items_count(),
                         per_page)  # estimated number

        # go to the next (but not last) page
        page = paginator.page(page.next_page_number())
        self.assertEqual(page.paginator._get_known_items_count(),
                         2 * per_page)  # estimated number

        # go back to the first page
        page = paginator.page(page.previous_page_number())
        self.assertEqual(page.paginator._get_known_items_count(),
                         2 * per_page)  # estimated number (from cache)

        # go to the next (but not last) page
        page = paginator.page(page.next_page_number())
        self.assertEqual(page.paginator._get_known_items_count(),
                         2 * per_page)  # estimated number (from cache)

        # go to the last page
        page = paginator.page(page.next_page_number())
        self.assertEqual(page.paginator._get_known_items_count(),
                         2 * per_page + 2)  # exact number

        # go back to the previous page
        page = paginator.page(page.previous_page_number())
        self.assertEqual(page.paginator._get_known_items_count(),
                         2 * per_page + 2)  # exact number (from cache)