Updated remove_version_from_href to be more intelligent

Added tests
This commit is contained in:
Alex Meade
2011-07-12 12:01:13 -04:00
parent a8c9082c70
commit 495137fb38
2 changed files with 51 additions and 2 deletions

View File

@@ -136,11 +136,21 @@ def get_id_from_href(href):
raise webob.exc.HTTPBadRequest(_('could not parse id from href'))
def remove_version_from_href(base_url):
def remove_version_from_href(href):
"""Removes the api version from the href.
Given: 'http://www.nova.com/v1.1/123'
Returns: 'http://www.nova.com/123'
"""
return base_url.rsplit('/', 1).pop(0)
try:
#matches /v#.#
new_href = re.sub(r'[/][v][0-9]*.[0-9]*', '', href)
if new_href == href:
msg = _('href does not contain version')
raise webob.exc.HTTPBadRequest(explanation=msg)
return new_href
except:
LOG.debug(_("Error removing version from href: %s") % href)
msg = _('could not parse version from href')
raise webob.exc.HTTPBadRequest(explanation=msg)

View File

@@ -190,3 +190,42 @@ class PaginationParamsTest(test.TestCase):
req = Request.blank('/?limit=20&marker=40')
self.assertEqual(common.get_pagination_params(req),
{'marker': 40, 'limit': 20})
class MiscFunctionsTest(test.TestCase):
def test_remove_version_from_href(self):
fixture = 'http://www.testsite.com/v1.1/images'
expected = 'http://www.testsite.com/images'
actual = common.remove_version_from_href(fixture)
self.assertEqual(actual, expected)
def test_remove_version_from_href_2(self):
fixture = 'http://www.testsite.com/v1.1/'
expected = 'http://www.testsite.com/'
actual = common.remove_version_from_href(fixture)
self.assertEqual(actual, expected)
def test_remove_version_from_href_bad_request(self):
fixture = 'http://www.testsite.com/1.1/images'
self.assertRaises(webob.exc.HTTPBadRequest,
common.remove_version_from_href,
fixture)
def test_get_id_from_href(self):
fixture = 'http://www.testsite.com/dir/45'
actual = common.get_id_from_href(fixture)
expected = 45
self.assertEqual(actual, expected)
def test_get_id_from_href_bad_request(self):
fixture = 'http://45'
self.assertRaises(webob.exc.HTTPBadRequest,
common.get_id_from_href,
fixture)