function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
shankar sudalaimanishankar sudalaimani 

TestCLassFor_Class

Am new to salesforce ,Please help to write test classes,it shows some error
Error is: System.ListException: List index out of bounds: 0
Stack Trace: Class.Accept_and_open.testAcceptCase: line 109, column 1
line 109 is:  String caseId = c[0].id;
global class Accept_and_open 
{
    WebService static String AcceptOpenCase(string id)
    {
        Id currentUserId = UserInfo.getUserId();
        Case c=[SELECT Id, CaseNumber, OwnerId FROM Case WHERE Id=:Id];
        
        GroupMember[] queueUserId = [Select Id, UserOrGroupId FROM GroupMember WHERE GroupId = :c.OwnerId AND UserOrGroupId = :currentUserId];
        if(queueUserId.size() > 0) 
        {
            return 'true';
        }       
        else
        {
            return 'false';
        } 
    }
    
    WebService static String AcceptCase(String[] Ids)
    {
        String Success = '';
        String Failure = '';
        Id currentUserId = UserInfo.getUserId();
        List<Case> cases=[SELECT Id, CaseNumber, OwnerId FROM Case WHERE Id IN :Ids];
        
        Set<Id> caseOwnerIds = new Set<Id>();       
        Map<Id,GroupMember> groupMemberMap = new Map<Id,GroupMember>();
        List<Case> updateCases = new List<Case>();
        
        for(Case acceptCase:cases)
        {
            caseOwnerIds.add(acceptCase.OwnerId);
        }
                
        if(caseOwnerIds.size() > 0)
        {   
              List<GroupMember> queueUsers = [Select Id, UserOrGroupId, GroupId FROM GroupMember WHERE GroupId IN :caseOwnerIds AND UserOrGroupId = :currentUserId];
              for(GroupMember gm:queueUsers)
              {
                  groupMemberMap.put(gm.GroupId,gm);
              }
        }
        
        for(Case c:cases)
        {
            if(groupMemberMap.get(c.OwnerId) != null)
            {
                c.OwnerId=currentUserId;
                updateCases.add(c);
                
                Success = Success+c.CaseNumber+' ';
            }
            else
            {
                 Failure = Failure+c.CaseNumber+' ';
            } 
        }
                
        //Updating the Case with Onwer id
        if(updateCases.size() > 0)
        update updateCases;
        
        String Message = '';
        if(Success != '' && Failure != '')
        {
            Message = 'These Cases are accepted successfully: '+Success+ 'and' +'These Cases are not accepted becuase you are not part of the Queues for Cases :' + Failure;  
        }
        else if(Success != '' && Failure == '')
        {
            Message = 'These Cases are accepted successfully: '+Success;
        } 
        else if(Success == '' && Failure != '')
        {
            Message = 'These Cases are not accepted becuase you are not part of the Queues for Cases: ' + Failure;  
        }
        else
        {
           Message = '';
        }  

        return Message; 
    }

    public static testMethod void testAcceptCase() 
    {               
            QueueSobject q = [Select Id, QueueId From QueueSobject Where Queue.Name = 'BSO' AND SobjectType='Case']; 
            List<GroupMember> queueUsers = [Select Id, UserOrGroupId FROM GroupMember WHERE GroupId=:q.QueueId];  
            Case[] c = [Select Id,OwnerId From Case where OwnerId=:q.QueueId AND TEAS_S_Control_ID__c != null Limit 10];
                  
            Set<Id> userIds=new Set<Id>();
            for(GroupMember gm:queueUsers)
            {
                userIds.add(gm.UserOrGroupId);
            }                                            
           
            List<User> u = [Select Id from User where Id IN :userIds AND IsActive=true Limit 5];
        if (u.size()>0)
        {
            System.runAs(u[0]) 
            {
                String caseId = c[0].id;
                AcceptOpenCase(caseId);                
                                             
                List<String> caseIDs= new List<String>();
                for(Case caseList:c)
                {
                     caseIDs.add(caseList.Id);
                }
                AcceptCase(caseIDs);
            }
        }
            
            List<User> u1 = [Select Id from User where Id NOT IN :userIds AND IsActive=true Limit 5];
        if (u1.size()>0)
        {
            System.runAs(u1[0]) 
            {
                String caseId = c[0].id;
                AcceptOpenCase(caseId);
                
                List<String> caseIDs= new List<String>();
                for(Case caseList:c)
                {
                     caseIDs.add(caseList.Id);                     
                }
                AcceptCase(caseIDs);
            }
        }
    }
}

 
GauravGargGauravGarg
Hi Shankar,

Could you please share the full Test Class where you had created the test data to cover the class.

Thanks,
Gaurav
shankar sudalaimanishankar sudalaimani
I think this is the test class,It is already created by someone.I dont know how to find the test class for this global webservice.
 public static testMethod void testAcceptCase()
085    {              
086            QueueSobject q = [Select Id, QueueId From QueueSobject Where Queue.Name = 'BSO' AND SobjectType='Case'];
087            List<GroupMember> queueUsers = [Select Id, UserOrGroupId FROM GroupMember WHERE GroupId=:q.QueueId]; 
088            Case[] c = [Select Id,OwnerId From Case where OwnerId=:q.QueueId AND TEAS_S_Control_ID__c != null Limit 10];
089                   
090            Set<Id> userIds=new Set<Id>();
091            for(GroupMember gm:queueUsers)
092            {
093                userIds.add(gm.UserOrGroupId);
094            }                                           
095            
096            List<User> u = [Select Id from User where Id IN :userIds AND IsActive=true Limit 5];
097        if (u.size()>0)
098        {
099            System.runAs(u[0])
100            {
101                String caseId = c[0].id;
102                AcceptOpenCase(caseId);               
103                                              
104                List<String> caseIDs= new List<String>();
105                for(Case caseList:c)
106                {
107                     caseIDs.add(caseList.Id);
108                }
109                AcceptCase(caseIDs);
110            }
111        }
112             
113            List<User> u1 = [Select Id from User where Id NOT IN :userIds AND IsActive=true Limit 5];
114        if (u1.size()>0)
115        {
116            System.runAs(u1[0])
117            {
118                String caseId = c[0].id;
119                AcceptOpenCase(caseId);
120                 
121                List<String> caseIDs= new List<String>();
122                for(Case caseList:c)
123                {
124                     caseIDs.add(caseList.Id);                    
125                }
126                AcceptCase(caseIDs);
127            }
128        }
129    }
130}
GauravGargGauravGarg
Shankar,

This is test Method, we would need test Class that is creating the data. 

Thanks,
Gaurav
shankar sudalaimanishankar sudalaimani
Hi Gaurav,
They use the same code in apex class and Test Class,I think this is the problem.
I Inserted the Test Class here.I am taking this screenshot from Apex Test Execution History.
User-added image