|
|
@@ -256,6 +256,20 @@ class TestModelverse(unittest.TestCase):
|
|
|
except UnknownModel:
|
|
|
pass
|
|
|
|
|
|
+ # Test verify of a folder (model)
|
|
|
+ try:
|
|
|
+ verify("users", "formalisms/SimpleClassDiagrams")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
+ # Test verify of a folder (metamodel)
|
|
|
+ try:
|
|
|
+ verify("users/user/test/a", "users")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_permission_modify(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams")
|
|
|
assert model_list_full("users/user/test") == set([("a", "user", "nobody", "200")])
|
|
|
@@ -429,6 +443,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
model_add("users/user/test/e", "users/user/test/d")
|
|
|
model_add("users/user/test/f", "users/user/test/e")
|
|
|
|
|
|
+ # Cannot instantiate a folder metamodel
|
|
|
+ try:
|
|
|
+ model_add("users/user/test/z", "users")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ assert "z" not in model_list("users/user/test")
|
|
|
+
|
|
|
def test_op_model_add_compilation_error(self):
|
|
|
try:
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
@@ -445,10 +466,9 @@ class TestModelverse(unittest.TestCase):
|
|
|
}
|
|
|
""")
|
|
|
#TODO at the moment, this still succeeds!
|
|
|
- #self.fail()
|
|
|
+ self.fail()
|
|
|
except:
|
|
|
raise
|
|
|
- pass
|
|
|
|
|
|
def test_op_model_move(self):
|
|
|
# Test basic scenario
|
|
|
@@ -494,6 +514,15 @@ class TestModelverse(unittest.TestCase):
|
|
|
except WritePermissionDenied:
|
|
|
pass
|
|
|
|
|
|
+ # Test moving an entire folder
|
|
|
+ folder_create("users/user/test/folder_a")
|
|
|
+ model_add("users/user/test/folder_a/a", "formalisms/SimpleClassDiagrams")
|
|
|
+ model_add("users/user/test/folder_a/b", "formalisms/SimpleClassDiagrams")
|
|
|
+ model_add("users/user/test/folder_a/c", "formalisms/SimpleClassDiagrams")
|
|
|
+ all_models = model_list_full("users/user/test/folder_a")
|
|
|
+ model_move("users/user/test/folder_a", "users/user/test/folder_b")
|
|
|
+ assert model_list_full("users/user/test/folder_b") == all_models
|
|
|
+
|
|
|
def test_op_model_delete(self):
|
|
|
# Test basic delete
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams")
|
|
|
@@ -595,9 +624,18 @@ class TestModelverse(unittest.TestCase):
|
|
|
try:
|
|
|
model_overwrite("users/user/test", "")
|
|
|
self.fail()
|
|
|
- except UnknownMetamodellingHierarchy:
|
|
|
+ except NotAModel:
|
|
|
assert model_list("users/user/test") == before
|
|
|
|
|
|
+ # Test overwrite when there is no conformance relation
|
|
|
+ model_add("users/user/test/b", "formalisms/SimpleClassDiagrams")
|
|
|
+ alter_context("users/user/test/a", "users/user/test/b")
|
|
|
+ try:
|
|
|
+ model_overwrite("users/user/test/a", "")
|
|
|
+ self.fail()
|
|
|
+ except UnknownMetamodellingHierarchy:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_user_logout(self):
|
|
|
try:
|
|
|
element_list_nice("administration/core")
|
|
|
@@ -665,6 +703,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
# No write permission, but can query
|
|
|
assert type(all_instances("formalisms/SimpleClassDiagrams", "Class")) == set
|
|
|
|
|
|
+ # Check with "folder" model
|
|
|
+ try:
|
|
|
+ all_instances("users", "a")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_admin_promote_demote(self):
|
|
|
# Verify that user doesn't have admin permissions
|
|
|
try:
|
|
|
@@ -708,6 +753,19 @@ class TestModelverse(unittest.TestCase):
|
|
|
except UnknownUser:
|
|
|
pass
|
|
|
|
|
|
+ # Try with folders
|
|
|
+ try:
|
|
|
+ admin_promote("users")
|
|
|
+ self.fail()
|
|
|
+ except UnknownUser:
|
|
|
+ pass
|
|
|
+
|
|
|
+ try:
|
|
|
+ admin_demote("users")
|
|
|
+ self.fail()
|
|
|
+ except UnknownUser:
|
|
|
+ pass
|
|
|
+
|
|
|
# Can also demote ourselves again
|
|
|
admin_demote("user")
|
|
|
|
|
|
@@ -769,6 +827,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
user_logout()
|
|
|
login("user", "user")
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ user_password("users", "users2")
|
|
|
+ self.fail()
|
|
|
+ except UnknownUser:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_model_types(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams")
|
|
|
|
|
|
@@ -818,6 +883,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
# Test non-model location
|
|
|
assert model_types("formalisms") == set([])
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ model_types("users")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_folder_create(self):
|
|
|
# Create a folder
|
|
|
assert folder_create("users/user/test/folder_a") == None
|
|
|
@@ -921,6 +993,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
# No write permission, but can query
|
|
|
assert type(element_list("formalisms/SimpleClassDiagrams")) == set
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ element_list("users")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_element_list_nice(self):
|
|
|
# Test simple element_list_nice
|
|
|
model_add("users/user/test/a", "formalisms/ProcessModel", """
|
|
|
@@ -1025,6 +1104,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
# No write permission, but can query
|
|
|
assert type(element_list_nice("formalisms/SimpleClassDiagrams")) == list
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ element_list_nice("users")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_types(self):
|
|
|
# Try operation of unopened model
|
|
|
assert types("formalisms/ProcessModel") == element_list("formalisms/SimpleClassDiagrams")
|
|
|
@@ -1067,6 +1153,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
# No write permission for either M or MM, but can query
|
|
|
assert type(types("formalisms/SimpleClassDiagrams")) == set
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ types("users")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_read_info(self):
|
|
|
# Basic case
|
|
|
model_add("users/user/test/a", "formalisms/ProcessModel", """
|
|
|
@@ -1109,6 +1202,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
# No write permission, but can query
|
|
|
assert type(read_info("formalisms/SimpleClassDiagrams", "Class")) == tuple
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ read_info("users", "a")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_read_attrs(self):
|
|
|
# Basic behaviour
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
@@ -1194,6 +1294,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
# No write permissions, but can query
|
|
|
assert type(read_attrs("formalisms/SimpleClassDiagrams", "Class")) == type(dict())
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ read_attrs("users", "a")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_attr_assign(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
SimpleAttribute Natural {
|
|
|
@@ -1306,6 +1413,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
attr_assign("users/user/test/a", "Place", "name", None)
|
|
|
assert read_attrs("users/user/test/a", "Place") == {"constraint": {"AL": ""}, "name": None, "abstract": False, "lower_cardinality": 4, "upper_cardinality": None}
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ attr_assign("users", "a", "b", "c")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_attr_delete(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
SimpleAttribute Natural {
|
|
|
@@ -1412,6 +1526,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
except UnknownAttribute:
|
|
|
pass
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ attr_delete("users", "a", "b")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_attr_delete_code(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
SimpleAttribute Natural {
|
|
|
@@ -1456,6 +1577,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
attr_delete("users/user/test/a", "Place", "constraint")
|
|
|
assert read_attrs("users/user/test/a", "Place") == {"constraint": {"AL": ""}, "name": "Place", "abstract": None, "lower_cardinality": None, "upper_cardinality": None}
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ attr_delete("users", "a", "b")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_attr_assign_code(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
SimpleAttribute Natural {
|
|
|
@@ -1565,6 +1693,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
except CompilationError:
|
|
|
pass
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ attr_assign_code("users", "a", "b", "c")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_instantiate(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams")
|
|
|
assert element_list("users/user/test/a") == set([])
|
|
|
@@ -1716,6 +1851,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
except IncorrectFormat:
|
|
|
assert element_list("users/user/test/a") == before
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ instantiate("users", "a")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_delete_element(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
Class A {}
|
|
|
@@ -1797,6 +1939,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
except UnknownElement:
|
|
|
assert element_list_nice("users/user/test/d") == [{"__type" : "Class", "__id": "A", "lower_cardinality": None, "upper_cardinality": None, "constraint": {"AL": ""}, "name": None, "abstract": None}]
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ delete_element("users", "a")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_AL_text(self):
|
|
|
# Test normal situation with code provided by assignment
|
|
|
model_add("users/user/test/b", "formalisms/SimpleClassDiagrams", """
|
|
|
@@ -1891,6 +2040,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
# No write permissions, but can query
|
|
|
assert type(read_outgoing("formalisms/SimpleClassDiagrams", "Class", "")) == type(set())
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ read_outgoing("users", "a", "")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_read_incoming(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
SimpleAttribute String {}
|
|
|
@@ -1955,6 +2111,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
# No write permissions, but can query
|
|
|
assert type(read_incoming("formalisms/SimpleClassDiagrams", "Class", "")) == type(set())
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ read_incoming("users", "a", "")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_read_association_source(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
SimpleAttribute String {}
|
|
|
@@ -2013,6 +2176,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
except NotAnAssociation:
|
|
|
pass
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ read_association_source("users", "a")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_read_association_destination(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
SimpleAttribute String {}
|
|
|
@@ -2066,11 +2236,18 @@ class TestModelverse(unittest.TestCase):
|
|
|
|
|
|
# Not an association
|
|
|
try:
|
|
|
- read_association_source("users/user/test/a", "A")
|
|
|
+ read_association_destination("users/user/test/a", "A")
|
|
|
self.fail()
|
|
|
except NotAnAssociation:
|
|
|
pass
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ read_association_destination("users", "a")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_connections_between(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
SimpleAttribute String {}
|
|
|
@@ -2127,6 +2304,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
# No write permissions, but can query
|
|
|
assert connections_between("formalisms/SimpleClassDiagrams", "Association", "Association") == set(["Association", "Inheritance"])
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ connections_between("users", "a", "b")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_define_attribute(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
SimpleAttribute String {}
|
|
|
@@ -2217,6 +2401,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
except UnknownM3:
|
|
|
pass
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ define_attribute("users", "a", "b", "c")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_read_defined_attrs(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
SimpleAttribute String {}
|
|
|
@@ -2285,6 +2476,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
except UnknownM3:
|
|
|
pass
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ read_defined_attrs("users", "a")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_undefine_attribute(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
SimpleAttribute String {}
|
|
|
@@ -2369,6 +2567,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
except WritePermissionDenied:
|
|
|
assert read_defined_attrs("formalisms/SimpleClassDiagrams", "Class") == before
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ undefine_attribute("users", "a", "b", True)
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_attribute_optional(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
SimpleAttribute String {}
|
|
|
@@ -2477,6 +2682,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
except UnknownAttribute:
|
|
|
assert read_defined_attrs("users/user/test/a", "D") == ({"name": "String", "additional_attr": "Natural", "new_name": "String"}, {"value": "Natural"})
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ attribute_optional("users", "a", "b", True)
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_attribute_type(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
SimpleAttribute String {}
|
|
|
@@ -2581,6 +2793,13 @@ class TestModelverse(unittest.TestCase):
|
|
|
except UnknownAttribute:
|
|
|
assert read_defined_attrs("users/user/test/a", "D") == ({"value": "String", "name": "String", "additional_attr": "Natural"}, {"new_name": "String"})
|
|
|
|
|
|
+ # Check on folder "model"
|
|
|
+ try:
|
|
|
+ attribute_type("users", "a", "b", "c")
|
|
|
+ self.fail()
|
|
|
+ except NotAModel:
|
|
|
+ pass
|
|
|
+
|
|
|
def test_op_attribute_name(self):
|
|
|
model_add("users/user/test/a", "formalisms/SimpleClassDiagrams", """
|
|
|
SimpleAttribute String {}
|