Add 'links' to implied roles response

The API spec claims that a GET request for implied roles will provide a
link back to itself in the response[1]. This patch makes it actually do
that.

[1] http://specs.openstack.org/openstack/keystone-specs/api/v3/identity-api-v3.html#list-implied-roles-for-role

Closes-bug: #1564129

Change-Id: I43571cc8d759922a4d9107cadba590cf14d25b20
This commit is contained in:
Colleen Murphy 2016-03-31 13:22:17 -07:00 committed by Samuel de Medeiros Queiroz
parent 3ff204a414
commit 248f0278f9
2 changed files with 14 additions and 8 deletions

View File

@ -474,6 +474,9 @@ class ImpliedRolesV3(controller.V3Controller):
implied_response = self._implied_role_stanza(
endpoint, implied_role)
response["role_inference"]['implies'].append(implied_response)
response["links"] = {
"self": endpoint + "/v3/roles/" + prior_id + "/implies"
}
return response
def _populate_implied_role_response(self, endpoint, prior_id, implied_id):

View File

@ -2437,17 +2437,20 @@ class ImpliedRolesTests(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin,
def _assert_expected_implied_role_response(
self, expected_prior_id, expected_implied_ids):
r = self.get('/roles/%s/implies' % expected_prior_id)
response = r.json["role_inference"]
self.assertEqual(expected_prior_id, response['prior_role']['id'])
response = r.json
role_inference = response['role_inference']
self.assertEqual(expected_prior_id, role_inference['prior_role']['id'])
prior_link = '/v3/roles/' + expected_prior_id + '/implies'
self.assertThat(response['links']['self'],
matchers.EndsWith(prior_link))
actual_implied_ids = [implied['id'] for implied in response['implies']]
actual_implied_ids = [implied['id']
for implied in role_inference['implies']]
for expected_id in expected_implied_ids:
self.assertIn(expected_id, actual_implied_ids)
self.assertEqual(len(expected_implied_ids), len(response['implies']))
self.assertItemsEqual(expected_implied_ids, actual_implied_ids)
self.assertIsNotNone(response['prior_role']['links']['self'])
for implied in response['implies']:
self.assertIsNotNone(role_inference['prior_role']['links']['self'])
for implied in role_inference['implies']:
self.assertIsNotNone(implied['links']['self'])
def _assert_two_roles_implied(self):