Merge "Ensure repeated member deletion fails with 404" into stable/folsom
This commit is contained in:
commit
3389f067d5
|
@ -710,11 +710,15 @@ def image_member_delete(context, memb_ref, session=None):
|
|||
return memb_ref
|
||||
|
||||
|
||||
def image_member_find(context, image_id=None, member=None, session=None):
|
||||
def image_member_find(context, image_id=None, member=None, session=None,
|
||||
show_deleted=True):
|
||||
"""Find all members that meet the given criteria
|
||||
|
||||
:param image_id: identifier of image entity
|
||||
:param member: tenant to which membership has been granted
|
||||
:param session: an existing sqlalchemy session to use
|
||||
:param show_deleted: set to False to override use of the context to
|
||||
determine if deleted memberships are included
|
||||
"""
|
||||
session = session or get_session()
|
||||
|
||||
|
@ -726,7 +730,7 @@ def image_member_find(context, image_id=None, member=None, session=None):
|
|||
query = query.filter_by(image_id=image_id)
|
||||
if member is not None:
|
||||
query = query.filter_by(member=member)
|
||||
if not can_show_deleted(context):
|
||||
if not (show_deleted and can_show_deleted(context)):
|
||||
query = query.filter_by(deleted=False)
|
||||
|
||||
return query.all()
|
||||
|
|
|
@ -278,7 +278,8 @@ class Controller(object):
|
|||
members = self.db_api.image_member_find(req.context,
|
||||
image_id=image_id,
|
||||
member=id,
|
||||
session=session)
|
||||
session=session,
|
||||
show_deleted=False)
|
||||
if members:
|
||||
self.db_api.image_member_delete(req.context,
|
||||
members[0],
|
||||
|
|
|
@ -1918,6 +1918,28 @@ class TestRegistryAPI(base.IsolatedUnitTest):
|
|||
self.assertEquals(res.status_int, webob.exc.HTTPNotFound.code)
|
||||
self.assertTrue('Membership could not be found' in res.body)
|
||||
|
||||
def test_delete_member_existing(self):
|
||||
"""
|
||||
Tests deleting an existing member is handled correctly
|
||||
"""
|
||||
member = dict(image_id=UUID2, member='pattieblack', can_share=False)
|
||||
db_api.image_member_create(self.context, member)
|
||||
|
||||
self.api = test_utils.FakeAuthMiddleware(rserver.API(self.mapper),
|
||||
is_admin=True)
|
||||
req = webob.Request.blank('/images/%s/members/pattieblack' % UUID2)
|
||||
req.method = 'DELETE'
|
||||
|
||||
res = req.get_response(self.api)
|
||||
self.assertEquals(res.status_int, webob.exc.HTTPNoContent.code)
|
||||
|
||||
req = webob.Request.blank('/images/%s/members/pattieblack' % UUID2)
|
||||
req.method = 'DELETE'
|
||||
|
||||
res = req.get_response(self.api)
|
||||
self.assertEquals(res.status_int, webob.exc.HTTPNotFound.code)
|
||||
self.assertTrue('Membership could not be found' in res.body)
|
||||
|
||||
|
||||
class TestGlanceAPI(base.IsolatedUnitTest):
|
||||
def setUp(self):
|
||||
|
|
Loading…
Reference in New Issue