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 tuskar.api.controllers.v2 import models
|
||||
from tuskar.common import exception
|
||||
from tuskar.manager.plan import PlansManager
|
||||
from tuskar.manager.role import RoleManager
|
||||
|
||||
@ -56,10 +57,20 @@ class RolesController(rest.RestController):
|
||||
|
||||
:return: modified 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)
|
||||
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)
|
||||
return transfer_plan
|
||||
|
||||
|
@ -197,3 +197,7 @@ class PlanNotFound(NotFound):
|
||||
|
||||
class PlanExists(DuplicateEntry):
|
||||
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['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')
|
||||
def test_delete(self, mock_remove):
|
||||
# Setup
|
||||
|
Loading…
x
Reference in New Issue
Block a user