Set<Id> userIdSet=new Set<Id>();
String userType = Schema.SObjectType.User.getKeyPrefix();
String groupType = Schema.SObjectType.Group.getKeyPrefix();
Set<Id> groupIdSet = new Set<Id>();
Set<Id> groupIdSetWithAccessUsingHierarchySet = new Set<Id>();
Map<Id, UserRole> orgRoleMap = new Map<Id, UserRole>([SELECT Id,ParentRoleID
FROM UserRole
LIMIT 10000]);
// Loop through all group members in a group
for(GroupMember groupMemberRecord : [SELECT Id, UserOrGroupId, Group.DoesIncludeBosses, Group.Type, Group.RelatedId
FROM GroupMember
WHERE Group.Name in :groupNameList
LIMIT 10000]){
// If the user or group id is a user
if(((String)groupMemberRecord.UserOrGroupId).startsWith(userType)){
userIdSet.add(groupMemberRecord.UserOrGroupId);
}
// If the user or group id is a group
// Note: there may be a problem with governor limits if this is called too many times
else if (((String)groupMemberRecord.UserOrGroupId).startsWith(groupType) && !groupMemberRecord.Group.DoesIncludeBosses){
// Call this function again but pass in the group found within this group
groupIdSet.add(groupMemberRecord.userOrGroupId);
}
else if (((String)groupMemberRecord.UserOrGroupId).startsWith(groupType) && groupMemberRecord.Group.DoesIncludeBosses){
// Call this function again but pass in the group found within this group
groupIdSetWithAccessUsingHierarchySet.add(groupMemberRecord.userOrGroupId);
}
}
if(groupIdSet.size()>0){
userIdSet.addAll(getAllMembersFromGroup(groupIdSet, orgRoleMap, false));
}
if(groupIdSetWithAccessUsingHierarchySet.size()>0){
userIdSet.addAll(getAllMembersFromGroup(groupIdSetWithAccessUsingHierarchySet, orgRoleMap, true));
}
return userIdSet;
}
Hi Learner, Use below test class for your above apex class. it is not covering only 1 line. rest of code is covered. Replace your class and test class name accordingly.
@isTest
private class YourApexClassTest
{
static testMethod void testMethod1()
{
UserRole role = new UserRole(DeveloperName = 'MyCustomRole', Name = 'My Role');
insert role;
Group g1 = new Group(Name = 'TestGroup1', Type = 'Regular' );
insert g1 ;
Group g2 = new Group(Name = 'TestGroup2', Type = 'Regular' );
insert g2 ;
Group g3 = new Group(Name = 'TestGroup3', Type = 'Regular' );
insert g3 ;
Group g4 = new Group(Name = 'TestGroup4', Type = 'Regular', DoesIncludeBosses = false );
insert g4 ;
GroupMember gm1 = new GroupMember(GroupId = g1.Id, UserOrGroupId = UserInfo.getUserId());
GroupMember gm2 = new GroupMember(GroupId = g1.Id, UserOrGroupId = g2.Id );
GroupMember gm3 = new GroupMember(GroupId = g4.Id, UserOrGroupId = g2.Id);
insert new List<GroupMember>{gm1, gm2} ;
List<String> groupNames = new List<String>{'TestGroup1', 'TestGroup2', 'TestGroup3', 'TestGroup4'};
YourApexClass.getUserIdsFromGroup(groupNames);
}
}