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
Ashish Nag KAshish Nag K 

Dynamic Approval Process instance Work Item Test Class

Test Class for this code not able to cover 75 percentage also 

 @AuraEnabled
    public static List<ToDoList__c> DynamicApprovalProcess(String todoString, Boolean approve){
        if(String.isNotBlank(todoString)){
            List<ToDoList__c> toDoList = (List<ToDoList__c>)System.JSON.deserialize(todoString, List<ToDoList__c>.class);
            if(toDoList!=NULL && toDoList.size()>0){
                Set<Id> recordIdSet = new Set<Id>();
                Map<String, ToDoList__c> todoMap = new Map<String, ToDoList__c>();
                for(ToDoList__c todo: toDoList){
                    recordIdSet.add(todo.Record_Id__c);
                    todoMap.put(todo.Record_Id__c, todo);
                }
                
                if(recordIdSet.size()>0){
                    list<Approval.ProcessWorkitemRequest> prWkItemList = new list<Approval.ProcessWorkitemRequest>();
                    map<Id, ProcessInstance> processInsMap = new map<Id, ProcessInstance>([Select ID, Status From ProcessInstance Where TargetObjectID IN:recordIdSet AND Status = 'Pending']);
                    if(processInsMap!=NULL && processInsMap.size()>0){
                        for(ProcessInstanceWorkitem workitem : [select Id,OriginalActorId from ProcessInstanceWorkitem where ProcessInstanceId IN:processInsMap.keySet()]){
                            Approval.ProcessWorkitemRequest prWkItem = new Approval.ProcessWorkitemRequest();
                            prWkItem.setWorkItemID(workitem.id);
                            if(approve)
                               prWkItem.setAction('Approve');
                            else
                               prWkItem.setAction('Reject');
                            
                            prWkItemList.add(prWkItem);                            
                        }
                        
                        if(prWkItemList.size()>0){
                           list<Approval.ProcessResult> appResultList = Approval.process(prWkItemList);
                           List<ToDoList__c> todoupdateList= new List<ToDoList__c>();
                            if(appResultList!=NULL && appResultList.size()>0){
                                for(Approval.ProcessResult result: appResultList){
                                    if(result.isSuccess() && todoMap.size()>0 && todoMap.containsKey(result.entityid)){
                                        ToDoList__c todoupdate = new ToDoList__c();
                                        todoupdate.Id = todoMap.get(result.entityid).Id;
                                        todoupdate.Status__c = 'Closed';
                                        todoupdateList.add(todoupdate);
                                    }else if(!result.isSuccess() && todoMap.size()>0 && todoMap.containsKey(result.entityid)){
                                        ToDoList__c todoupdate = new ToDoList__c();
                                        todoupdate.Id = todoMap.get(result.entityid).Id;
                                        if(String.isNotBlank(todoMap.get(result.entityid).Body__c) && result.errors.size()>0)
                                          todoupdate.Body__c = todoMap.get(result.entityid).Body__c+' Error in Approval Process: '+result.errors[0];
                                        else if(result.errors.size()>0 && !String.isNotBlank(todoMap.get(result.entityid).Body__c))
                                          todoupdate.Body__c = 'Error in Approval Process: '+result.errors[0];
                                        todoupdateList.add(todoupdate);
                                    }
                                }
                                
                                if(todoupdateList.size()>0)
                                    database.update(todoupdateList, false);
                                
                            }
                        }
                    }
                }
            }
        }
        return EmployeeDashboardController.fetchToDoListMethod();
    }
}
Raj VakatiRaj Vakati
Try this code
 
@isTest
private class MyTestClass {
    @isTest static void myTest() {
       
	   ToDoList__c todo = new ToDoList__c();
	   todo.Name = 'Test';
	   todo.Status__c ='Closed';
	   // Add fields
	   insert todo ;
	   
	   String accountsJSON = JSON.serializePretty([Select Id,Name ,Status__c from ToDoList__c]);

	   MyTestClass.DynamicApprovalProcess(accountsJSON,true);
    }
}