diff --git a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java index d16679c..126ff34 100644 --- a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java +++ b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/GroupTest.java @@ -25,12 +25,14 @@ import java.util.Set; import java.util.TreeSet; import javax.jcr.RepositoryException; +import javax.jcr.Session; import javax.jcr.UnsupportedRepositoryOperationException; import org.apache.jackrabbit.api.security.user.Authorizable; import org.apache.jackrabbit.api.security.user.AuthorizableExistsException; import org.apache.jackrabbit.api.security.user.Group; import org.apache.jackrabbit.api.security.user.User; +import org.apache.jackrabbit.api.security.user.UserManager; import org.apache.jackrabbit.test.NotExecutableException; import org.apache.jackrabbit.util.Text; import org.junit.Before; @@ -766,6 +768,57 @@ public class GroupTest extends AbstractUserTest { checkDeclaredMemberOf(user2, grp1.getID()); } + @Test + public void testRemoveFromDeclaredMemberOf() throws Exception { + String grId2 = createGroupId(); + Group gr2 = null; + + Session session2 = null; + Session session3 = null; + + try { + gr2 = userMgr.createGroup(grId2); + gr2.addMember(user); + superuser.save(); + + session2 = getHelper().getReadWriteSession(); + + final UserManager userMgr2 = getUserManager(session2); + final Authorizable user2 = userMgr2.getAuthorizable(this.user.getID()); + + Iterator groups = user2.declaredMemberOf(); + while (groups.hasNext()) { + Group group = groups.next(); + group.removeMember(user2); + } + session2.save(); + + session3 = getHelper().getReadWriteSession(); + final UserManager userMgr3 = getUserManager(session3); + + assertFalse(userMgr3.getAuthorizable(group.getID(), Group.class).isDeclaredMember(this.user)); + assertFalse(userMgr3.getAuthorizable(grId2, Group.class).isDeclaredMember(this.user)); + + groups = this.user.declaredMemberOf(); + while (groups.hasNext()) { + String id = groups.next().getID(); + assertFalse(group.getID().equals(id)); + assertFalse(grId2.equals(id)); + } + } finally { + if (gr2 != null) { + gr2.remove(); + superuser.save(); + } + if (session2 != null) { + session2.logout(); + } + if (session3 != null) { + session3.logout(); + } + } + } + private void checkDeclaredMembers(Group grp, String ... ids) throws RepositoryException { TreeSet members = new TreeSet(); Iterator iter = grp.getMembers();