CORD-1337 test cases for client-side ORM
Change-Id: I7344e54610883bb9f23f98b29ec1cda62270b396
diff --git a/xos/xos_client/xosapi/fake_stub.py b/xos/xos_client/xosapi/fake_stub.py
index dc56178..8cecf18 100644
--- a/xos/xos_client/xosapi/fake_stub.py
+++ b/xos/xos_client/xosapi/fake_stub.py
@@ -5,7 +5,6 @@
import functools
-ContentTypeIdCounter = 0;
ContentTypeMap = {}
class FakeObj(object):
@@ -36,6 +35,10 @@
self.is_set[name] = True
super(FakeObj, self).__setattr__(name, value)
+ @property
+ def self_content_type_id(self):
+ return "xos.%s" % self.__class__.__name__.lower()
+
class FakeExtensionManager(object):
def __init__(self, obj, extensions):
self.obj = obj
@@ -78,8 +81,7 @@
if objName in ContentTypeMap:
ct = ContentTypeMap[objName]
else:
- ct = ContentTypeIdCounter
- ContentTypeIdCount = ContentTypeIdCounter + 1
+ ct = "xos.%s" % objName.lower()
ContentTypeMap[objName] = ct
self.Extensions = FakeExtensionManager(self, {"xos.contentTypeId": ct})
@@ -116,10 +118,41 @@
DESCRIPTOR = FakeDescriptor("Site")
+class Service(FakeObj):
+ FIELDS = ( {"name": "id", "default": 0},
+ {"name": "name", "default": ""}, )
+
+ def __init__(self, **kwargs):
+ return super(Service, self).__init__(self.FIELDS, **kwargs)
+
+ DESCRIPTOR = FakeDescriptor("Service")
+
+class Tag(FakeObj):
+ FIELDS = ( {"name": "id", "default": 0},
+ {"name": "service_id", "default": None},
+ {"name": "name", "default": ""},
+ {"name": "value", "default": ""},
+ {"name": "content_type", "default": None},
+ {"name": "object_id", "default": None},
+ {"name": "slice_ids", "default": 0, "fk_reverse": "Slice"} )
+
+ def __init__(self, **kwargs):
+ return super(Tag, self).__init__(self.FIELDS, **kwargs)
+
+ DESCRIPTOR = FakeDescriptor("Tag")
+
+class ID(FakeObj):
+ pass
+
+class FakeItemList(object):
+ def __init__(self, items):
+ self.items = items
+
class FakeStub(object):
def __init__(self):
+ self.id_counter = 1
self.objs = {}
- for name in ["Slice", "Site"]:
+ for name in ["Slice", "Site", "Tag", "Service"]:
setattr(self, "Get%s" % name, functools.partial(self.get, name))
setattr(self, "List%s" % name, functools.partial(self.list, name))
setattr(self, "Create%s" % name, functools.partial(self.create, name))
@@ -130,35 +163,39 @@
def make_key(self, name, id):
return "%s:%d" % (name, id.id)
- def get(self, classname, id):
+ def get(self, classname, id, metadata=None):
obj = self.objs.get(self.make_key(classname, id), None)
return obj
- def list(self, classname, empty):
- items = None
+ def list(self, classname, empty, metadata=None):
+ items = []
for (k,v) in self.objs.items():
(this_classname, id) = k.split(":")
if this_classname == classname:
items.append(v)
- return items
+ return FakeItemList(items)
- def create(self, classname, obj):
+ def create(self, classname, obj, metadata=None):
+ obj.id = self.id_counter
+ self.id_counter = self.id_counter + 1
k = self.make_key(classname, FakeObj(id=obj.id))
self.objs[k] = obj
+ return obj
- def update(self, classname, obj):
+ def update(self, classname, obj, metadata=None):
# TODO: partial update support?
k = self.make_key(classname, FakeObj(id=obj.id))
self.objs[k] = obj
+ return obj
- def delete(self, classname, id):
+ def delete(self, classname, id, metadata=None):
k = self.make_key(classname, id)
del self.objs[k]
class FakeSymDb(object):
def __init__(self):
self._classes = {}
- for name in ["Slice", "Site"]:
+ for name in ["Slice", "Site", "ID", "Tag", "Service"]:
self._classes["xos.%s" % name] = globals()[name]