示例#1
0
 def _test_list_with_pagination_reverse(self,
                                        resource,
                                        items,
                                        sort,
                                        limit,
                                        expected_page_num,
                                        resources=None,
                                        query_params='',
                                        id=None,
                                        subresource=None,
                                        subresources=None):
     if not resources:
         resources = '%ss' % resource
     if subresource and not subresources:
         subresources = '%ss' % subresource
     resource = resource.replace('-', '_')
     api = self._api_for_resource(resources)
     if subresource:
         marker = items[-1][subresource]['id']
     else:
         marker = items[-1][resource]['id']
     query_str = query_params + '&' if query_params else ''
     query_str = query_str + ("limit=%s&page_reverse=True&"
                              "sort_key=%s&sort_dir=%s&"
                              "marker=%s") % (limit, sort[0], sort[1],
                                              marker)
     req = self.new_list_request(resources,
                                 params=query_str,
                                 id=id,
                                 subresource=subresources)
     if subresource:
         resource = subresource
     if subresources:
         resources = subresources
     item_res = [items[-1][resource]]
     page_num = 0
     resources = resources.replace('-', '_')
     while req:
         page_num = page_num + 1
         res = self.deserialize(self.fmt, req.get_response(api))
         self.assertThat(len(res[resources]), matchers.LessThan(limit + 1))
         res[resources].reverse()
         item_res = item_res + res[resources]
         req = None
         if '%s_links' % resources in res:
             for link in res['%s_links' % resources]:
                 if link['rel'] == 'previous':
                     content_type = 'application/%s' % self.fmt
                     req = testlib_api.create_request(
                         link['href'], '', content_type)
                     self.assertEqual(len(res[resources]), limit)
     self.assertEqual(expected_page_num, page_num)
     expected_res = [item[resource]['id'] for item in items]
     expected_res.reverse()
     self.assertEqual(expected_res, [n['id'] for n in item_res])
    def _do_request(self, method, path, data=None, params=None, action=None):
        content_type = "application/json"
        body = None
        if data is not None:  # empty dict is valid
            body = wsgi.Serializer().serialize(data, content_type)

        req = testlib_api.create_request(path, body, content_type, method, query_string=params)
        res = req.get_response(self._api)
        if res.status_code >= 400:
            raise webexc.HTTPClientError(detail=res.body, code=res.status_code)
        if res.status_code != webexc.HTTPNoContent.code:
            return res.json
示例#3
0
 def _test_list_with_pagination_reverse(self, resource, items, sort,
                                        limit, expected_page_num,
                                        resources=None,
                                        query_params='',
                                        id=None,
                                        subresource=None,
                                        subresources=None):
     if not resources:
         resources = '%ss' % resource
     if subresource and not subresources:
         subresources = '%ss' % subresource
     resource = resource.replace('-', '_')
     api = self._api_for_resource(resources)
     if subresource:
         marker = items[-1][subresource]['id']
     else:
         marker = items[-1][resource]['id']
     query_str = query_params + '&' if query_params else ''
     query_str = query_str + ("limit=%s&page_reverse=True&"
                              "sort_key=%s&sort_dir=%s&"
                              "marker=%s") % (limit, sort[0], sort[1],
                                              marker)
     req = self.new_list_request(resources, params=query_str, id=id,
                                 subresource=subresources)
     if subresource:
         resource = subresource
     if subresources:
         resources = subresources
     item_res = [items[-1][resource]]
     page_num = 0
     resources = resources.replace('-', '_')
     while req:
         page_num = page_num + 1
         res = self.deserialize(self.fmt, req.get_response(api))
         self.assertThat(len(res[resources]),
                         matchers.LessThan(limit + 1))
         res[resources].reverse()
         item_res = item_res + res[resources]
         req = None
         if '%s_links' % resources in res:
             for link in res['%s_links' % resources]:
                 if link['rel'] == 'previous':
                     content_type = 'application/%s' % self.fmt
                     req = testlib_api.create_request(link['href'],
                                                      '', content_type)
                     self.assertEqual(len(res[resources]),
                                      limit)
     self.assertEqual(expected_page_num, page_num)
     expected_res = [item[resource]['id'] for item in items]
     expected_res.reverse()
     self.assertEqual(expected_res, [n['id'] for n in item_res])
示例#4
0
    def _do_request(self, method, path, data=None, params=None, action=None):
        content_type = 'application/json'
        body = None
        if data is not None:  # empty dict is valid
            body = wsgi.Serializer().serialize(data, content_type)

        req = testlib_api.create_request(
            path, body, content_type,
            method, query_string=params)
        res = req.get_response(self._api)
        if res.status_code >= 400:
            raise webexc.HTTPClientError(detail=res.body, code=res.status_code)
        if res.status_code != webexc.HTTPNoContent.code:
            return res.json