Merge "Fix version return incorrect when endpoint url end without /"
This commit is contained in:
commit
15e8843529
@ -68,6 +68,8 @@ class ViewBuilder(object):
|
|||||||
def _generate_href(self, version='v3', path=None):
|
def _generate_href(self, version='v3', path=None):
|
||||||
"""Create a URL that refers to a specific version_number."""
|
"""Create a URL that refers to a specific version_number."""
|
||||||
base_url = self._get_base_url_without_version()
|
base_url = self._get_base_url_without_version()
|
||||||
|
# Aways add '/' to base_url end for urljoin href url
|
||||||
|
base_url = base_url.rstrip('/') + '/'
|
||||||
rel_version = version.lstrip('/')
|
rel_version = version.lstrip('/')
|
||||||
href = urllib.parse.urljoin(base_url, rel_version).rstrip('/') + '/'
|
href = urllib.parse.urljoin(base_url, rel_version).rstrip('/') + '/'
|
||||||
if path:
|
if path:
|
||||||
|
@ -27,6 +27,7 @@ class FakeRequest(object):
|
|||||||
|
|
||||||
|
|
||||||
URL_BASE = 'http://localhost/volume/'
|
URL_BASE = 'http://localhost/volume/'
|
||||||
|
URL_BASE_NO_SLASH = 'http://localhost/volume'
|
||||||
FAKE_HREF = URL_BASE + 'v1/'
|
FAKE_HREF = URL_BASE + 'v1/'
|
||||||
|
|
||||||
FAKE_VERSIONS = {
|
FAKE_VERSIONS = {
|
||||||
@ -72,6 +73,10 @@ class ViewBuilderTestCase(test.TestCase):
|
|||||||
request = FakeRequest(URL_BASE)
|
request = FakeRequest(URL_BASE)
|
||||||
return versions.get_view_builder(request)
|
return versions.get_view_builder(request)
|
||||||
|
|
||||||
|
def _get_builder_no_slash(self):
|
||||||
|
request = FakeRequest(URL_BASE_NO_SLASH)
|
||||||
|
return versions.get_view_builder(request)
|
||||||
|
|
||||||
def test_build_versions(self):
|
def test_build_versions(self):
|
||||||
|
|
||||||
self.mock_object(versions.ViewBuilder,
|
self.mock_object(versions.ViewBuilder,
|
||||||
@ -79,11 +84,14 @@ class ViewBuilderTestCase(test.TestCase):
|
|||||||
return_value=FAKE_LINKS)
|
return_value=FAKE_LINKS)
|
||||||
|
|
||||||
result = self._get_builder().build_versions(FAKE_VERSIONS)
|
result = self._get_builder().build_versions(FAKE_VERSIONS)
|
||||||
|
result_no_slash = self._get_builder_no_slash().build_versions(
|
||||||
|
FAKE_VERSIONS)
|
||||||
|
|
||||||
expected = {'versions': list(FAKE_VERSIONS.values())}
|
expected = {'versions': list(FAKE_VERSIONS.values())}
|
||||||
expected['versions'][0]['links'] = FAKE_LINKS
|
expected['versions'][0]['links'] = FAKE_LINKS
|
||||||
|
|
||||||
self.assertEqual(expected, result)
|
self.assertEqual(expected, result)
|
||||||
|
self.assertEqual(expected, result_no_slash)
|
||||||
|
|
||||||
def test_build_version(self):
|
def test_build_version(self):
|
||||||
|
|
||||||
@ -92,11 +100,14 @@ class ViewBuilderTestCase(test.TestCase):
|
|||||||
return_value=FAKE_LINKS)
|
return_value=FAKE_LINKS)
|
||||||
|
|
||||||
result = self._get_builder()._build_version(FAKE_VERSIONS['v1.0'])
|
result = self._get_builder()._build_version(FAKE_VERSIONS['v1.0'])
|
||||||
|
result_no_slash = self._get_builder_no_slash()._build_version(
|
||||||
|
FAKE_VERSIONS['v1.0'])
|
||||||
|
|
||||||
expected = copy.deepcopy(FAKE_VERSIONS['v1.0'])
|
expected = copy.deepcopy(FAKE_VERSIONS['v1.0'])
|
||||||
expected['links'] = FAKE_LINKS
|
expected['links'] = FAKE_LINKS
|
||||||
|
|
||||||
self.assertEqual(expected, result)
|
self.assertEqual(expected, result)
|
||||||
|
self.assertEqual(expected, result_no_slash)
|
||||||
|
|
||||||
def test_build_links(self):
|
def test_build_links(self):
|
||||||
|
|
||||||
@ -105,14 +116,19 @@ class ViewBuilderTestCase(test.TestCase):
|
|||||||
return_value=FAKE_HREF)
|
return_value=FAKE_HREF)
|
||||||
|
|
||||||
result = self._get_builder()._build_links(FAKE_VERSIONS['v1.0'])
|
result = self._get_builder()._build_links(FAKE_VERSIONS['v1.0'])
|
||||||
|
result_no_slash = self._get_builder_no_slash()._build_links(
|
||||||
|
FAKE_VERSIONS['v1.0'])
|
||||||
|
|
||||||
self.assertEqual(FAKE_LINKS, result)
|
self.assertEqual(FAKE_LINKS, result)
|
||||||
|
self.assertEqual(FAKE_LINKS, result_no_slash)
|
||||||
|
|
||||||
def test_generate_href_defaults(self):
|
def test_generate_href_defaults(self):
|
||||||
|
|
||||||
result = self._get_builder()._generate_href()
|
result = self._get_builder()._generate_href()
|
||||||
|
result_no_slash = self._get_builder_no_slash()._generate_href()
|
||||||
|
|
||||||
self.assertEqual(URL_BASE + 'v3/', result)
|
self.assertEqual(URL_BASE + 'v3/', result)
|
||||||
|
self.assertEqual(URL_BASE + 'v3/', result_no_slash)
|
||||||
|
|
||||||
@ddt.data(
|
@ddt.data(
|
||||||
('v2', None, URL_BASE + 'v2/'),
|
('v2', None, URL_BASE + 'v2/'),
|
||||||
@ -125,8 +141,11 @@ class ViewBuilderTestCase(test.TestCase):
|
|||||||
|
|
||||||
result = self._get_builder()._generate_href(version=version,
|
result = self._get_builder()._generate_href(version=version,
|
||||||
path=path)
|
path=path)
|
||||||
|
result_no_slash = self._get_builder_no_slash()._generate_href(
|
||||||
|
version=version, path=path)
|
||||||
|
|
||||||
self.assertEqual(expected, result)
|
self.assertEqual(expected, result)
|
||||||
|
self.assertEqual(expected, result_no_slash)
|
||||||
|
|
||||||
@ddt.data(
|
@ddt.data(
|
||||||
('http://1.1.1.1/', 'http://1.1.1.1/'),
|
('http://1.1.1.1/', 'http://1.1.1.1/'),
|
||||||
|
Loading…
Reference in New Issue
Block a user