예제 #1
0
    def test_date_time(self):

        # fetch them all in our order, now that they're created
        ordering = 'when_datetime'
        timed_models = list(TimedModel.objects.order_by(ordering))

        paginator = PerformantPaginator(TimedModel.objects.all(),
                                        ordering=ordering)
        self.assertTrue(paginator)
        # first page
        page = paginator.page()
        self.assertTrue(Page)
        self.assertEquals(None, page.previous_token)
        self.assertEquals(None, page.token)

        datetime_format = '%Y-%m-%dT%H:%M:%S'

        def tokenize_datetime(dt):
            return b64encode(dt.strftime(datetime_format))

        self.assertEquals(tokenize_datetime(timed_models[24].when_datetime),
                          page.next_token)
        self.assertEquals(timed_models[:25], list(page))
        # second page
        page = paginator.page(page.next_token)
        self.assertTrue(Page)
        self.assertEquals('', page.previous_token)
        self.assertEquals(tokenize_datetime(timed_models[24].when_datetime),
                          page.token)
        self.assertEquals(tokenize_datetime(timed_models[49].when_datetime),
                          page.next_token)
        self.assertEquals(timed_models[25:50], list(page))
예제 #2
0
    def test_related_order(self):
        objects = RelatedModel.objects.order_by('simple__name')

        # defaults
        paginator = PerformantPaginator(RelatedModel.objects.all(),
                                        ordering='simple__name')
        self.assertTrue(paginator)
        self.assertTrue(str(paginator))
        # first page
        page = paginator.page()
        self.assertTrue(page)
        self.assertTrue(str(page))

        # make sure we got the expected data
        self.assertEquals(list(objects[:25]), list(page))
        # and the expected next tokens
        self.assertEquals(None, page.token)
        self.assertEquals(b64encode(objects[24].simple.name), page.next_token)
        self.assertEquals(None, page.previous_token)

        # page 2
        page = paginator.page(page.next_token)
        self.assertTrue(page)
        # make sure we got the expected data
        self.assertEquals(list(objects[25:50]), list(page))
        # and the expected next tokens
        self.assertEquals('', page.previous_token)
        self.assertEquals(b64encode(objects[24].simple.name), page.token)
        self.assertEquals(b64encode(objects[49].simple.name), page.next_token)
예제 #3
0
    def test_basic(self):
        objects = SimpleModel.objects.order_by('pk')

        # defaults
        paginator = PerformantPaginator(SimpleModel.objects.all())
        self.assertTrue(paginator)
        self.assertTrue(str(paginator))
        # first page
        page = paginator.page()
        self.assertTrue(page)
        self.assertTrue(str(page))

        # make sure we got the expected data
        self.assertEquals(list(objects[:25]), list(page))
        # and the expected next tokens
        self.assertEquals(None, page.token)
        self.assertEquals(b64encode(str(objects[24].pk)), page.next_token)
        self.assertEquals(None, page.previous_token)

        # check the page's methods
        self.assertFalse(page.has_previous())
        self.assertEquals(None, page.previous_page_number())
        self.assertTrue(page.has_next())
        self.assertEquals(b64encode(str(objects[24].pk)),
                          page.next_page_number())

        # these guys are not applicable/implemented with our system
        self.assertFalse(page.start_index())
        self.assertFalse(page.end_index())

        # now lets check the 2nd page
        page = paginator.page(page.next_page_number())
        self.assertTrue(page)

        # make sure we got the expected data
        self.assertEquals(list(objects[25:]), list(page))
        # and the expected next tokens
        self.assertEquals(b64encode(str(objects[24].pk)), page.token)
        self.assertEquals(None, page.next_token)
        self.assertEquals('', page.previous_token)

        # check the page's methods
        self.assertTrue(page.has_previous())
        self.assertEquals('', page.previous_page_number())
        self.assertFalse(page.has_next())
        self.assertEquals(None, page.next_page_number())
예제 #4
0
    def test_page_1_work_around(self):
        objects = SimpleModel.objects.order_by('pk')

        # defaults
        paginator = PerformantPaginator(SimpleModel.objects.all())
        self.assertTrue(paginator)
        # first page
        page = paginator.page(1)
        self.assertTrue(page)
        self.assertIsInstance(page, Page)

        # make sure we got the first page
        self.assertEquals(list(objects[:25]), list(page))
        # and the expected next tokens
        self.assertEquals(None, page.token)
        self.assertEquals(b64encode(str(objects[24].pk)), page.next_token)
        self.assertEquals(None, page.previous_token)
예제 #5
0
    def test_larger(self):
        objects = list(SimpleModel.objects.order_by('pk'))

        paginator = PerformantPaginator(SimpleModel.objects.all(),
                                        per_page=50)

        page = paginator.page()
        self.assertFalse(page.previous_page_number())
        off = 0
        while page.has_next():
            self.assertEquals(50, len(page))
            self.assertEquals(list(objects[off:off + 50]), list(page))
            page = paginator.page(page.next_page_number())
            off += 50

        # last page
        self.assertTrue(page.previous_page_number() is not None)
        self.assertEquals(33, len(page))
        self.assertEquals(list(objects[off:off + 33]), list(page))
        self.assertEquals(None, page.next_page_number())

        # now let's go backwards
        page = paginator.page(page.previous_page_number())
        while page.has_previous():
            off -= 50
            self.assertEquals(50, len(page))
            self.assertEquals(list(objects[off:off + 50]), list(page))
            page = paginator.page(page.previous_page_number())
예제 #6
0
    def test_has_other_pages(self):
        # defaults
        paginator = PerformantPaginator(SimpleModel.objects.all())
        self.assertTrue(paginator)
        page = paginator.page()
        self.assertTrue(page.has_other_pages())
        while page.has_next():
            self.assertTrue(page.has_other_pages())
            page = paginator.page(page.next_page_number())

        # per_page > total count so no next/prev
        paginator = PerformantPaginator(SimpleModel.objects.all(),
                                        per_page=999)
        self.assertTrue(paginator)
        page = paginator.page()
        self.assertFalse(page.has_other_pages())
예제 #7
0
    def test_allow_count(self):
        objects = SimpleModel.objects.order_by('pk')

        # defaults, no count
        paginator = PerformantPaginator(SimpleModel.objects.all())
        self.assertTrue(paginator)
        self.assertEquals(None, paginator.count())

        # allow_count
        paginator = PerformantPaginator(SimpleModel.objects.all(),
                                        allow_count=True)
        self.assertTrue(paginator)
        self.assertEquals(len(objects), paginator.count())
예제 #8
0
 def test_validate_number(self):
     paginator = PerformantPaginator(None)
     for number in (None, '', 42, 1, -1, 'something'):
         self.assertEquals(number, paginator.validate_number(number))
예제 #9
0
 def test_default_page_number(self):
     paginator = PerformantPaginator(None)
     self.assertEquals(None, paginator.default_page_number())