You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2015/12/14 16:56:49 UTC

syncope git commit: [SYNCOPE-666] Fixed small bug during group update

Repository: syncope
Updated Branches:
  refs/heads/master 1d48e5f29 -> 417eb401b


[SYNCOPE-666] Fixed small bug during group update


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/417eb401
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/417eb401
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/417eb401

Branch: refs/heads/master
Commit: 417eb401bec9136d8edac69daa242557b4185a1c
Parents: 1d48e5f
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Dec 14 16:56:43 2015 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Dec 14 16:56:43 2015 +0100

----------------------------------------------------------------------
 .../core/persistence/jpa/dao/JPAGroupDAO.java   | 16 +++++-----
 .../syncope/fit/core/reference/GroupITCase.java | 32 ++++++++++++++++++++
 2 files changed, 41 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/417eb401/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
index 031c0ba..9fae1d5 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
@@ -172,20 +172,22 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
 
     @Override
     public Group save(final Group group) {
+        Group merged = super.save(group);
+
         // refresh dynaminc memberships
-        if (group.getUDynMembership() != null) {
+        if (merged.getUDynMembership() != null) {
             List<User> matching = searchDAO.search(
-                    buildDynMembershipCond(group.getUDynMembership().getFIQLCond(), group.getRealm()),
+                    buildDynMembershipCond(merged.getUDynMembership().getFIQLCond(), merged.getRealm()),
                     AnyTypeKind.USER);
 
-            group.getUDynMembership().getMembers().clear();
+            merged.getUDynMembership().getMembers().clear();
             for (User user : matching) {
-                group.getUDynMembership().add(user);
+                merged.getUDynMembership().add(user);
             }
         }
-        for (ADynGroupMembership memb : group.getADynMemberships()) {
+        for (ADynGroupMembership memb : merged.getADynMemberships()) {
             List<AnyObject> matching = searchDAO.search(
-                    buildDynMembershipCond(memb.getFIQLCond(), group.getRealm()),
+                    buildDynMembershipCond(memb.getFIQLCond(), merged.getRealm()),
                     AnyTypeKind.ANY_OBJECT);
 
             memb.getMembers().clear();
@@ -194,7 +196,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
             }
         }
 
-        return super.save(group);
+        return merged;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/417eb401/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/GroupITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/GroupITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/GroupITCase.java
index 942d039..0f80766 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/GroupITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/GroupITCase.java
@@ -26,7 +26,9 @@ import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.security.AccessControlException;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
 import javax.naming.directory.DirContext;
@@ -37,6 +39,7 @@ import javax.ws.rs.core.Response;
 import org.apache.commons.collections4.IterableUtils;
 import org.apache.commons.collections4.Predicate;
 import org.apache.syncope.client.lib.SyncopeClient;
+import org.apache.syncope.common.lib.AnyOperations;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.patch.AnyObjectPatch;
@@ -231,6 +234,35 @@ public class GroupITCase extends AbstractITCase {
     }
 
     @Test
+    public void patch() {
+        GroupTO original = getBasicSampleTO("patch");
+        original.setUDynMembershipCond("(($groups==3;$resources!=ws-target-resource-1);aLong==1)");
+        original.getADynMembershipConds().put(
+                "PRINTER",
+                "(($groups==7;cool==ss);$resources==ws-target-resource-2);$type==PRINTER");
+
+        GroupTO updated = createGroup(original).getAny();
+
+        updated.getPlainAttrs().add(new AttrTO.Builder().schema("icon").build());
+        updated.getPlainAttrs().add(new AttrTO.Builder().schema("show").build());
+        updated.getPlainAttrs().add(new AttrTO.Builder().schema("rderived_sx").value("sx").build());
+        updated.getPlainAttrs().add(new AttrTO.Builder().schema("rderived_dx").value("dx").build());
+        updated.getPlainAttrs().add(new AttrTO.Builder().schema("title").value("mr").build());
+
+        original = groupService.read(updated.getKey());
+
+        GroupPatch patch = AnyOperations.diff(updated, original, true);
+        GroupTO group = updateGroup(patch).getAny();
+
+        Map<String, AttrTO> attrs = group.getPlainAttrMap();
+        assertFalse(attrs.containsKey("icon"));
+        assertFalse(attrs.containsKey("show"));
+        assertEquals(Collections.singletonList("sx"), attrs.get("rderived_sx").getValues());
+        assertEquals(Collections.singletonList("dx"), attrs.get("rderived_dx").getValues());
+        assertEquals(Collections.singletonList("mr"), attrs.get("title").getValues());
+    }
+
+    @Test
     public void updateAsGroupOwner() {
         // 1. read group as admin
         GroupTO groupTO = groupService.read(6L);