You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
3.5 KiB
90 lines
3.5 KiB
# |
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may |
|
# not use this file except in compliance with the License. You may obtain |
|
# a copy of the License at |
|
# |
|
# http://www.apache.org/licenses/LICENSE-2.0 |
|
# |
|
# Unless required by applicable law or agreed to in writing, software |
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
|
# License for the specific language governing permissions and limitations |
|
# under the License. |
|
|
|
import mock |
|
from six.moves.urllib import parse as urlparse |
|
|
|
from heat.api.openstack.v1.views import views_common |
|
from heat.tests import common |
|
|
|
|
|
class TestViewsCommon(common.HeatTestCase): |
|
def setUp(self): |
|
super(TestViewsCommon, self).setUp() |
|
self.request = mock.Mock() |
|
self.stack1 = { |
|
'id': 'id1', |
|
} |
|
self.stack2 = { |
|
'id': 'id2', |
|
} |
|
|
|
def setUpGetCollectionLinks(self): |
|
self.items = [self.stack1, self.stack2] |
|
self.request.params = {'limit': '2'} |
|
self.request.path_url = "http://example.com/fake/path" |
|
|
|
def test_get_collection_links_creates_next(self): |
|
self.setUpGetCollectionLinks() |
|
links = views_common.get_collection_links(self.request, self.items) |
|
|
|
expected = 'http://example.com/fake/path?marker=id2&limit=2' |
|
next_link = filter(lambda link: link['rel'] == 'next', links).pop() |
|
self.assertEqual('next', next_link['rel']) |
|
self.assertEqual(expected, next_link['href']) |
|
|
|
def test_get_collection_links_doesnt_create_next_if_no_limit(self): |
|
self.setUpGetCollectionLinks() |
|
del self.request.params['limit'] |
|
links = views_common.get_collection_links(self.request, self.items) |
|
|
|
self.assertEqual([], links) |
|
|
|
def test_get_collection_links_doesnt_create_next_if_page_not_full(self): |
|
self.setUpGetCollectionLinks() |
|
self.request.params['limit'] = '10' |
|
links = views_common.get_collection_links(self.request, self.items) |
|
|
|
self.assertEqual([], links) |
|
|
|
def test_get_collection_links_overwrites_url_marker(self): |
|
self.setUpGetCollectionLinks() |
|
self.request.params = {'limit': '2', 'marker': 'some_marker'} |
|
links = views_common.get_collection_links(self.request, self.items) |
|
|
|
expected = 'http://example.com/fake/path?marker=id2&limit=2' |
|
next_link = filter(lambda link: link['rel'] == 'next', links).pop() |
|
self.assertEqual(expected, next_link['href']) |
|
|
|
def test_get_collection_links_does_not_overwrite_other_params(self): |
|
self.setUpGetCollectionLinks() |
|
self.request.params = {'limit': '2', 'foo': 'bar'} |
|
links = views_common.get_collection_links(self.request, self.items) |
|
|
|
next_link = filter(lambda link: link['rel'] == 'next', links).pop() |
|
url = next_link['href'] |
|
query_string = urlparse.urlparse(url).query |
|
params = {} |
|
params.update(urlparse.parse_qsl(query_string)) |
|
self.assertEqual('2', params['limit']) |
|
self.assertEqual('bar', params['foo']) |
|
|
|
def test_get_collection_links_handles_invalid_limits(self): |
|
self.setUpGetCollectionLinks() |
|
self.request.params = {'limit': 'foo'} |
|
links = views_common.get_collection_links(self.request, self.items) |
|
self.assertEqual([], links) |
|
|
|
self.request.params = {'limit': None} |
|
links = views_common.get_collection_links(self.request, self.items) |
|
self.assertEqual([], links)
|
|
|