If a role is already in a plan return a 409
Change-Id: Ib2eb78c554bc15e73d57a6fe83a69eb5afcf7456
This commit is contained in:
parent
3e1fdad58a
commit
44bcead218
@ -16,6 +16,7 @@ from pecan import rest
|
|||||||
from wsmeext import pecan as wsme_pecan
|
from wsmeext import pecan as wsme_pecan
|
||||||
|
|
||||||
from tuskar.api.controllers.v2 import models
|
from tuskar.api.controllers.v2 import models
|
||||||
|
from tuskar.common import exception
|
||||||
from tuskar.manager.plan import PlansManager
|
from tuskar.manager.plan import PlansManager
|
||||||
from tuskar.manager.role import RoleManager
|
from tuskar.manager.role import RoleManager
|
||||||
|
|
||||||
@ -56,10 +57,20 @@ class RolesController(rest.RestController):
|
|||||||
|
|
||||||
:return: modified plan
|
:return: modified plan
|
||||||
:rtype: tuskar.api.controllers.v2.models.Plan
|
:rtype: tuskar.api.controllers.v2.models.Plan
|
||||||
|
|
||||||
|
:raises: tuskar.common.exception.PlanAlreadyHasRole if the role has
|
||||||
|
already been added to the plan.
|
||||||
"""
|
"""
|
||||||
LOG.debug('Adding role: %s' % role.uuid)
|
LOG.debug('Adding role: %s' % role.uuid)
|
||||||
manager = PlansManager()
|
manager = PlansManager()
|
||||||
updated_plan = manager.add_role_to_plan(plan_uuid, role.uuid)
|
try:
|
||||||
|
updated_plan = manager.add_role_to_plan(plan_uuid, role.uuid)
|
||||||
|
except ValueError:
|
||||||
|
LOG.debug('The role has already been added to the plan.')
|
||||||
|
raise exception.PlanAlreadyHasRole(
|
||||||
|
plan_uuid=plan_uuid,
|
||||||
|
role_uuid=role.uuid
|
||||||
|
)
|
||||||
transfer_plan = models.Plan.from_tuskar_model(updated_plan)
|
transfer_plan = models.Plan.from_tuskar_model(updated_plan)
|
||||||
return transfer_plan
|
return transfer_plan
|
||||||
|
|
||||||
|
@ -197,3 +197,7 @@ class PlanNotFound(NotFound):
|
|||||||
|
|
||||||
class PlanExists(DuplicateEntry):
|
class PlanExists(DuplicateEntry):
|
||||||
message = _("Plan with name %(name)s already exists.")
|
message = _("Plan with name %(name)s already exists.")
|
||||||
|
|
||||||
|
|
||||||
|
class PlanAlreadyHasRole(DuplicateEntry):
|
||||||
|
message = _("Plan %(plan_uuid)s already has role %(role_uuid)s.")
|
||||||
|
@ -74,6 +74,20 @@ class RolesTests(base.TestCase):
|
|||||||
self.assertEqual(result['uuid'], 'a')
|
self.assertEqual(result['uuid'], 'a')
|
||||||
self.assertEqual(result['name'], 'n')
|
self.assertEqual(result['name'], 'n')
|
||||||
|
|
||||||
|
@mock.patch('tuskar.manager.plan.PlansManager.add_role_to_plan')
|
||||||
|
def test_post_duplicate(self, mock_add):
|
||||||
|
# Setup
|
||||||
|
mock_add.side_effect = ValueError()
|
||||||
|
|
||||||
|
# Test
|
||||||
|
role_data = {'uuid': 'qwerty12345'}
|
||||||
|
response = self.app.post_json(URL_PLAN_ROLES, params=role_data,
|
||||||
|
status=409)
|
||||||
|
|
||||||
|
# Verify
|
||||||
|
mock_add.assert_called_once_with('plan_uuid', 'qwerty12345')
|
||||||
|
self.assertEqual(response.status_int, 409)
|
||||||
|
|
||||||
@mock.patch('tuskar.manager.plan.PlansManager.remove_role_from_plan')
|
@mock.patch('tuskar.manager.plan.PlansManager.remove_role_from_plan')
|
||||||
def test_delete(self, mock_remove):
|
def test_delete(self, mock_remove):
|
||||||
# Setup
|
# Setup
|
||||||
|
Loading…
x
Reference in New Issue
Block a user