• Thanigai Kumaran Balaji
  • NEWBIE
  • 30 Points
  • Member since 2022

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 9
    Questions
  • 8
    Replies
my apex class:
@RestResource(urlMapping = '/v1/UpdateFWAReferralCode/*')
global class FWAReferralCode {

    @HttpPost
    global static Void Updatecode(Integer updatelimit) {

        RestResponse res = RestContext.response;
        if (res == null) {
            res = new RestResponse();
            RestContext.response = res;
        }
        List < Account > accid = [SELECT Id, (Select id, name from assets where name = : label.BasePlanName or name = : label.PlusPlanName) FROM Account WHERE Network__c = 'CORE'
        AND vlocity_cmt__Status__c = 'Active'
        AND Customer_Group__c != 'Free Trial'
        AND ID IN(Select Accountid from asset where name = : label.BasePlanName or name = : label.PlusPlanName) AND Id NOT IN(SELECT Account__c FROM FWA_Referral_Code__c WHERE Account__c != null) LIMIT: updatelimit];
        //List<FWA_Referral_Code__c> FWAcode = [select ID,Plan__c,Mapped_Timestamp__c,Account__c from FWA_Referral_Code__c where Account__c = NULL limit :updatelimit];
        if (accid.size() > 0) {
            system.debug(accid.size());
        }
        List < FWA_Referral_Code__c > FWAupdate = new List < FWA_Referral_Code__c > ();
        List < ID > Responselist = new List < ID > ();
        List < FWA_Referral_Code__c > FWAResponse = new List < FWA_Referral_Code__c > ();
        try {
            for (Account ac: accid) {
                FWA_Referral_Code__c fwa = [select ID, Plan__c, Mapped_Timestamp__c, Account__c from FWA_Referral_Code__c where Account__c = NULL limit 1];
                Responselist.add(fwa.id);
                fwa.account__c = ac.id;
                fwa.Mapped_Timestamp__c = DateTime.Now();
                if (ac.assets[0].name == label.BasePlanName) {
                    fwa.Plan__c = label.BasePlanName;
                    system.debug(fwa.Plan__c);
                } else if (ac.assets[0].name == label.PlusPlanName) {
                    fwa.Plan__c = label.PlusPlanName;
                    system.debug(fwa.Plan__c);
                }
                FWAupdate.add(fwa);

                update FWAupdate;
                system.debug(FWAupdate);
            }
            for (FWA_Referral_Code__c resp: [select ID, Account__c from FWA_Referral_Code__c where Id = : Responselist]) {
                FWAResponse.add(resp);
            }
            if (FWAResponse.size() > 0) {
                res.responseBody = Blob.valueOf(Json.serialize(FWAResponse));
                system.debug(res.responseBody);
                res.addHeader(Label.label_Content_Type, Label.label_application_json);
                res.statusCode = 200;
                system.debug(res.statusCode);
                return;
            }

        } catch (Exception e) {
            System.debug('Error: ' + e.getMessage());
        }
    }
}




Test class:
@isTest
Public class FWAReferralCodeTest {

    Public static testMethod void FWAReferralTest() {

        FWA_Referral_Code__c fwa = new FWA_Referral_Code__c(name = 'testing');
        Account ac = new Account(Name = 'Thanigai testfwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE', ServiceSharingType__c = 'Group', Customer_Group__c = 'Test');
        Asset ass = new asset(name = 'visible+ plan', Accountid = ac.Id);
        insert fwa;
        insert ass;
        insert ac;
        FWA_Referral_Code__c fwa1 = new FWA_Referral_Code__c(name = 'testing1');
        Account ac1 = new Account(Name = 'Thanigai fwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE', ServiceSharingType__c = 'Group', Customer_Group__c = 'Test');
        Asset ass1 = new asset(name = 'visible plan', Accountid = ac.Id);
        insert ass1;
        insert fwa1;
        insert ac1;
        FWA_Referral_Code__c fw = new FWA_Referral_Code__c(Account__c = ac1.id, Mapped_Timestamp__c = DateTime.Now(), Plan__c = label.BasePlanName);
        FWA_Referral_Code__c fw1 = new FWA_Referral_Code__c(Account__c = ac.id, Mapped_Timestamp__c = DateTime.Now(), Plan__c = label.PlusPlanName);
        insert fw;
        insert fw1;
        Test.startTest();
        FWAReferralCode.Updatecode(1);

        Test.stopTest();

    }
}
Below is my apex class even after trying to cover all the conditions i am getting only 45% of test coverage.

@RestResource(urlMapping='/v1/UpdateFWAReferralCode/*') global class FWAReferralCode { @HttpPost global static Void Updatecode(Integer updatelimit){ RestResponse res = RestContext.response; if (res == null) { res = new RestResponse(); RestContext.response = res; } List<Account> accid = [SELECT Id, (Select id,name from assets where name = :label.BasePlanName or name =:label.PlusPlanName) FROM Account WHERE Network__c = 'CORE' AND vlocity_cmt__Status__c = 'Active' AND Customer_Group__c != 'Free Trial' AND ID IN (Select Accountid from asset where name = :label.BasePlanName or name =:label.PlusPlanName) AND Id NOT IN (SELECT Account__c FROM FWA_Referral_Code__c WHERE Account__c != null) LIMIT :updatelimit]; //List<FWA_Referral_Code__c> FWAcode = [select ID,Plan__c,Mapped_Timestamp__c,Account__c from FWA_Referral_Code__c where Account__c = NULL limit :updatelimit]; if(accid.size() >0) { system.debug(accid.size()); } List<FWA_Referral_Code__c> FWAupdate = new List<FWA_Referral_Code__c>(); List<ID> Responselist = new List<ID>(); List<FWA_Referral_Code__c> FWAResponse = new List<FWA_Referral_Code__c>(); try{ for(Account ac: accid) { FWA_Referral_Code__c fwa= [select ID,Plan__c,Mapped_Timestamp__c,Account__c from FWA_Referral_Code__c where Account__c = NULL limit 1] ; Responselist.add(fwa.id); fwa.account__c = ac.id; fwa.Mapped_Timestamp__c = DateTime.Now(); if(ac.assets[0].name == label.BasePlanName) { fwa.Plan__c = label.BasePlanName; system.debug(fwa.Plan__c); } else if (ac.assets[0].name == label.PlusPlanName) { fwa.Plan__c = label.PlusPlanName; system.debug(fwa.Plan__c); } FWAupdate.add(fwa); update FWAupdate; system.debug(FWAupdate); } for(FWA_Referral_Code__c resp: [select ID,Account__c from FWA_Referral_Code__c where Id =:Responselist]) { FWAResponse.add(resp); } if(FWAResponse.size()>0){ res.responseBody = Blob.valueOf(Json.serialize(FWAResponse)); system.debug(res.responseBody); res.addHeader(Label.label_Content_Type, Label.label_application_json); res.statusCode = 200; system.debug(res.statusCode); return; } } catch (Exception e) { System.debug('Error: ' + e.getMessage()); } } }

my test class:

@isTest Public class FWAReferralCodeTest{ Public static testMethod void FWAReferralTest(){ FWA_Referral_Code__c fwa = new FWA_Referral_Code__c(name = 'testing' ); Account ac= new Account(Name= 'Thanigai testfwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE',ServiceSharingType__c = 'Group',Customer_Group__c = 'Test' ); Asset ass = new asset(name = 'visible+ plan', Accountid = ac.Id); insert fwa; insert ass; insert ac; FWA_Referral_Code__c fwa1 = new FWA_Referral_Code__c(name = 'testing1' ); Account ac1= new Account(Name= 'Thanigai fwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE',ServiceSharingType__c = 'Group',Customer_Group__c = 'Test' ); Asset ass1 = new asset(name = 'visible plan', Accountid = ac.Id); insert ass1; insert fwa1; insert ac1; FWA_Referral_Code__c fw = new FWA_Referral_Code__c(Account__c = ac1.id,Mapped_Timestamp__c = DateTime.Now(),Plan__c =label.BasePlanName ); FWA_Referral_Code__c fw1 = new FWA_Referral_Code__c(Account__c = ac.id,Mapped_Timestamp__c = DateTime.Now(),Plan__c =label.PlusPlanName ); insert fw; insert fw1; Test.startTest(); FWAReferralCode.Updatecode(1); Test.stopTest(); } }
My Apex helper class:
public class ExportObjectHelperclass implements Metadata.DeployCallback {
     public void handleResult(Metadata.DeployResult result, Metadata.DeployCallbackContext context) {
        if (result.status == Metadata.DeployStatus.Succeeded) {
            //Success
            System.debug('Success Result-' + result);
        } else {
            //Failed
            System.debug('Failed Result-' + result);
        }
    }
  //Update Custom Metadata record
    public static void updateCustomMetadata(String metdataName, String recordDevName, String label, Map<String, Object> metadataFieldValueMap){
        Metadata.CustomMetadata cMetadata = new Metadata.CustomMetadata();
        cMetadata.fullName = metdataName + '.' + recordDevName;
        cMetadata.label = label;       
        for(String key : metadataFieldValueMap.keySet()){
            Metadata.CustomMetadataValue cMetadataValue = new Metadata.CustomMetadataValue();
            cMetadataValue.Field = key;
            cMetadataValue.Value = metadataFieldValueMap.get(key); 
            cMetadata.values.add(cMetadataValue);
        }
       Metadata.DeployContainer mdContainer = new Metadata.DeployContainer();
        mdContainer.addMetadata(cMetadata);
        ExportObjectHelperclass callback = new ExportObjectHelperclass();
        Id jobId = Metadata.Operations.enqueueDeployment(mdContainer, callback);
    }
  public static String Feildnamefromuser;
        public static Boolean fullbackup;
        public static Boolean partialbackup;
           public Static String Objectname;    
        public Static String Email;
        public Static Boolean Backupbetweenintervals;
        public Static Datetime Backupstartingfrom;
        public Static Datetime BackupEnddatetime;
 @InvocableMethod (Label ='call batch apex with metadata')
    public static void callbatch(List<FlowInputs> request) {
        Map<String, Object> metadataFieldValueMap = new Map<String, Object>();
        fullbackup = request[0].Full_Object_Backup;
           Feildnamefromuser = request[0].Enter_Feild_API_name_with_inbetween;
        partialbackup = request[0].Partial;
          Objectname = request[0].Objectname;
        Email = request[0].Email;
        Backupbetweenintervals = request[0].Backupbetweenintervals;
        Backupstartingfrom = request[0].Backupstartingfrom;
        BackupEnddatetime = request[0].BackupEnddatetime;
        metadataFieldValueMap.put('Backup_between_interval__c', Backupbetweenintervals);
        metadataFieldValueMap.put('Full_backup__c', fullbackup);
        metadataFieldValueMap.put('Backup_from__c', Backupstartingfrom);
        metadataFieldValueMap.put('Backup_till__c', BackupEnddatetime);
        metadataFieldValueMap.put('Object_Name__c', Objectname);
        metadataFieldValueMap.put('Email_ID__c', Email);
        metadataFieldValueMap.put('Field_backup__c', partialbackup);
        metadataFieldValueMap.put('Full_backup__c', Feildnamefromuser);
        metadataFieldValueMap.put('Field_name_Separated_with__c', Feildnamefromuser);  ExportObjectHelperclass.updateCustomMetadata('ExportCSV__mdt','Export_Object_as_CSV', 'Export Object as CSV',metadataFieldValueMap);
        //Id batchInstanceId = Database.executeBatch(new exportobascsv());
        ExportObjasCSV objbatch = new ExportObjasCSV();
         Database.executeBatch(objbatch, 200); 
    }
    public class FlowInputs{
      @InvocableVariable
        public Boolean Full_Object_Backup;
        @InvocableVariable
        public Boolean Partial;
        @InvocableVariable
        public String Enter_Feild_API_name_with_inbetween;
         @InvocableVariable
        public String Objectname;    
         @InvocableVariable
        public String Email;
         @InvocableVariable
        public Boolean Backupbetweenintervals;
        @InvocableVariable
        public Datetime Backupstartingfrom;
        @InvocableVariable
        public Datetime BackupEnddatetime;
    }   
}


Batch class:
global class ExportObjAsCSV implements Database.Batchable <SObject>, Database.Stateful {
        
global Database.QueryLocator start (Database.BatchableContext bc)
{
ExportCSV__mdt eo = [Select Object_Name__c,Backup_between_interval__c,Field_backup__c,Full_backup__c,Field_name_Separated_with__c,Backup_from__c,Backup_till__c from ExportCSV__mdt where label = 'Export Object as CSV'];
Datetime backupfrom = eo.Backup_from__c;
Datetime backuptill = eo.Backup_till__c;   
String Objectname = eo.Object_Name__c;
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
    
// query to return Object 
String query = 'Select ';       
for(String fieldName : fieldMap.keyset() )
    {
        query += fieldname+',';   
        }
query = query.removeEnd(',');
    if(eo.Backup_between_interval__c == true)
    {
    String newbackupfrom = backupfrom.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
    String newbackuptill = backuptill.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');   
     if(!test.isRunningTest()){
        query += ' from ' +Objectname+ ' where lastmodifieddate >= ' +newbackupfrom+ ' and lastmodifieddate <= ' +newbackuptill+ '';
     }else{
            query += ' from ' +Objectname+ '';
     }  }
    else {
        if(!test.isRunningTest()){
        query += ' from ' +Objectname+ ' where lastmodifieddate = yesterday';
     }else{
            query += ' from ' +Objectname+ '';
     } 
    }
         return Database.getQueryLocator(query);
}
global static void execute(Database.BatchableContext bc, List<sobject> OppList)
   {  
 // Implementing Try catch for error handling
       try{      
    ExportCSV__mdt eo = [Select Object_Name__c,Field_backup__c,Email_ID__c,Full_backup__c,Field_name_Separated_with__c,Backup_from__c,Backup_till__c from ExportCSV__mdt where label = 'Export Object as CSV'];
    String Objectname = eo.Object_Name__c;
    String ObjectID = eo.ID;
    String EmailID = eo.Email_ID__c;
           
    String generatedCSVFile = '';
        if(eo.Full_backup__c == true)
    {
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
        for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += Fieldname +',';     
        }
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(sObject company: OppList){
  for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += company.get(fieldName)+ ',';     
        }
        generatedCSVFile = generatedCSVFile.removeEnd(',');
        generatedCSVFile = generatedCSVFile + '\n'; 

    }else if(eo.Field_backup__c == true )
    {
        
//Split the text in Feild name as separate lines
String Fieldfromuser = (string) eo.Field_name_Separated_with__c;
list<String> eachline = Fieldfromuser.split(' ');
for(Integer i = 0; i < eachline.size(); i++)
{
        generatedCSVFile += eachline[i] +',';            
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(sobject company: OppList){
 for(Integer i = 0; i < eachline.size(); i++)
{
        generatedCSVFile += company.get(eachline[i])+ ',';     
        }
    generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 

    }

//send email with generated csv file
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = '' +Objectname+ ' backup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{EmailID};
String subject = '' +Objectname+ '  backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Please find the Object backup file attached to the mail');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
           
//Attach the CSV to ExportObject attachments
Attachment attachment = new attachment();
attachment.Body = blob.valueOf(generatedCSVFile);
attachment.Name = '' +Objectname+ ' backup.csv';
attachment.ParentId = ObjectID;
insert attachment;           
       }
       
       catch(exception e)
       {
            system.debug('Exception Caught:'+e.getmessage());
       }
       }
    global void finish(Database.BatchableContext bc)
    {
    }  
}
My Batch apex:

public class exportobascsv implements Database.Batchable <SObject>, Database.Stateful {
        public Final String Feildnamefromuser;
        public Final Boolean fullbackup;
        public Final Boolean partialbackup;
           public Final String Objectname;    
        public Final String Email;
        public Final Boolean Backupbetweenintervals;
        public Final Datetime Backupstartingfrom;
        public Final Datetime BackupEnddatetime;
    public exportobascsv(Boolean full,String Feildname,Boolean partial,String obj, String Emailid, Boolean intervals, Datetime start, Datetime endtime)
    {
        fullbackup = full;
        Feildnamefromuser = Feildname;
        partialbackup = partial;
        Objectname = obj;
        Email = Emailid;
        Backupbetweenintervals = intervals;
        Backupstartingfrom = start;
        BackupEnddatetime = endtime;
    }
        
   public Database.QueryLocator start (Database.BatchableContext bc)
{
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
// query to return Object 
String query = 'Select ';       
for(String fieldName : fieldMap.keyset() )
    {
        query += fieldname+',';   
        }
query = query.removeEnd(',');
    if(Backupbetweenintervals == true)
    {
         String newbackupfrom = Backupstartingfrom.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
        String newbackuptill = BackupEnddatetime.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');   
     if(!test.isRunningTest()){
        query += ' from ' +Objectname+ ' where lastmodifieddate >= ' +newbackupfrom+ ' and lastmodifieddate <= ' +newbackuptill+ '';
     }else{
            query += ' from ' +Objectname+ '';
     }  }
    else {
        if(!test.isRunningTest()){
        query += ' from ' +Objectname+ ' where lastmodifieddate = yesterday';
     }else{
            query += ' from ' +Objectname+ '';
     } 
    }
         return Database.getQueryLocator(query);
}
   public void execute(Database.BatchableContext bc, List<sobject> OppList)
   {   
 try{      
  
    String generatedCSVFile = '';
        if(fullbackup == true)
    {
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
        for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += Fieldname +',';     
        }
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(sObject company: OppList){
  for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += company.get(fieldName)+ ',';     
        }
        generatedCSVFile = generatedCSVFile.removeEnd(',');
        generatedCSVFile = generatedCSVFile + '\n'; 

    }else if(partialbackup == true )
    {
        
//Split the text in Feild name as separate lines
list<String> eachline = Feildnamefromuser.split(' ');
for(Integer i = 0; i < eachline.size(); i++)
{
        generatedCSVFile += eachline[i] +',';            
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(sobject company: OppList){
 for(Integer i = 0; i < eachline.size(); i++)
{
        generatedCSVFile += company.get(eachline[i])+ ',';     
        }
    generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 

    }

//send email with generated csv file
String Email1= Email;
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = '' +Objectname+ ' backup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{Email1};
String subject = '' +Objectname+ '  backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Please find the Object backup file attached to the mail');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
 
       }
       catch(exception e)
       {
            system.debug('Exception Caught:'+e.getmessage());
       }
       }
       
    public void finish(Database.BatchableContext bc)
    {
    }  
   

}


My Helper Apex class:

public class ExportObjectHelperclass {

        public static String Feildnamefromuser;
        public static Boolean fullbackup;
        public static Boolean partialbackup;
           public Static String Objectname;    
        public Static String Email;
        public Static Boolean Backupbetweenintervals;
        public Static Datetime Backupstartingfrom;
        public Static Datetime BackupEnddatetime;
  
 @InvocableMethod (Label ='call batch apex')
    public static void callbatch(List<FlowInputs> request) {
             
        fullbackup = request[0].Full_Object_Backup;
           Feildnamefromuser = request[0].Enter_Feild_API_name_with_inbetween;
        partialbackup = request[0].Partial;
          Objectname = request[0].Objectname;
        Email = request[0].Email;
        Backupbetweenintervals = request[0].Backupbetweenintervals;
        Backupstartingfrom = request[0].Backupstartingfrom;
        BackupEnddatetime = request[0].BackupEnddatetime;
        Id batchInstanceId = Database.executeBatch(new exportobascsv(fullbackup, Feildnamefromuser, partialbackup,Objectname,Email,Backupbetweenintervals,Backupstartingfrom,BackupEnddatetime));
        //exportobascsv objbatch = new exportobascsv();
         //Database.executeBatch(objbatch, 200);
    
      
    }
    
    public class FlowInputs{
    
        @InvocableVariable
        public Boolean Full_Object_Backup;
        @InvocableVariable
        public Boolean Partial;
        @InvocableVariable
        public String Enter_Feild_API_name_with_inbetween;
         @InvocableVariable
        public String Objectname;    
         @InvocableVariable
        public String Email;
         @InvocableVariable
        public Boolean Backupbetweenintervals;
        @InvocableVariable
        public Datetime Backupstartingfrom;
        @InvocableVariable
        public Datetime BackupEnddatetime;
    }  
}

My Test class which my helper class has 100% and batch class has 16%


    @isTest
    public Static Void unitTest1(){
        Account Acc = New Account();
        Acc.Name = 'Test Account';
        acc.Region__c = 'EMEA';
        Insert Acc;
        Opportunity Opp = new Opportunity();
        Opp.Name = 'Test Opportunity';
        Opp.AccountId = Acc.Id;
        Opp.CloseDate =System.today();
        Opp.StageName = 'Closed Won';
        
        Insert Opp;
        Export_Object_as_CSV__c csv= new Export_Object_as_CSV__c();
        //csv.name='sample';
        csv.Field_backup__c=true;
        csv.Field_name_Separated_with__c='Name';
         csv.Backup_between_interval__c = true;
        csv.Backup_from__c = System.today();
         csv.Backup_till__c = System.today() + 5;
        csv.Name = 'Account';
        csv.Email_ID__c = 'thanigai.k.balaji@apisero.com';
        insert csv;
        ExportObjectHelperclass.FlowInputs fi = new ExportObjectHelperclass.FlowInputs();
        fi.Enter_Feild_API_name_with_inbetween = 'name';
        fi.Full_Object_Backup = true;
        fi.Partial = false;
        
        test.startTest();    
        
        ExportObjectHelperclass.callbatch(new List<ExportObjectHelperclass.FlowInputs>{fi});
        exportobascsv cs=new exportobascsv(true, 'name', false, 'Account', 'thanigai.k.balaji@apisero.com', false, System.today(), System.today()+5);
        Id batchId = Database.executeBatch(cs);
             
        test.stopTest();
        
    }
}
global class ExportObjectAsCSV implements Database.Batchable <SObject>, Database.Stateful {
   @InvocableMethod (Label ='call batch apex')
    public static void callbatch()
    {
        ExportObjectAsCSV EC = new ExportObjectAsCSV();
      
        Id batchId = Database.executeBatch(EC,200);
    }
        
   global Database.QueryLocator start (Database.BatchableContext bc)
{
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String query = 'Select ';
    
   
for(String fieldName : fieldMap.keyset() )
    {
        query += fieldname+',';   
        }
query = query.removeEnd(',');
     if(!test.isRunningTest()){
        query += ' from Opportunity where lastmodifieddate <= yesterday';
        }else{
            query += ' from Opportunity';
        }  
    
  
    return Database.getQueryLocator(query);
}
   global static void execute(Database.BatchableContext bc, List<Opportunity> OppList)
   {  
       try{      
Export_Object_as_CSV__c eo = [select name,Field_backup__c,Full_backup__c,Field_name_Separated_with__c from Export_Object_as_CSV__c order by createddate DESC limit 1];
    String generatedCSVFile = '';
           if(eo.Full_backup__c == true)
    {
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();

           for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += Fieldname +',';     
        }
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(Opportunity company: OppList){
  for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += company.get(fieldName)+ ',';     
        }
    generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 

    }else if(eo.Field_backup__c == true )
    {
 String Fieldfromuser = (string) eo.Field_name_Separated_with__c;
 list<String> eachline = Fieldfromuser.split(' ');

for(Integer i = 0; i < eachline.size(); i++)
{
     
        generatedCSVFile += eachline[i] +',';     
        
}
        generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(Opportunity company: OppList){
 for(Integer i = 0; i < eachline.size(); i++)
{
        generatedCSVFile += company.get(eachline[i])+ ',';     
        }
    generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 
} }
//send email with generated csv file
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = 'Opportunitybackup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
String subject = 'Opportunity backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Opportunity backup');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
       }
       
       catch(exception e)
       {
            system.debug('Exception Caught:'+e.getmessage());
       }
       }
       
    global void finish(Database.BatchableContext bc)
    {
    }  
   

}


Test class i have used:

@isTest
public class OpportunityExportBatchTest {
    @isTest
    public Static Void unitTest(){
        Account Acc = New Account();
        Acc.Name = 'Test Account';
        acc.Region__c = 'EMEA';
        Insert Acc;
        Opportunity Opp = new Opportunity();
        Opp.Name = 'Test Opportunity';
        Opp.AccountId = Acc.Id;
        Opp.CloseDate =System.today();
        Opp.StageName = 'Closed Won';
        
        Insert Opp;
        
        test.startTest();    
          ExportObjectAsCSV lp = new ExportObjectAsCSV();
        Id batchId = Database.executeBatch(lp);
     
        test.stopTest();
    }
}
I have been trying to get 3 input from Screen flow and pass the values from screenflow to batch apexUser-added image
Below is my Batch apex:

Here i am unable to pass the 2 Boolean and one String from flow to my batch apex inside Execute method, Please suggest how i can acheive the same

global class ExportObjectAsCSV implements Database.Batchable <SObject>{
@InvocableMethod (Label ='call batch apex')
    
    public static void callbatch() {
       
        Id jobID = database.executeBatch(new ExportObjectAsCSV());
  
    }
       
   
    global Database.QueryLocator start (Database.BatchableContext bc)
{
    String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
    {
        query += fieldname+',';   
        }
query = query.removeEnd(',');
     if(!test.isRunningTest()){
        query += ' from Opportunity where lastmodifieddate = yesterday';
        }else{
            query += ' from Opportunity';
        }  
    return Database.getQueryLocator(query);
}
   global void execute(Database.BatchableContext bc, List<Opportunity> OppList)
   {
       try{     
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String generatedCSVFile = '';
for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += fieldName +',';     
        }
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(Opportunity company: OppList){
  for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += company.get(fieldName)+ ',';     
        }
    generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 
}
//send email with generated csv file
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = 'Opportunitybackup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
String subject = 'Opportunity backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Opportunity backup');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
       }
       catch(exception e)
       {
            system.debug('Exception Caught:'+e.getmessage());
       }
       }
       
    global void finish(Database.BatchableContext bc)
    {
    }  
}
Batch class which is not working :

global class exportobjectascsvbatch implements Database.Batchable <SObject>{
global Database.QueryLocator start (Database.BatchableContext bc)
{
    String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
    {
        query += fieldname+',';   
        }

query = query.removeEnd(',');
query += ' from Opportunity where lastmodifieddate = today limit 200';
    return Database.getQueryLocator(query);
}
   global void execute(Database.BatchableContext bc, List<Opportunity> OppList)
   {
       try{     
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String generatedCSVFile = '';
for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += fieldName +',';     
        }
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(Opportunity company: OppList){
  for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += company.get(fieldName)+ ',';     
        }
    generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 
}
//send email with generated csv file
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = 'Opportunitybackup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
String subject = 'Opportunity backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Opportunity backup');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
       }
       catch(exception e)
       {
            system.debug('Exception Caught:'+e.getmessage());
       }
       }
       
    global void finish(Database.BatchableContext bc)
    {
    }  
}




Apex class which works as expected:

public class exportopp { 

    public static void exportopp() {    
List<Opportunity> extractOpplist = new List<Opportunity>();

   List<Opportunity> OpportunityList = new List<Opportunity>();
        
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
    {
        
        query += fieldname+',';
        
        }

query = query.removeEnd(',');
        
        query += ' from Opportunity where lastmodifieddate = yesterday';
       
system.debug(query);
List<Opportunity>  OppList = database.query(query);

system.debug(opplist);


String generatedCSVFile = '';
for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += fieldName +',';     
        }
generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 


for(Opportunity company: OppList){
  
for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += company.get(fieldName)+ ',';     
        }
    generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 
}
    
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = 'Opportunity backup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
String subject = 'Opportunity backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Opportunity backup');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
}
}


can anyone able to check what causing the issue and also if possible please share test class for apex class 
Please help me with test case for below batch apex



global class exportobjectascsvbatch implements Database.Batchable <SObject>{
global Database.QueryLocator start (Database.BatchableContext bc)
{
    String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
    {
        query += fieldname+',';   
        }

query = query.removeEnd(',');
query += ' from Opportunity where lastmodifieddate = today';
    return Database.getQueryLocator(query);
}
   global void execute(Database.BatchableContext bc, List<Opportunity> OppList)
   {
       try{     
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String generatedCSVFile = '';
for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += fieldName +',';     
        }
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(Opportunity company: OppList){
  for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += company.get(fieldName)+ ',';     
        }
    generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 
}
//send email with generated csv file
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = 'Opportunitybackup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
String subject = 'Opportunity backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Opportunity backup');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
       }
       catch(exception e)
       {
            system.debug('Exception Caught:'+e.getmessage());
       }
       }
       
    global void finish(Database.BatchableContext bc)
    {
    }  
}
 
I have created a batch apex but unable to write test class for the same.


global class exportobjectascsvbatch implements Database.Batchable <SObject>{
global Database.QueryLocator start (Database.BatchableContext bc)
{
    String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
    {
        query += fieldname+',';   
        }

query = query.removeEnd(',');
query += ' from Opportunity where lastmodifieddate = yesterday';
    system.debug(query);
    return Database.getQueryLocator(query);
}
   global void execute(Database.BatchableContext bc, List<Opportunity> OppList)
   {
       try{     
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String generatedCSVFile = '';
for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += fieldName +',';     
        }
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(Opportunity company: OppList){
  for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += company.get(fieldName)+ ',';     
        }
    generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 
}

       //send email with generated csv file
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = 'Opportunitybackup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
String subject = 'Opportunity backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Opportunity backup');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
       }
       catch(exception e)
       {
            system.debug('Exception Caught:'+e.getmessage());
       }
       }
       
    global void finish(Database.BatchableContext bc)
    {
    }  
}
 
Below is my apex class even after trying to cover all the conditions i am getting only 45% of test coverage.

@RestResource(urlMapping='/v1/UpdateFWAReferralCode/*') global class FWAReferralCode { @HttpPost global static Void Updatecode(Integer updatelimit){ RestResponse res = RestContext.response; if (res == null) { res = new RestResponse(); RestContext.response = res; } List<Account> accid = [SELECT Id, (Select id,name from assets where name = :label.BasePlanName or name =:label.PlusPlanName) FROM Account WHERE Network__c = 'CORE' AND vlocity_cmt__Status__c = 'Active' AND Customer_Group__c != 'Free Trial' AND ID IN (Select Accountid from asset where name = :label.BasePlanName or name =:label.PlusPlanName) AND Id NOT IN (SELECT Account__c FROM FWA_Referral_Code__c WHERE Account__c != null) LIMIT :updatelimit]; //List<FWA_Referral_Code__c> FWAcode = [select ID,Plan__c,Mapped_Timestamp__c,Account__c from FWA_Referral_Code__c where Account__c = NULL limit :updatelimit]; if(accid.size() >0) { system.debug(accid.size()); } List<FWA_Referral_Code__c> FWAupdate = new List<FWA_Referral_Code__c>(); List<ID> Responselist = new List<ID>(); List<FWA_Referral_Code__c> FWAResponse = new List<FWA_Referral_Code__c>(); try{ for(Account ac: accid) { FWA_Referral_Code__c fwa= [select ID,Plan__c,Mapped_Timestamp__c,Account__c from FWA_Referral_Code__c where Account__c = NULL limit 1] ; Responselist.add(fwa.id); fwa.account__c = ac.id; fwa.Mapped_Timestamp__c = DateTime.Now(); if(ac.assets[0].name == label.BasePlanName) { fwa.Plan__c = label.BasePlanName; system.debug(fwa.Plan__c); } else if (ac.assets[0].name == label.PlusPlanName) { fwa.Plan__c = label.PlusPlanName; system.debug(fwa.Plan__c); } FWAupdate.add(fwa); update FWAupdate; system.debug(FWAupdate); } for(FWA_Referral_Code__c resp: [select ID,Account__c from FWA_Referral_Code__c where Id =:Responselist]) { FWAResponse.add(resp); } if(FWAResponse.size()>0){ res.responseBody = Blob.valueOf(Json.serialize(FWAResponse)); system.debug(res.responseBody); res.addHeader(Label.label_Content_Type, Label.label_application_json); res.statusCode = 200; system.debug(res.statusCode); return; } } catch (Exception e) { System.debug('Error: ' + e.getMessage()); } } }

my test class:

@isTest Public class FWAReferralCodeTest{ Public static testMethod void FWAReferralTest(){ FWA_Referral_Code__c fwa = new FWA_Referral_Code__c(name = 'testing' ); Account ac= new Account(Name= 'Thanigai testfwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE',ServiceSharingType__c = 'Group',Customer_Group__c = 'Test' ); Asset ass = new asset(name = 'visible+ plan', Accountid = ac.Id); insert fwa; insert ass; insert ac; FWA_Referral_Code__c fwa1 = new FWA_Referral_Code__c(name = 'testing1' ); Account ac1= new Account(Name= 'Thanigai fwa', vlocity_cmt__Status__c = 'Active', Network__c = 'CORE',ServiceSharingType__c = 'Group',Customer_Group__c = 'Test' ); Asset ass1 = new asset(name = 'visible plan', Accountid = ac.Id); insert ass1; insert fwa1; insert ac1; FWA_Referral_Code__c fw = new FWA_Referral_Code__c(Account__c = ac1.id,Mapped_Timestamp__c = DateTime.Now(),Plan__c =label.BasePlanName ); FWA_Referral_Code__c fw1 = new FWA_Referral_Code__c(Account__c = ac.id,Mapped_Timestamp__c = DateTime.Now(),Plan__c =label.PlusPlanName ); insert fw; insert fw1; Test.startTest(); FWAReferralCode.Updatecode(1); Test.stopTest(); } }
My Batch apex:

public class exportobascsv implements Database.Batchable <SObject>, Database.Stateful {
        public Final String Feildnamefromuser;
        public Final Boolean fullbackup;
        public Final Boolean partialbackup;
           public Final String Objectname;    
        public Final String Email;
        public Final Boolean Backupbetweenintervals;
        public Final Datetime Backupstartingfrom;
        public Final Datetime BackupEnddatetime;
    public exportobascsv(Boolean full,String Feildname,Boolean partial,String obj, String Emailid, Boolean intervals, Datetime start, Datetime endtime)
    {
        fullbackup = full;
        Feildnamefromuser = Feildname;
        partialbackup = partial;
        Objectname = obj;
        Email = Emailid;
        Backupbetweenintervals = intervals;
        Backupstartingfrom = start;
        BackupEnddatetime = endtime;
    }
        
   public Database.QueryLocator start (Database.BatchableContext bc)
{
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
// query to return Object 
String query = 'Select ';       
for(String fieldName : fieldMap.keyset() )
    {
        query += fieldname+',';   
        }
query = query.removeEnd(',');
    if(Backupbetweenintervals == true)
    {
         String newbackupfrom = Backupstartingfrom.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');
        String newbackuptill = BackupEnddatetime.format('yyyy-MM-dd\'T\'hh:mm:ss\'Z\'');   
     if(!test.isRunningTest()){
        query += ' from ' +Objectname+ ' where lastmodifieddate >= ' +newbackupfrom+ ' and lastmodifieddate <= ' +newbackuptill+ '';
     }else{
            query += ' from ' +Objectname+ '';
     }  }
    else {
        if(!test.isRunningTest()){
        query += ' from ' +Objectname+ ' where lastmodifieddate = yesterday';
     }else{
            query += ' from ' +Objectname+ '';
     } 
    }
         return Database.getQueryLocator(query);
}
   public void execute(Database.BatchableContext bc, List<sobject> OppList)
   {   
 try{      
  
    String generatedCSVFile = '';
        if(fullbackup == true)
    {
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(Objectname).getDescribe().fields.getMap();
        for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += Fieldname +',';     
        }
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(sObject company: OppList){
  for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += company.get(fieldName)+ ',';     
        }
        generatedCSVFile = generatedCSVFile.removeEnd(',');
        generatedCSVFile = generatedCSVFile + '\n'; 

    }else if(partialbackup == true )
    {
        
//Split the text in Feild name as separate lines
list<String> eachline = Feildnamefromuser.split(' ');
for(Integer i = 0; i < eachline.size(); i++)
{
        generatedCSVFile += eachline[i] +',';            
}
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(sobject company: OppList){
 for(Integer i = 0; i < eachline.size(); i++)
{
        generatedCSVFile += company.get(eachline[i])+ ',';     
        }
    generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 

    }

//send email with generated csv file
String Email1= Email;
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = '' +Objectname+ ' backup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{Email1};
String subject = '' +Objectname+ '  backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Please find the Object backup file attached to the mail');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
 
       }
       catch(exception e)
       {
            system.debug('Exception Caught:'+e.getmessage());
       }
       }
       
    public void finish(Database.BatchableContext bc)
    {
    }  
   

}


My Helper Apex class:

public class ExportObjectHelperclass {

        public static String Feildnamefromuser;
        public static Boolean fullbackup;
        public static Boolean partialbackup;
           public Static String Objectname;    
        public Static String Email;
        public Static Boolean Backupbetweenintervals;
        public Static Datetime Backupstartingfrom;
        public Static Datetime BackupEnddatetime;
  
 @InvocableMethod (Label ='call batch apex')
    public static void callbatch(List<FlowInputs> request) {
             
        fullbackup = request[0].Full_Object_Backup;
           Feildnamefromuser = request[0].Enter_Feild_API_name_with_inbetween;
        partialbackup = request[0].Partial;
          Objectname = request[0].Objectname;
        Email = request[0].Email;
        Backupbetweenintervals = request[0].Backupbetweenintervals;
        Backupstartingfrom = request[0].Backupstartingfrom;
        BackupEnddatetime = request[0].BackupEnddatetime;
        Id batchInstanceId = Database.executeBatch(new exportobascsv(fullbackup, Feildnamefromuser, partialbackup,Objectname,Email,Backupbetweenintervals,Backupstartingfrom,BackupEnddatetime));
        //exportobascsv objbatch = new exportobascsv();
         //Database.executeBatch(objbatch, 200);
    
      
    }
    
    public class FlowInputs{
    
        @InvocableVariable
        public Boolean Full_Object_Backup;
        @InvocableVariable
        public Boolean Partial;
        @InvocableVariable
        public String Enter_Feild_API_name_with_inbetween;
         @InvocableVariable
        public String Objectname;    
         @InvocableVariable
        public String Email;
         @InvocableVariable
        public Boolean Backupbetweenintervals;
        @InvocableVariable
        public Datetime Backupstartingfrom;
        @InvocableVariable
        public Datetime BackupEnddatetime;
    }  
}

My Test class which my helper class has 100% and batch class has 16%


    @isTest
    public Static Void unitTest1(){
        Account Acc = New Account();
        Acc.Name = 'Test Account';
        acc.Region__c = 'EMEA';
        Insert Acc;
        Opportunity Opp = new Opportunity();
        Opp.Name = 'Test Opportunity';
        Opp.AccountId = Acc.Id;
        Opp.CloseDate =System.today();
        Opp.StageName = 'Closed Won';
        
        Insert Opp;
        Export_Object_as_CSV__c csv= new Export_Object_as_CSV__c();
        //csv.name='sample';
        csv.Field_backup__c=true;
        csv.Field_name_Separated_with__c='Name';
         csv.Backup_between_interval__c = true;
        csv.Backup_from__c = System.today();
         csv.Backup_till__c = System.today() + 5;
        csv.Name = 'Account';
        csv.Email_ID__c = 'thanigai.k.balaji@apisero.com';
        insert csv;
        ExportObjectHelperclass.FlowInputs fi = new ExportObjectHelperclass.FlowInputs();
        fi.Enter_Feild_API_name_with_inbetween = 'name';
        fi.Full_Object_Backup = true;
        fi.Partial = false;
        
        test.startTest();    
        
        ExportObjectHelperclass.callbatch(new List<ExportObjectHelperclass.FlowInputs>{fi});
        exportobascsv cs=new exportobascsv(true, 'name', false, 'Account', 'thanigai.k.balaji@apisero.com', false, System.today(), System.today()+5);
        Id batchId = Database.executeBatch(cs);
             
        test.stopTest();
        
    }
}
global class ExportObjectAsCSV implements Database.Batchable <SObject>, Database.Stateful {
   @InvocableMethod (Label ='call batch apex')
    public static void callbatch()
    {
        ExportObjectAsCSV EC = new ExportObjectAsCSV();
      
        Id batchId = Database.executeBatch(EC,200);
    }
        
   global Database.QueryLocator start (Database.BatchableContext bc)
{
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String query = 'Select ';
    
   
for(String fieldName : fieldMap.keyset() )
    {
        query += fieldname+',';   
        }
query = query.removeEnd(',');
     if(!test.isRunningTest()){
        query += ' from Opportunity where lastmodifieddate <= yesterday';
        }else{
            query += ' from Opportunity';
        }  
    
  
    return Database.getQueryLocator(query);
}
   global static void execute(Database.BatchableContext bc, List<Opportunity> OppList)
   {  
       try{      
Export_Object_as_CSV__c eo = [select name,Field_backup__c,Full_backup__c,Field_name_Separated_with__c from Export_Object_as_CSV__c order by createddate DESC limit 1];
    String generatedCSVFile = '';
           if(eo.Full_backup__c == true)
    {
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();

           for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += Fieldname +',';     
        }
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(Opportunity company: OppList){
  for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += company.get(fieldName)+ ',';     
        }
    generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 

    }else if(eo.Field_backup__c == true )
    {
 String Fieldfromuser = (string) eo.Field_name_Separated_with__c;
 list<String> eachline = Fieldfromuser.split(' ');

for(Integer i = 0; i < eachline.size(); i++)
{
     
        generatedCSVFile += eachline[i] +',';     
        
}
        generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(Opportunity company: OppList){
 for(Integer i = 0; i < eachline.size(); i++)
{
        generatedCSVFile += company.get(eachline[i])+ ',';     
        }
    generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 
} }
//send email with generated csv file
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = 'Opportunitybackup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
String subject = 'Opportunity backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Opportunity backup');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
       }
       
       catch(exception e)
       {
            system.debug('Exception Caught:'+e.getmessage());
       }
       }
       
    global void finish(Database.BatchableContext bc)
    {
    }  
   

}


Test class i have used:

@isTest
public class OpportunityExportBatchTest {
    @isTest
    public Static Void unitTest(){
        Account Acc = New Account();
        Acc.Name = 'Test Account';
        acc.Region__c = 'EMEA';
        Insert Acc;
        Opportunity Opp = new Opportunity();
        Opp.Name = 'Test Opportunity';
        Opp.AccountId = Acc.Id;
        Opp.CloseDate =System.today();
        Opp.StageName = 'Closed Won';
        
        Insert Opp;
        
        test.startTest();    
          ExportObjectAsCSV lp = new ExportObjectAsCSV();
        Id batchId = Database.executeBatch(lp);
     
        test.stopTest();
    }
}
I have been trying to get 3 input from Screen flow and pass the values from screenflow to batch apexUser-added image
Below is my Batch apex:

Here i am unable to pass the 2 Boolean and one String from flow to my batch apex inside Execute method, Please suggest how i can acheive the same

global class ExportObjectAsCSV implements Database.Batchable <SObject>{
@InvocableMethod (Label ='call batch apex')
    
    public static void callbatch() {
       
        Id jobID = database.executeBatch(new ExportObjectAsCSV());
  
    }
       
   
    global Database.QueryLocator start (Database.BatchableContext bc)
{
    String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
    {
        query += fieldname+',';   
        }
query = query.removeEnd(',');
     if(!test.isRunningTest()){
        query += ' from Opportunity where lastmodifieddate = yesterday';
        }else{
            query += ' from Opportunity';
        }  
    return Database.getQueryLocator(query);
}
   global void execute(Database.BatchableContext bc, List<Opportunity> OppList)
   {
       try{     
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String generatedCSVFile = '';
for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += fieldName +',';     
        }
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(Opportunity company: OppList){
  for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += company.get(fieldName)+ ',';     
        }
    generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 
}
//send email with generated csv file
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = 'Opportunitybackup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
String subject = 'Opportunity backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Opportunity backup');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
       }
       catch(exception e)
       {
            system.debug('Exception Caught:'+e.getmessage());
       }
       }
       
    global void finish(Database.BatchableContext bc)
    {
    }  
}
Please help me with test case for below batch apex



global class exportobjectascsvbatch implements Database.Batchable <SObject>{
global Database.QueryLocator start (Database.BatchableContext bc)
{
    String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
    {
        query += fieldname+',';   
        }

query = query.removeEnd(',');
query += ' from Opportunity where lastmodifieddate = today';
    return Database.getQueryLocator(query);
}
   global void execute(Database.BatchableContext bc, List<Opportunity> OppList)
   {
       try{     
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String generatedCSVFile = '';
for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += fieldName +',';     
        }
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(Opportunity company: OppList){
  for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += company.get(fieldName)+ ',';     
        }
    generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 
}
//send email with generated csv file
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = 'Opportunitybackup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
String subject = 'Opportunity backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Opportunity backup');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
       }
       catch(exception e)
       {
            system.debug('Exception Caught:'+e.getmessage());
       }
       }
       
    global void finish(Database.BatchableContext bc)
    {
    }  
}
 
I have created a batch apex but unable to write test class for the same.


global class exportobjectascsvbatch implements Database.Batchable <SObject>{
global Database.QueryLocator start (Database.BatchableContext bc)
{
    String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String query = 'Select ';
for(String fieldName : fieldMap.keyset() )
    {
        query += fieldname+',';   
        }

query = query.removeEnd(',');
query += ' from Opportunity where lastmodifieddate = yesterday';
    system.debug(query);
    return Database.getQueryLocator(query);
}
   global void execute(Database.BatchableContext bc, List<Opportunity> OppList)
   {
       try{     
String SobjectApiName = 'Opportunity';
Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
Map<String, Schema.SObjectField> fieldMap = schemaMap.get(SobjectApiName).getDescribe().fields.getMap();
String generatedCSVFile = '';
for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += fieldName +',';     
        }
generatedCSVFile = generatedCSVFile.removeEnd(',');
generatedCSVFile = generatedCSVFile + '\n'; 
for(Opportunity company: OppList){
  for(String fieldName : fieldMap.keyset() )
    {
        generatedCSVFile += company.get(fieldName)+ ',';     
        }
    generatedCSVFile = generatedCSVFile.removeEnd(',');
    generatedCSVFile = generatedCSVFile + '\n'; 
}

       //send email with generated csv file
Messaging.EmailFileAttachment csvAttachment = new Messaging.EmailFileAttachment();
Blob csvBlob = blob.valueOf(generatedCSVFile);
String csvName = 'Opportunitybackup.csv';
csvAttachment.setFileName(csvName);
csvAttachment.setBody(csvBlob);
Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[]{'thanigai.k.balaji@apisero.com'};
String subject = 'Opportunity backup';
email.setSubject(subject);
email.setToAddresses(toAddresses);
email.setPlainTextBody('Opportunity backup');
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttachment});
Messaging.SendEmailResult[] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
       }
       catch(exception e)
       {
            system.debug('Exception Caught:'+e.getmessage());
       }
       }
       
    global void finish(Database.BatchableContext bc)
    {
    }  
}