diff --git a/keystoneclient/tests/unit/v3/test_roles.py b/keystoneclient/tests/unit/v3/test_roles.py index bcf2948ec..7dfd7f2b3 100644 --- a/keystoneclient/tests/unit/v3/test_roles.py +++ b/keystoneclient/tests/unit/v3/test_roles.py @@ -621,11 +621,34 @@ class RoleTests(utils.ClientTestCase, utils.CrudTests): def test_implied_role_create(self): prior_role_id = uuid.uuid4().hex implied_role_id = uuid.uuid4().hex + test_json = { + "role_inference": { + "prior_role": { + "id": prior_role_id, + "links": {}, + "name": "prior role name" + }, + "implies": { + "id": implied_role_id, + "links": {}, + "name": "implied role name" + } + }, + "links": {} + } + self.stub_url('PUT', ['roles', prior_role_id, 'implies', implied_role_id], + json=test_json, status_code=200) - self.manager.create_implied(prior_role_id, implied_role_id) + returned_rule = self.manager.create_implied( + prior_role_id, implied_role_id) + + self.assertEqual(test_json['role_inference']['implies'], + returned_rule.implies) + self.assertEqual(test_json['role_inference']['prior_role'], + returned_rule.prior_role) def test_implied_role_delete(self): prior_role_id = uuid.uuid4().hex diff --git a/keystoneclient/v3/roles.py b/keystoneclient/v3/roles.py index 7d5742c9b..c08385645 100644 --- a/keystoneclient/v3/roles.py +++ b/keystoneclient/v3/roles.py @@ -136,7 +136,8 @@ class RoleManager(base.CrudManager): """ url_tail = self._implied_role_url_tail(prior_role, implied_role) - self.client.put("/roles" + url_tail, **kwargs) + resp, body = self.client.put("/roles" + url_tail, **kwargs) + return self.resource_class(self, body['role_inference']) def delete_implied(self, prior_role, implied_role, **kwargs): """Delete an inference rule.