فهرست منبع

Patch group_owner_add

Yentl Van Tendeloo 7 سال پیش
والد
کامیت
9712fca9f9
2فایلهای تغییر یافته به همراه62 افزوده شده و 5 حذف شده
  1. 4 4
      bootstrap/core_algorithm.alc
  2. 58 1
      unit/test_all.py

+ 4 - 4
bootstrap/core_algorithm.alc

@@ -2187,15 +2187,15 @@ String function cmd_group_owner_add(group_name : String, other_user_name : Strin
 		if (allow_group_modify(current_user_id, group_id)):
 			other_user_id = get_user_id(other_user_name)
 			if (other_user_id != ""):
-				if (set_in(allAssociationDestinations(core, group_id, "owner"), other_user_id)):
+				if (bool_not(set_in(allAssociationDestinations(core, group_id, "owner"), other_user_id))):
 					instantiate_link(core, "owner", "", group_id, other_user_id)
 
-					if (set_in(allAssociationDestinations(core, other_user_id, "belongsTo"), group_id)):
+					if (bool_not(set_in(allAssociationDestinations(core, other_user_id, "belongsTo"), group_id))):
 						instantiate_link(core, "belongsTo", "", other_user_id, group_id)
 
 					return "Success"!
 				else:
-					return "User is already the owner!"!
+					return "Success"!
 			else:
 				return "Unknown user: " + other_user_name!
 		else:
@@ -2216,7 +2216,7 @@ String function cmd_group_owner_delete(group_name : String, other_user_name : St
 				if (set_in(allAssociationDestinations(core, other_user_id, "belongsTo"), group_id)):
 					if (set_in(allAssociationDestinations(core, group_id, "owner"), other_user_id)):
 						Element overlap
-						overlap = set_overlap(allIncomingAssociationInstances(core, group_id, "owner"), allOutgoingAssociationInstances(core, other_user_id, "owner"))
+						overlap = set_overlap(allIncomingAssociationInstances(core, other_user_id, "owner"), allOutgoingAssociationInstances(core, group_id, "owner"))
 						model_delete_element(core, set_pop(overlap))
 						return "Success"!
 					else:

+ 58 - 1
unit/test_all.py

@@ -2882,6 +2882,64 @@ class TestModelverse(unittest.TestCase):
 
         group_delete("users")
 
+    def test_op_group_owner_add(self):
+        group_create("group1")
+        group_create("group2")
+        group_create("group3")
+        self.do_create_user("new_user")
+
+        group_join("group1", "new_user")
+
+        # Basic use of group owner: promote a user
+        assert self.do_as_user("new_user", group_list, []) == set([("group1", False)])
+        assert group_owner_add("group1", "new_user") == None
+        assert self.do_as_user("new_user", group_list, []) == set([("group1", True)])
+
+        # Or instantaneously make owner, thereby also making a member
+        assert self.do_as_user("new_user", group_list, []) == set([("group1", True)])
+        assert group_owner_add("group2", "new_user") == None
+        assert self.do_as_user("new_user", group_list, []) == set([("group1", True), ("group2", True)])
+
+        # Test for user that is already an owner
+        assert group_owner_add("group1", "new_user") == None
+        assert self.do_as_user("new_user", group_list, []) == set([("group1", True), ("group2", True)])
+
+        # Test non-existing user
+        try:
+            group_owner_add("group1", "abc")
+            self.fail()
+        except UnknownUser:
+            pass
+
+        # Test non-existing group
+        try:
+            group_owner_add("group4", "new_user")
+            self.fail()
+        except UnknownGroup:
+            assert self.do_as_user("new_user", group_list, []) == set([("group1", True), ("group2", True)])
+
+        # Only an owner of the group can do this
+        group_owner_delete("group2", "new_user")
+        assert self.do_as_user("new_user", group_list, []) == set([("group1", True), ("group2", False)])
+        try:
+            self.do_as_user("new_user", group_owner_add, ["group2", "user"])
+            self.fail()
+        except GroupPermissionDenied:
+            pass
+
+        # Also non-members can't modify
+        assert self.do_as_user("new_user", group_list, []) == set([("group1", True), ("group2", False)])
+        try:
+            self.do_as_user("new_user", group_owner_add, ["group3", "user"])
+            self.fail()
+        except GroupPermissionDenied:
+            pass
+
+        # Delete all groups again
+        group_delete("group1")
+        group_delete("group2")
+        group_delete("group3")
+
     """
     def test_op_model_render(self):
     def test_op_transformation_between(self):
@@ -2893,7 +2951,6 @@ class TestModelverse(unittest.TestCase):
     def test_op_transformation_execute_MANUAL(self):
     def test_op_transformation_signature(self):
     def test_op_process_signature(self):
-    def test_op_group_owner_add(self):
     def test_op_group_owner_delete(self):
     def test_op_conformance_delete(self):
     def test_op_conformance_add(self):