Пример #1
0
    def test_iter(self):
        page1 = Mock()
        page1.items = [1, 2, 3]
        page2 = Mock()
        page2.items = [4, 5, 6]
        page3 = Mock()
        page3.items = [7, 8]
        page4 = Mock()
        page4.items = [9]
        page1.next = page2
        page2.next = page3
        page3.next = page4
        page4.next = None

        with patch.object(Resource1.client, '_op') as _op:
            with patch.object(Resource1, 'page_cls') as page_cls:
                page_cls.return_value = page1
                resp = _op.return_value
                resp.data = {}

                page_cls.return_value = page1
                uri = '/a/uri'
                pagination = wac.Pagination(Resource1, uri, 25, None)
                pages = [p for p in pagination]
                self.assertEqual([page1, page2, page3, page4], pages)

                page_cls.return_value = page2
                uri = '/a/uri'
                pagination = wac.Pagination(Resource1, uri, 25, None)
                pages = [p for p in pagination]
                self.assertEqual([page2, page3, page4], pages)
Пример #2
0
    def test_index(self, _page):
        page1 = Mock(items=[1, 2, 3], total=8)
        page2 = Mock(items=[4, 5, 6], total=8)
        page3 = Mock(items=[7, 8], total=8)

        def _page_patch(key):
            return [page1, page2, page3][key]

        _page.side_effect = _page_patch

        uri = '/a/uri'
        pagination = wac.Pagination(None, uri, 3, page1)
        self.assertEqual(pagination.current, page1)

        page = pagination[0]
        self.assertEqual(page1, page)
        page = pagination[1]
        self.assertEqual(page2, page)
        page = pagination[2]
        self.assertEqual(page3, page)
        page = pagination[-1]
        self.assertEqual(page3, page)
        page = pagination[-2]
        self.assertEqual(page2, page)
        page = pagination[-3]
        self.assertEqual(page1, page)
        with self.assertRaises(IndexError):
            pagination[-4]
        with self.assertRaises(IndexError):
            pagination[100]
Пример #3
0
    def test_links(self, Page):
        page1 = Mock()
        page1.items = [1, 2, 3]
        page2 = Mock()
        page2.items = [4, 5, 6]
        page3 = Mock()
        page3.items = [7, 8]
        page1.previous = None
        page1.next = page2
        page2.previous = page1
        page2.next = page3
        page3.previous = page2
        page3.next = None

        Page.return_value = page1
        uri = '/a/uri'
        pagination = wac.Pagination(Resource1, uri, 25, page1)
        self.assertEqual(pagination.current, page1)

        for expected_page in [page2, page3]:
            page = pagination.next()
            self.assertEqual(page, expected_page)
            self.assertEqual(pagination.current, expected_page)
        page = pagination.next()
        self.assertEqual(page, None)
        self.assertEqual(pagination.current, expected_page)

        for expected_page in [page2, page1]:
            page = pagination.previous()
            self.assertEqual(page, expected_page)
            self.assertEqual(pagination.current, expected_page)
        page = pagination.previous()
        self.assertEqual(page, None)
        self.assertEqual(pagination.current, expected_page)
Пример #4
0
    def test_count(self, Page, _page):
        page1 = Mock(items=[1, 2, 3], total=8)

        def _page_patch(key, size=None):
            return [page1][key]

        _page.side_effect = _page_patch

        uri = '/a/uri'
        pagination = wac.Pagination(None, uri, 6, None)
        expected_count = int(math.ceil(page1.total / pagination.size))
        self.assertEqual(pagination.count(), expected_count)
        _page.assert_called_once_with(0, 1)
Пример #5
0
    def test_first(self, _page):
        def _page_patch(key, size=None):
            return pages[key]

        _page.side_effect = _page_patch

        # multiple
        pages = [
            Mock(items=[1, 2, 3], total=5),
            Mock(items=[4, 5], total=5),
        ]
        uri = '/a/uri'
        pagination = wac.Pagination(None, uri, 3)
        with self.assertRaises(wac.MultipleResultsFound):
            pagination.one()

        # one
        pages = [
            Mock(items=[1, 2, 3], total=3),
        ]
        uri = '/a/uri'
        pagination = wac.Pagination(None, uri, 3)
        self.assertEqual(pagination.one(), pages[0])
Пример #6
0
    def test_slice(self, _page):
        page1 = Mock(items=[1, 2, 3], total=8)
        page2 = Mock(items=[4, 5, 6], total=8)
        page3 = Mock(items=[7, 8], total=8)

        def _page_patch(key, data=None):
            return [page1, page2, page3][key]

        _page.side_effect = _page_patch

        uri = '/a/uri?offset=4'
        pagination = wac.Pagination(Resource1, uri, 3, page2)
        self.assertEqual(pagination.current, page2)

        pages = [page1, page2, page3]
        self.assertEqual(pages[:], pagination[:])
        self.assertEqual(pages[::-1], pagination[::-1])
        self.assertEqual(pages[::2], pagination[::2])
        self.assertEqual(pages[1:2], pagination[1:2])
        self.assertEqual(pages[100:], pagination[100:])
        self.assertEqual(pages[3:2:12], pagination[3:2:12])
Пример #7
0
 def test_count_cached(self):
     page1 = wac.Page(Resource1, **dict(total=101, items=[]))
     uri = '/a/uri'
     pagination = wac.Pagination(None, uri, 6, page1)
     expected_count = int(math.ceil(page1.total / pagination.size))
     self.assertEqual(pagination.count(), expected_count)