Add categories to resource links
Text rendering of OCCI includes the category of the link associated to a resource. This helps clients to select the links based on their kinds. Change-Id: Ibd803cb26566e40b5fc589cdea6d111eaec36e03 Closes-Bug: #1656844
This commit is contained in:
parent
e2207d7c12
commit
bb194c3e8e
@ -172,6 +172,10 @@ class LinkRenderer(EntityRenderer):
|
||||
"self": url}
|
||||
l = '<%(location)s>; rel="%(scheme)s%(term)s"; self="%(self)s"' % d
|
||||
ret.append(l)
|
||||
categories = [self.obj.kind.type_id]
|
||||
for m in self.obj.mixins:
|
||||
categories.append(m.type_id)
|
||||
ret.append('category="%s"' % ' '.join(categories))
|
||||
for a in self.obj.attributes:
|
||||
if self.obj.attributes[a].value is None:
|
||||
continue
|
||||
|
@ -151,3 +151,12 @@ class BaseRendererTest(ooi.tests.base.TestCase):
|
||||
r = self.renderer.get_renderer(r1)
|
||||
observed = r.render()
|
||||
self.assertResourceLink(r1, r2, observed)
|
||||
|
||||
def test_resource_link_with_mixins(self):
|
||||
r1 = resource.Resource(None, [])
|
||||
r2 = resource.Resource(None, [])
|
||||
r1.link(r2, [mixin.Mixin("s1", "term", "title"),
|
||||
mixin.Mixin("s2", "term", "title")])
|
||||
r = self.renderer.get_renderer(r1)
|
||||
observed = r.render()
|
||||
self.assertResourceLink(r1, r2, observed)
|
||||
|
@ -139,12 +139,18 @@ class TestOCCIHeaderRendering(base.BaseRendererTest):
|
||||
self.assertEqual(rel, parsed[1])
|
||||
self_ = 'self="%s"' % link.location
|
||||
self.assertEqual(self_, parsed[2])
|
||||
expected_cats = [link.kind.type_id]
|
||||
expected_cats.extend([m.type_id for m in link.mixins])
|
||||
category_field = parsed[3].split('=')
|
||||
self.assertEqual('category', category_field[0])
|
||||
link_cats = category_field[1][1:-1].split()
|
||||
self.assertItemsEqual(expected_cats, link_cats)
|
||||
source = 'occi.core.source="%s"' % obj1.location
|
||||
self.assertIn(source, parsed[3:])
|
||||
self.assertIn(source, parsed[4:])
|
||||
target = 'occi.core.target="%s"' % obj2.location
|
||||
self.assertIn(target, parsed[3:])
|
||||
self.assertIn(target, parsed[4:])
|
||||
id = 'occi.core.id="%s"' % link.id
|
||||
self.assertIn(id, parsed[3:])
|
||||
self.assertIn(id, parsed[4:])
|
||||
break
|
||||
else:
|
||||
self.fail("One link was expected")
|
||||
|
@ -89,6 +89,8 @@ class TestOCCIJsonRendering(base.BaseRendererTest):
|
||||
},
|
||||
"title": obj.title,
|
||||
}
|
||||
if obj.mixins:
|
||||
link["mixins"] = [m.type_id for m in obj.mixins]
|
||||
self.assertEqual(link, json.loads(observed))
|
||||
|
||||
def assertMixedCollection(self, kind, resource, observed):
|
||||
|
Loading…
x
Reference in New Issue
Block a user