001    /**
002     * Copyright 2005-2011 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.kim.test.service;
017    
018    import org.junit.Ignore;
019    import org.junit.Test;
020    import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
021    import org.kuali.rice.kim.api.KimApiConstants;
022    import org.kuali.rice.kim.api.group.Group;
023    import org.kuali.rice.kim.api.group.GroupMember;
024    import org.kuali.rice.kim.impl.group.GroupServiceImpl;
025    import org.kuali.rice.kim.test.KIMTestCase;
026    
027    import java.util.ArrayList;
028    import java.util.Collection;
029    import java.util.List;
030    
031    import static org.junit.Assert.assertFalse;
032    import static org.junit.Assert.assertTrue;
033    
034    /**
035     * This is a description of what this class does - kellerj don't forget to fill this in. 
036     * 
037     * @author Kuali Rice Team (rice.collab@kuali.org)
038     *
039     */
040    @Ignore
041    public class GroupServiceImplTest extends KIMTestCase {
042    
043            private GroupServiceImpl groupService;
044    
045            public void setUp() throws Exception {
046                    super.setUp();
047                    groupService = (GroupServiceImpl)GlobalResourceLoader.getService(KimApiConstants.ServiceNames.GROUP_SERVICE_SOAP);
048            }
049    
050            @Test
051            public void testGetDirectMemberGroupIds() {
052                    List<String> groupIds = groupService.getDirectMemberGroupIds("g1");
053    
054                    assertTrue( "g1 must contain group g2", groupIds.contains( "g2" ) );
055                    assertFalse( "g1 must not contain group g3", groupIds.contains( "g3" ) );
056    
057                    groupIds = groupService.getDirectMemberGroupIds("g2");
058                    
059                    assertTrue( "g2 must contain group g3", groupIds.contains( "g3" ) );
060                    assertFalse( "g2 must not contain group g4 (inactive)", groupIds.contains( "g4" ) );
061                    
062            }
063            
064            @Test
065            public void testGetMemberGroupIds() {
066                    List<String> groupIds = groupService.getMemberGroupIds("g1");
067    
068                    assertTrue( "g1 must contain group g2", groupIds.contains( "g2" ) );
069                    assertTrue( "g1 must contain group g3", groupIds.contains( "g3" ) );
070                    assertFalse( "g1 must not contain group g4 (inactive)", groupIds.contains( "g4" ) );
071    
072                    groupIds = groupService.getMemberGroupIds("g2");
073    
074                    assertTrue( "g2 must contain group g3", groupIds.contains( "g3" ) );
075                    assertFalse( "g2 must not contain group g1", groupIds.contains( "g1" ) );
076            }
077            
078            // test principal membership
079            @Test
080            public void testPrincipalMembership() {
081                    assertTrue( "p1 must be in g2", groupService.isMemberOfGroup("p1", "g2") );
082                    assertTrue( "p1 must be direct member of g2", groupService.isDirectMemberOfGroup("p1", "g2") );
083                    assertTrue( "p3 must be in g2", groupService.isMemberOfGroup("p3", "g2") );
084                    assertFalse( "p3 should not be a direct member of g2", groupService.isDirectMemberOfGroup("p3", "g2") );
085                    assertFalse( "p4 should not be reported as a member of g2 (g4 is inactive)", groupService.isMemberOfGroup("p4", "g2") );
086                    
087                    // re-activate group 4
088                    Group g4Info = groupService.getGroup("g4");
089            Group.Builder builder = Group.Builder.create(g4Info);
090            builder.setActive(true);
091                    groupService.updateGroup("g4", builder.build());
092    
093                    assertTrue( "p4 should be reported as a member of g2 (now that g4 is active)", groupService.isMemberOfGroup("p4", "g2") );
094                    
095            }
096    
097            // test the various get methods, to verify that they work correctly against
098            // circular group memberships.
099            @Test
100            public void testCircularGetMembers() {
101                    // get all principals from a circular group reference
102                    List<String> pIds = groupService.getMemberPrincipalIds("g101");
103                    assertTrue( "group A should have 3 members", pIds.size() == 3 );                
104                    assertTrue( "group A should have member p1", pIds.contains( "p1" ) );
105                    assertTrue( "group A should have member p3", pIds.contains( "p3" ) );
106                    assertTrue( "group A should have member p5", pIds.contains( "p5" ) );
107    
108                    // traverse completely through a circular group reference looking
109                    // for a principal that is not a member of the group.
110                    boolean isIt = groupService.isMemberOfGroup("p2", "g101");
111                    assertFalse( "p2 should not be a member of Group A", isIt );
112                    
113                    List<String> gIds = groupService.getGroupIdsByPrincipalId("p1");
114                    assertTrue( "p1 should be a member of Group A", gIds.contains("g101"));
115                    assertTrue( "p1 should be a member of Group B", gIds.contains("g102"));
116                    assertTrue( "p1 should be a member of Group C", gIds.contains("g103"));
117                    
118                    gIds = groupService.getGroupIdsByPrincipalIdAndNamespaceCode("p1", "ADDL_GROUPS_TESTS");
119                    assertTrue( "p1 should be a member of Group A", gIds.contains("g101"));
120                    assertTrue( "p1 should be a member of Group B", gIds.contains("g102"));
121                    assertTrue( "p1 should be a member of Group C", gIds.contains("g103"));
122                    
123                    List<String> inList = new ArrayList<String>();
124                    inList.add("g101");
125                    inList.add("g102");
126                    Collection<GroupMember> gMembership = groupService.getMembers(inList);
127                    assertTrue( "Should return 4 members total.", gMembership.size() == 4);
128                    
129                    gMembership = groupService.getMembersOfGroup("g102");
130                    assertTrue( "Group B should have 2 members.", gMembership.size() == 2);
131                    
132                    List<Group> gInfo = groupService.getGroupsByPrincipalId("p1");
133                    assertTrue( "p1 should be a member of at least 3 groups.", gInfo.size() >= 3);
134                    
135                    gInfo = groupService.getGroupsByPrincipalIdAndNamespaceCode("p1", "ADDL_GROUPS_TESTS");
136                    assertTrue( "p1 should be a member of exactly 3 groups with namespace = ADDL_GROUPS_TESTS.", gInfo.size() == 3);
137                    
138                    gIds = groupService.getMemberGroupIds("g101");
139                    assertTrue( "Group A should have 3 member groups", gIds.size() == 3);
140                    assertTrue( "Group B should be a member Group of Group A", gIds.contains("g102"));
141                    assertTrue( "Group C should be a member Group of Group A", gIds.contains("g103"));
142                    assertTrue( "Since these groups have a circular membership, Group A should have itself as a group member", gIds.contains("g101"));
143                    
144                    gIds = groupService.getParentGroupIds("g101");
145                    assertTrue( "Group A should have 3 parent groups", gIds.size() == 3);
146                    assertTrue( "Group B should be a parent of Group A", gIds.contains("g102"));
147                    assertTrue( "Group C should be a parent of Group A", gIds.contains("g103"));
148                    assertTrue( "Since these groups have a circular membership, Group A should be a parent of itself", gIds.contains("g101"));
149            }
150    
151            
152    }