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
krishna p 36krishna p 36 

test coverage merge accounts covers only 36%

 I have a problem test coverage covers only 34%,the below apex class method 'importCSVFile' in the for loop not covering the run the test class,please suggest 
Apex class merge accounts
----------------
public class MergeAccountsController {
    public Blob csvFileBody{get;set;}
    public string csvAsString{get;set;}
    public String[] csvFileLines{get;set;}
    public List<account> acclist{get;set;}
    public Boolean isChecked{ get; set;}
    public boolean hide {get;set;}
    List<Account> accDup = new List<Account>();
    String[] csvRecordData;
    String priID, secID, terID;
    
  public MergeAccountsController(){
      csvFileLines = new String[]{};
      acclist = New List<Account>();
      hide = true;
    }
    
  public void click(){
      if(isChecked == true){
          importCSVFile();
          restore(secID);
      }
      else{
          importCSVFile();
      }
  }

  public void importCSVFile(){
        hide = false;
        try{
            csvAsString = csvFileBody.toString();
            csvFileLines = csvAsString.split('\r\n');
        }
        catch(Exception e){
            ApexPages.Message csvError = new ApexPages.Message(ApexPages.severity.ERROR,'An error has occured while importing data. Please make sure input csv file is correct');
            ApexPages.addMessage(csvError);
        }
        
        for(Integer i=1; i<csvFileLines.size(); i++){
            csvRecordData = csvFileLines[i].split(',');
            Integer row = i+1;
            try{
            if(csvRecordData.size() == 2) {
                  priID = csvRecordData[0];
                  secID = csvRecordData[1];
                  Account pri, sec;
                
                  try{
                    pri = [SELECT ID from Account Where ID = :priID];
                  }
                  catch(QueryException qe){
                  ApexPages.Message recordError = new ApexPages.Message(ApexPages.severity.ERROR,'Account ' +priID+ ' in Row ' +row+ ' not found');
                  ApexPages.addMessage(recordError);
                  }
                  try{
                    sec = [SELECT ID from Account Where ID = :secID];
                    }
                  catch(QueryException qe){         
                    ApexPages.Message recordError = new ApexPages.Message(ApexPages.severity.ERROR,'Account ' +secID+ ' in Row ' +row+ ' not found');
                    ApexPages.addMessage(recordError);
                  }
                
                merge pri sec;
                }
            
              else if(csvRecordData.size() == 3) {
                  priID = csvRecordData[0];
                  secID = csvRecordData[1];
                  terID = csvRecordData[2];
                  Account pri, sec, ter;
                    
                  try{
                    pri = [SELECT ID from Account Where ID = :priID];
                  }
                  catch(QueryException qe){
                    ApexPages.Message recordError = new ApexPages.Message(ApexPages.severity.ERROR,'Account ' +priID+ ' in Row ' +row+ ' not found');
                    ApexPages.addMessage(recordError);
                  }
                  try{
                    sec = [SELECT ID from Account Where ID = :secID];
                  }
                  catch(QueryException qe){
                    ApexPages.Message recordError = new ApexPages.Message(ApexPages.severity.ERROR,'Account ' +secID+ ' in Row ' +row+ ' not found');
                    ApexPages.addMessage(recordError);
                    }
                  try{
                    ter = [SELECT ID from Account Where ID = :terID];
                  }
                  catch(QueryException qe){
                    ApexPages.Message recordError = new ApexPages.Message(ApexPages.severity.ERROR,'Account ' +terID+ ' in Row ' +row+ ' not found');
                    ApexPages.addMessage(recordError);
                  }
                                    
            accDup.add(sec);
            accDup.add(ter);
                    
                  try{
                     merge pri accDup;  
                  }
                  catch(DmlException e){
                      continue;
                  }  
              }
            }
            catch(NullPointerException npe){
                continue;
            }
        }
        ApexPages.Message complete = new ApexPages.Message(ApexPages.severity.INFO,'Process Complete');
        ApexPages.addMessage(complete);
    }
    public void restore(String acc){
        Account[] sec = [SELECT Id FROM Account WHERE ID = :secID ALL ROWS];
        undelete sec;
    }
}

test class : 
@isTest
Public class MergeAccountstest{
static String str = 'Name,BillingCountry,BillingCity,BillingStreet,BillingState,BillingPostalCode\n test22,india,Chennai,test,Tamil Nadu,588543 \n test222,india,Chennai,test2,Tamil Nadu,588544';       

//system.debug('------str ------'+str );
    public static String[] csvFileLines;
    public static Blob csvFileBody;
    public static String[] csvRecordData;
    public static Boolean isChecked =true;
    public static  testMethod void importCSVFile() {
        Account a = new Account(name='test',BillingCountry='india',BillingCity='Chennai',BillingStreet='test',BillingState='Tamil Nadu',BillingPostalCode='588543');
        insert a;
        Account a1 = new Account(name='test1',BillingCountry='india',BillingCity='Chennai',BillingStreet='test',BillingState='Tamil Nadu',BillingPostalCode='588543');
        insert a1;
        test.startTest();
        //merge a a1;
        MergeAccountsController m1=new MergeAccountsController();
         if(isChecked == true){
          m1.importCSVFile();
          //m1.restore(a1);
      }
      else{
          m1.importCSVFile();
      }
        //m1.importCSVFile();
        m1.click();
        m1.restore('a');
        test.stopTest();
        
    }

    static testmethod void testfileupload(){
        Test.startTest();       
        List<sObject> acct = Test.loadData(Account.sObjectType, 'mergeaccount');
        System.debug( '----acct ---' +acct );
        System.assert(acct.size() == 5);   
        csvFileBody = Blob.valueOf(str );
        System.debug( '----csvFileBody ---' +csvFileBody );
        String csvAsString = acct.toString();
        System.debug( '----csvAsString ---' +csvAsString ); 
        csvFileLines = csvAsString.split('\n');
        
        System.debug( '----csvFileLines---' +csvFileLines );
        
         for(Integer i=1; i<csvFileLines.size(); i++){
            csvRecordData = csvFileLines[i].split(',');
           }
           

        MergeAccountsController importData = new MergeAccountsController();
        importData.csvFileBody = csvFileBody;
        importData.importCSVFile();
        Test.stopTest();
    } 

    static testmethod void testfileuploadNegative(){
        Test.startTest();       
        csvFileBody = Blob.valueOf(str);
        String csvAsString = csvFileBody.toString();
        csvFileLines = csvAsString.split('\n'); 

        MergeAccountsController  importData = new MergeAccountsController();
        importData.importCSVFile();
        Test.stopTest();
    }
}
Best Answer chosen by krishna p 36
Foram Rana RForam Rana R
Hi Krishna,

​​​​​​​I hope you are doing well .....!!
Please use the below code:
 
@isTest
Public class MergeAccountstest{
    static String str = 'Name,BillingCountry,BillingCity,BillingStreet,BillingState,BillingPostalCode\n test22,india,Chennai,test,Tamil Nadu,588543 \n test222,india,Chennai,test2,Tamil Nadu,588544';       
    
    //system.debug('------str ------'+str );
    public static Blob csvFileBody;
    public static Boolean isChecked =true;
    
    public static  testMethod void importCSVFile() {
        
        test.startTest();
        MergeAccountsController m1=new MergeAccountsController();
        m1.csvFileBody = Blob.valueOf('test\r\ntest23,test34');
        if(isChecked == true){
            m1.importCSVFile();
        }
        else{
            m1.importCSVFile();
        }
        m1.isChecked = true;
        m1.click();
        m1.restore('a');
        test.stopTest();
    }
    
    public static  testMethod void importCSVFile2() {
        
        test.startTest();
        MergeAccountsController m1=new MergeAccountsController();
        m1.csvFileBody = Blob.valueOf('test\r\ntest23,test34,test56');
        if(isChecked == true){
            m1.importCSVFile();
        }
        else{
            m1.importCSVFile();
        }
        m1.isChecked = true;
        m1.click();
        m1.restore('a');
        test.stopTest();
    }
}


Hope this helps you.
If this helps kindly mark it as solved so that it may help others in the future.

Thanks & Regards,
Foram Rana