mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
359: Added Object.primary_key instance attribute; added corresponding unit tests
This commit is contained in:
parent
4267422793
commit
54c97b4948
@ -514,10 +514,12 @@ class Object(plugable.Plugin):
|
|||||||
'methods',
|
'methods',
|
||||||
'properties',
|
'properties',
|
||||||
'params'
|
'params'
|
||||||
|
'primary_key',
|
||||||
))
|
))
|
||||||
methods = None
|
methods = None
|
||||||
properties = None
|
properties = None
|
||||||
params = None
|
params = None
|
||||||
|
primary_key = None
|
||||||
takes_params = tuple()
|
takes_params = tuple()
|
||||||
|
|
||||||
def set_api(self, api):
|
def set_api(self, api):
|
||||||
@ -531,6 +533,16 @@ class Object(plugable.Plugin):
|
|||||||
self.params = plugable.NameSpace(
|
self.params = plugable.NameSpace(
|
||||||
self.__get_params(), sort=False
|
self.__get_params(), sort=False
|
||||||
)
|
)
|
||||||
|
pkeys = filter(lambda p: p.primary_key, self.params())
|
||||||
|
if len(pkeys) > 1:
|
||||||
|
raise ValueError(
|
||||||
|
'%s (Object) has multiple primary keys: %s' % (
|
||||||
|
self.name,
|
||||||
|
', '.join(p.name for p in pkeys),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if len(pkeys) == 1:
|
||||||
|
self.primary_key = pkeys[0]
|
||||||
|
|
||||||
def __get_attrs(self, name):
|
def __get_attrs(self, name):
|
||||||
namespace = getattr(self.api, name)
|
namespace = getattr(self.api, name)
|
||||||
|
@ -858,6 +858,57 @@ class test_Object(ClassChecker):
|
|||||||
assert p.required is True
|
assert p.required is True
|
||||||
assert p.multivalue is False
|
assert p.multivalue is False
|
||||||
|
|
||||||
|
def test_primary_key(self):
|
||||||
|
"""
|
||||||
|
Test the `frontend.Object.primary_key` attribute.
|
||||||
|
"""
|
||||||
|
api = plugable.API(
|
||||||
|
frontend.Method,
|
||||||
|
frontend.Property,
|
||||||
|
)
|
||||||
|
api.finalize()
|
||||||
|
|
||||||
|
# Test with no primary keys:
|
||||||
|
class example1(self.cls):
|
||||||
|
takes_params = (
|
||||||
|
'one',
|
||||||
|
'two',
|
||||||
|
)
|
||||||
|
o = example1()
|
||||||
|
o.set_api(api)
|
||||||
|
assert o.primary_key is None
|
||||||
|
|
||||||
|
# Test with 1 primary key:
|
||||||
|
class example2(self.cls):
|
||||||
|
takes_params = (
|
||||||
|
'one',
|
||||||
|
'two',
|
||||||
|
frontend.Param('three',
|
||||||
|
primary_key=True,
|
||||||
|
),
|
||||||
|
'four',
|
||||||
|
)
|
||||||
|
o = example2()
|
||||||
|
o.set_api(api)
|
||||||
|
pk = o.primary_key
|
||||||
|
assert isinstance(pk, frontend.Param)
|
||||||
|
assert pk.name == 'three'
|
||||||
|
assert pk.primary_key is True
|
||||||
|
assert o.params[2] is o.primary_key
|
||||||
|
|
||||||
|
# Test with multiple primary_key:
|
||||||
|
class example3(self.cls):
|
||||||
|
takes_params = (
|
||||||
|
frontend.Param('one', primary_key=True),
|
||||||
|
frontend.Param('two', primary_key=True),
|
||||||
|
'three',
|
||||||
|
frontend.Param('four', primary_key=True),
|
||||||
|
)
|
||||||
|
o = example3()
|
||||||
|
e = raises(ValueError, o.set_api, api)
|
||||||
|
assert str(e) == \
|
||||||
|
'example3 (Object) has multiple primary keys: one, two, four'
|
||||||
|
|
||||||
|
|
||||||
class test_Attribute(ClassChecker):
|
class test_Attribute(ClassChecker):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user