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)
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]
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)
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)
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])
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])
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)