コード例 #1
0
 def test_invalid_page_number(self):
     """
     Invalid page numbers result in the correct exception being raised.
     """
     paginator = Paginator([1, 2, 3], 2)
     with self.assertRaises(InvalidPage):
         paginator.page(3)
     with self.assertRaises(PageNotAnInteger):
         paginator.validate_number(None)
     with self.assertRaises(PageNotAnInteger):
         paginator.validate_number('x')
     with self.assertRaises(PageNotAnInteger):
         paginator.validate_number(1.2)
コード例 #2
0
 def test_last_page(self):
     paginator = Paginator(Article.objects.order_by('id'), 5)
     p = paginator.page(2)
     self.assertEqual("<Page 2 of 2>", str(p))
     self.assertQuerysetEqual(p.object_list, [
         "<Article: Article 6>", "<Article: Article 7>",
         "<Article: Article 8>", "<Article: Article 9>"
     ])
     self.assertFalse(p.has_next())
     self.assertTrue(p.has_previous())
     self.assertTrue(p.has_other_pages())
     with self.assertRaises(InvalidPage):
         p.next_page_number()
     self.assertEqual(1, p.previous_page_number())
     self.assertEqual(6, p.start_index())
     self.assertEqual(9, p.end_index())
コード例 #3
0
 def check_indexes(self, params, page_num, indexes):
     """
     Helper method that instantiates a Paginator object from the passed
     params and then checks that the start and end indexes of the passed
     page_num match those given as a 2-tuple in indexes.
     """
     paginator = Paginator(*params)
     if page_num == 'first':
         page_num = 1
     elif page_num == 'last':
         page_num = paginator.num_pages
     page = paginator.page(page_num)
     start, end = indexes
     msg = (
         "For %s of page %s, expected %s but got %s. Paginator parameters were: %s"
     )
     self.assertEqual(
         start, page.start_index(),
         msg % ('start index', page_num, start, page.start_index(), params))
     self.assertEqual(
         end, page.end_index(),
         msg % ('end index', page_num, end, page.end_index(), params))
コード例 #4
0
    def test_page_getitem(self):
        """
        Tests proper behavior of a paginator page __getitem__ (queryset
        evaluation, slicing, exception raised).
        """
        paginator = Paginator(Article.objects.order_by('id'), 5)
        p = paginator.page(1)

        # Make sure object_list queryset is not evaluated by an invalid __getitem__ call.
        # (this happens from the template engine when using eg: {% page_obj.has_previous %})
        self.assertIsNone(p.object_list._result_cache)
        with self.assertRaises(TypeError):
            p['has_previous']
        self.assertIsNone(p.object_list._result_cache)
        self.assertNotIsInstance(p.object_list, list)

        # Make sure slicing the Page object with numbers and slice objects work.
        self.assertEqual(p[0], Article.objects.get(headline='Article 1'))
        self.assertQuerysetEqual(p[slice(2)], [
            "<Article: Article 1>",
            "<Article: Article 2>",
        ])
        # After __getitem__ is called, object_list is a list
        self.assertIsInstance(p.object_list, list)