You need to sign in to do that
Don't have an account?
shankar 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;
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); } } } }
Could you please share the full Test Class where you had created the test data to cover the class.
Thanks,
Gaurav
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}
This is test Method, we would need test Class that is creating the data.
Thanks,
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.