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
roshrosh 

please help me with test class??


global class SchemeAutoApprovalBatch implements Database.Batchable<sObject> {
    global Database.QueryLocator  start(Database.BatchableContext bc) {
        
        String status = 'Approval Pending';
        String query = 'SELECT Id,Name,VConnect_SchemeStartDate__c,VConnect_SchemeEndDate__c,VConnect_Status__c FROM VConnect_Scheme__c WHERE VConnect_Status__c =:status'; // collect the batches of records or objects to be passed to execute
        return Database.getQueryLocator(query);
    }
    global void execute(Database.BatchableContext bc, List<VConnect_Scheme__c> records){ // process each batch of records
        List<ProcessInstanceWorkitem> workItems = [SELECT Id, ProcessInstanceId, OriginalActorId, ActorId, ElapsedTimeInDays, 
                                                   ElapsedTimeInHours, ElapsedTimeInMinutes, IsDeleted, CreatedDate, CreatedById,
                                                   SystemModstamp FROM ProcessInstanceWorkitem  
                                                  ];
        Set<Id> processInsId = new Set<Id>();
        
        if(workItems.size()>0){
            for(ProcessInstanceWorkitem workItem : workItems){
                processInsId.add(workItem.ProcessInstanceId);
            }
            
            if(processInsId.size()>0){
                Map<Id,ProcessInstance> map_processIns=new Map<Id,ProcessInstance>(
                    [SELECT Id, TargetObjectId FROM ProcessInstance where Id IN : processInsId]
                );
                
                List<ProcessInstance> pInstance_List = [SELECT Id, TargetObjectId FROM ProcessInstance where Id IN : processInsId];
                Set<Id> scheme_Info = new Set<Id>();
                for(ProcessInstance instance_Item : pInstance_List){
                    scheme_Info.add(instance_Item.TargetObjectId);
                }
                
                /*Map<Id,User> userActiveInfoMap =new Map<Id,User>([SELECT Id, IsActive, Name, ProfileId, Profile.Name, Userrole.Name FROM User  
                                                                  WHERE IsActive = true ]);*/
                
                //Integer hourTime = Integer.valueOf(Scheme_Auto_Approval__mdt.getInstance('total_time').Time_To_Auto_Approve__c);
                Map<Id,VConnect_Scheme__c> totalScheme =new  Map<Id,VConnect_Scheme__c>([
                    SELECT Id,Name,VConnect_SchemeStartDate__c,VConnect_SchemeEndDate__c,VConnect_Status__c FROM VConnect_Scheme__c WHERE Id IN :scheme_Info ]);
                
                //List<ProcessInstanceWorkitem> reasignrequests = new List<ProcessInstanceWorkitem>();
                
                List<Approval.ProcessWorkitemRequest> requests = new List<Approval.ProcessWorkitemRequest>();
                
                for(ProcessInstanceWorkitem workItem : workItems){
                    Id targetId = map_processIns.get(workItem.ProcessInstanceId).TargetObjectId;
                    if(totalScheme.containsKey(targetId)){
                        if(workItem.ElapsedTimeInHours > Scheme_Auto_Approval__mdt.getInstance('total_time').Time_To_Auto_Approve__c){
                            Approval.ProcessWorkitemRequest req2 = new Approval.ProcessWorkitemRequest();
                            req2.setWorkitemId(workItem.Id);
                            req2.setAction('Approve');
                            req2.setComments('Auto Approved');
                            requests.add(req2);
                        }
                    }
                }
                System.debug(requests);
                Approval.ProcessResult[] processResults = Approval.process(requests);
            }
        }
    }    
    global void finish(Database.BatchableContext bc){
        // execute any post-processing operations
    }    
}
Sai PraveenSai Praveen (Salesforce Developers) 
Hi ,

Did you try creating a record of VConnect_Scheme__c object with  VConnect_Status__c as "Approval Pending" .

you can also submit the record for approval as mentioned in the below link.
https://developer.salesforce.com/docs/atlas.en-us.238.0.apexcode.meta/apexcode/apex_process_example.htm

Call thia batch class from your test class this should cover the code.

Let me know if you face any issues.

If this solution helps, Please mark it as best answer.

Thanks,