Merge "Disallow updating baymodel when it is referenced"
This commit is contained in:
commit
cfae69474a
|
@ -319,14 +319,13 @@ class Connection(api.Connection):
|
|||
except NoResultFound:
|
||||
raise exception.BayModelNotFound(baymodel=baymodel_name)
|
||||
|
||||
def destroy_baymodel(self, baymodel_id):
|
||||
def is_baymodel_referenced(session, baymodel_uuid):
|
||||
"""Checks whether the baymodel is referenced by bay(s)."""
|
||||
query = model_query(models.Bay, session=session)
|
||||
query = self._add_bays_filters(query,
|
||||
{'baymodel_id': baymodel_uuid})
|
||||
return query.count() != 0
|
||||
def is_baymodel_referenced(self, session, baymodel_uuid):
|
||||
"""Checks whether the baymodel is referenced by bay(s)."""
|
||||
query = model_query(models.Bay, session=session)
|
||||
query = self._add_bays_filters(query, {'baymodel_id': baymodel_uuid})
|
||||
return query.count() != 0
|
||||
|
||||
def destroy_baymodel(self, baymodel_id):
|
||||
session = get_session()
|
||||
with session.begin():
|
||||
query = model_query(models.BayModel, session=session)
|
||||
|
@ -337,7 +336,7 @@ class Connection(api.Connection):
|
|||
except NoResultFound:
|
||||
raise exception.BayModelNotFound(baymodel=baymodel_id)
|
||||
|
||||
if is_baymodel_referenced(session, baymodel_ref['uuid']):
|
||||
if self.is_baymodel_referenced(session, baymodel_ref['uuid']):
|
||||
raise exception.BayModelReferenced(baymodel=baymodel_id)
|
||||
|
||||
query.delete()
|
||||
|
@ -360,6 +359,9 @@ class Connection(api.Connection):
|
|||
except NoResultFound:
|
||||
raise exception.BayModelNotFound(baymodel=baymodel_id)
|
||||
|
||||
if self.is_baymodel_referenced(session, ref['uuid']):
|
||||
raise exception.BayModelReferenced(baymodel=baymodel_id)
|
||||
|
||||
ref.update(values)
|
||||
return ref
|
||||
|
||||
|
|
|
@ -261,6 +261,20 @@ class TestPatch(api_base.FunctionalTest):
|
|||
self.assertEqual('application/json', response.content_type)
|
||||
self.assertTrue(response.json['error_message'])
|
||||
|
||||
def test_update_baymodel_with_bay(self):
|
||||
baymodel = obj_utils.create_test_baymodel(self.context)
|
||||
obj_utils.create_test_bay(self.context, baymodel_id=baymodel.uuid)
|
||||
|
||||
response = self.patch_json('/baymodels/%s' % baymodel.uuid,
|
||||
[{'path': '/name',
|
||||
'value': 'bay_model_example_B',
|
||||
'op': 'replace'}],
|
||||
expect_errors=True)
|
||||
self.assertEqual(400, response.status_int)
|
||||
self.assertEqual('application/json', response.content_type)
|
||||
self.assertTrue(response.json['error_message'])
|
||||
self.assertIn(baymodel.uuid, response.json['error_message'])
|
||||
|
||||
@mock.patch.object(magnum_policy, 'enforce')
|
||||
def test_update_public_baymodel_success(self, mock_policy):
|
||||
mock_policy.return_value = True
|
||||
|
|
Loading…
Reference in New Issue