def test_one(self, _page): def _page_patch(key, size=None): return pages[key] _page.side_effect = _page_patch # none pages = [Mock(items=[], total=0, offset=0, fetched=False)] uri = '/ur/is' q = wac.Query(Resource1, uri, 3) _page.reset_mock() with self.assertRaises(wac.NoResultFound): q.one() self.assertEqual(_page.call_count, 1) _page.reset_mock() # multiple pages = [Mock(items=[1, 2, 3], total=3, offset=0, fetched=False)] uri = '/ur/is' q = wac.Query(Resource1, uri, 3) _page.reset_mock() with self.assertRaises(wac.MultipleResultsFound): q.one() self.assertEqual(_page.call_count, 1) _page.reset_mock() # one pages = [Mock(items=['one'], total=1, offset=0, fetched=False)] uri = '/ur/is' q = wac.Query(Resource1, uri, 3) _page.reset_mock() item = q.one() self.assertEqual(item, 'one') self.assertEqual(_page.call_count, 1) _page.reset_mock()
def test_one_cached(self, _page): # none page = Mock(items=[], offset=0, total=0, fetched=True) _page.return_value = page uri = '/ur/is' q = wac.Query(Resource1, uri, 3) _page.reset_mock() with self.assertRaises(wac.NoResultFound): q.one() _page.assert_called_once_with(0, 2) # multiple page = Mock(items=[1, 2, 3], offset=0, total=3, fetched=True) _page.return_value = page uri = '/ur/is' q = wac.Query(Resource1, uri, 3) _page.reset_mock() with self.assertRaises(wac.MultipleResultsFound): q.one() _page.assert_called_once_with(0, 2) # one page = Mock(items=['one'], offset=0, total=1, fetched=True) _page.return_value = page uri = '/ur/is' q = wac.Query(Resource1, uri, 3) _page.reset_mock() item = q.one() self.assertEqual(item, 'one') _page.assert_called_once_with(0, 2)
def test_parse_uri(self): uri = '/a/uri' q = wac.Query(None, uri, 25) self.assertEqual(q._qs(), '') uri = '/a/uri?' q = wac.Query(None, uri, 25) self.assertEqual(q._qs(), '') uri = '/a/uri?a[in]=1,2&a[>]=c&b=hiya&d[endswith]=bye' q = wac.Query(None, uri, 25) self.assertEqual(urllib.unquote(q._qs()), 'a[>]=c&b=hiya&d[endswith]=bye&a[in]=1,2')
def test_filter(self): uri = '/a/uri' q = wac.Query(None, uri, 25) q.filter(Resource1.f.a == 'b') self.assertEqual(q.filters[-1], ('a', 'b')) q.filter(Resource1.f.a != '101') self.assertEqual(q.filters[-1], ('a[!=]', '101')) q.filter(Resource1.f.b < 4) self.assertEqual(q.filters[-1], ('b[<]', '4')) q.filter(Resource1.f.b <= 5) self.assertEqual(q.filters[-1], ('b[<=]', '5')) q.filter(Resource1.f.c > 123) self.assertEqual(q.filters[-1], ('c[>]', '123')) q.filter(Resource1.f.c >= 44) self.assertEqual(q.filters[-1], ('c[>=]', '44')) q.filter(Resource1.f.d.in_(1, 2, 3)) self.assertEqual(q.filters[-1], ('d[in]', '1,2,3')) q.filter(~Resource1.f.d.in_(6, 33, 55)) self.assertEqual(q.filters[-1], ('d[!in]', '6,33,55')) q.filter(Resource1.f.e.contains('it')) self.assertEqual(q.filters[-1], ('e[contains]', 'it')) q.filter(~Resource1.f.e.contains('soda')) self.assertEqual(q.filters[-1], ('e[!contains]', 'soda')) q.filter(Resource1.f.f.startswith('la')) self.assertEqual(q.filters[-1], ('f[startswith]', 'la')) q.filter(Resource1.f.f.endswith('lo')) self.assertEqual(q.filters[-1], ('f[endswith]', 'lo')) self.assertEqual( urllib.unquote(q._qs()), 'a=b&a[!=]=101&b[<]=4&b[<=]=5&c[>]=123&c[>=]=44&d[in]=1,2,3&' 'd[!in]=6,33,55&e[contains]=it&e[!contains]=soda&f[startswith]=la&' 'f[endswith]=lo')
def test_iter(self): page1 = Mock() page1.items = [0, 1, 2, 3] page1.total = 10 page2 = Mock() page2.items = [4, 5, 6, 7] page2.total = 10 page3 = Mock() page3.items = [8, 9] page3.total = 10 page1.next = page2 page2.next = page3 page3.next = None with patch.object(Resource1, 'page_cls') as page_cls: with patch.object(Resource1.client, '_op') as _op: page_cls.side_effect = [page1, page1, page2, page3] resp = _op.return_value resp.data = { '_type': 'page', } uri = '/a/uri' q = wac.Query(Resource1, uri, 4) vs = [v for v in q] self.assertEqual(range(10), vs)
def test_sort(self): uri = '/a/uri' q = wac.Query(Resource1, uri, 25) q.sort(Resource1.f.me.asc()) self.assertEqual(q.sorts[-1], ('sort', 'me,asc')) q.sort(Resource1.f.u.desc()) self.assertEqual(q.sorts[-1], ('sort', 'u,desc')) self.assertEqual(urllib.unquote(q._qs()), 'sort=me,asc&sort=u,desc')
def test_first_cached(self, _page): page = Mock(items=[1, 2, 3], offset=0, total=3) _page.return_value = page uri = '/ur/is' q = wac.Query(Resource1, uri, 3) expected_item = 1 item = q.first() self.assertEqual(expected_item, item) self.assertEqual(_page.call_count, 1)
def test_count(self, Page, _page): page1 = Mock(items=[1, 2, 3], total=8) def _page_patch(key, data=None): return [page1][key] _page.side_effect = _page_patch uri = '/ur/is' q = wac.Query(Resource1, uri, 3) expected_count = 8 count = q.count() self.assertEqual(expected_count, count)
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, data=None): return [page1, page2, page3][key] _page.side_effect = _page_patch uri = '/ur/is' q = wac.Query(Resource1, uri, 3) expected_items = range(1, 9) for i in xrange(q.count()): self.assertEqual(q[i], expected_items[i])
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 = '/ur/is' q = wac.Query(Resource1, uri, 3) items = range(1, 9) self.assertEqual(q[:], items[:]) self.assertEqual(q[::-1], items[::-1]) self.assertEqual(q[6:4], items[6:4]) self.assertEqual(q[6:4:12], items[6:4:12]) self.assertEqual(q[2:7:2], items[2:7:2]) self.assertEqual(q[6:1:-2], items[6:1:-2])
def test_first(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) page1.previous = None page1.next = page2 page2.previous = page1 page2.next = page3 page3.previous = page2 page3.next = None def _page_patch(key, size=None, data=None): return [page1, page2, page3][key] _page.side_effect = _page_patch uri = '/ur/is' q = wac.Query(Resource1, uri, 3) expected_item = 1 item = q.first() self.assertEqual(expected_item, item)
def test_all(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) page1.previous = None page1.next = page2 page2.previous = page1 page2.next = page3 page3.previous = page2 page3.next = None def _page_patch(key, data=None): return [page1, page2, page3][key] _page.side_effect = _page_patch uri = '/ur/is' q = wac.Query(Resource1, uri, 3) expected_items = range(1, 9) items = q.all() self.assertEqual(expected_items, items) self.assertEqual(q.pagination.current, page1)