Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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')
Ejemplo n.º 4
0
 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')
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
 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')
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
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, 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])
Ejemplo n.º 10
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 = '/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])
Ejemplo n.º 11
0
    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)
Ejemplo n.º 12
0
    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)