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
ranga babu vangalapudi 2ranga babu vangalapudi 2 

How to write test class to update a csv file

Following is my code to upload csv file

public class importDataFromCSVController {
  public transient string csvAsString{get;set;}
  public transient String[] csvFileLines{get;set;}
  public  boolean secondBlock{get;set;}
  public  List<account> acclist{get;set;}
  public  String newline{get;set;}
  public  String coma{get;set;}
  public transient String listAccount{get;set;}
  public  String selectedValue{get;set;}
  public static string CSVfromJS;
  
  public importDataFromCSVController(){
    newline = '\n';
    coma = ',';
    csvFileLines = new String[]{};
    acclist = New List<Account>(); 
  }
  
  public List<SelectOption> getFSEOptions() {
       List<SelectOption> FSEoptions = new List<SelectOption>();
       FSEoptions.add(new SelectOption('Outlet Master','Outlet Master'));
       //FSEoptions.add(new SelectOption('Brand Master','Brand Master'));
       return FSEoptions;
  }
  
  Public List<String> headerValues{get;set;}
  public Map<String,String> fldsWithData{get;set;}
  public List<Account> onLoadLimitData{get;set;}
  public void importCSVFile(){
      fldsWithData = New Map<String,String>();
      onLoadLimitData = New List<Account>();
      secondBlock = true;
      headerValues = New List<String>();
      Boolean boolsizecheck = true;
          try{
           csvAsString = listAccount;
           //csvFileLines = csvAsString.split('\n');
           Utility_RowIterator r = New Utility_RowIterator(csvAsString,'\n'); 
            Integer i1 = 0;
            List<String> tempList = new List<String>();
            while(r.hasNext()){
              //system.debug('x : ' +r.next());
              //csvFileLines[i1++] = r.next();
                 // From here the code is not covered
              if(tempList.size()>2001 && boolsizecheck){
                  ApexPages.Message errorMessage = new ApexPages.Message(ApexPages.severity.error,'The records to load is high in number, maximum number of records you can load is 2000' );
                  ApexPages.addMessage(errorMessage);
                  boolsizecheck = false;
                  break;
              }
              else
              tempList.add(r.next());
            } 
            csvFileLines = tempList;
           //system.debug('====csvFileLines' + csvFileLines.size());
        
           List<String> headerValues1 = csvFileLines[0].split(',');
              
           for(integer i=0;i<headerValues1.size();i++){
               if(headerValues1[i].trim().length()>0){
                   headerValues.add(headerValues1[i].trim());
               }
           }
            
              if(boolsizecheck){
                  for(Integer i=1;i<csvFileLines.size();i++){
                      Account accObj = new Account() ;
                      List<string> csvRecordDataCommaNotConsdrd = csvFileLines[i].split(',');
                      List<string> csvRecordData = new List<String>();
                      string temp = '';
                      for(string str : csvRecordDataCommaNotConsdrd){
                          if(str.contains('"') || temp != ''){
                              if(str.contains('"') && temp != '' && temp.contains('"')){
                                  temp += str;
                                  csvRecordData.add(temp.replace('"',''));
                                  temp = '';
                                  continue;
                              }
                              if(str.contains('"')){
                                  temp += str+',';
                                  continue;
                              }
                              if(!str.contains('"')){
                                  temp += str+',';
                              }
                          }
                          else{
                              csvRecordData.add(str);
                          }
                      }
                      for(integer j=0;j<headerValues.size();j++){           
                          if(headerValues[j].trim().length()>0){
                              //system.debug('headerValues[j].trim()'+headerValues[j].trim() + csvRecordData[j].trim());
                              if(!(headerValues[j].trim() == 'ID' &&( csvRecordData[j].trim() == '' || csvRecordData[j].trim() =='"'))){
                                  accObj.put(headerValues[j].trim(),csvRecordData[j].trim().replaceAll('"',''));//.replaceAll('"','')
                              }
                          }
                      }
                      accList.add(accObj);
                  } 
                  if(accList.size()>500){
                      integer limitOnCount = 0;
                      ApexPages.Message errorMessage = new ApexPages.Message(ApexPages.severity.info,'Count is more than 500 showing only 500');
                      for(integer i=0;i<accList.size();i++){
                          if(limitOnCount <= 500){
                              onLoadLimitData.add(accList[i]);
                              limitOnCount = limitOnCount + 1;
                          }
                      }
                  }else{
                      onLoadLimitData.addAll(accList);
                  }
              }
           }catch(Exception e){
                   ApexPages.Message errorMessage = new ApexPages.Message(ApexPages.severity.error,'Something went wrong please resave your .csv file and try again. If error still exist please contact system admin' + e);
                   ApexPages.addMessage(errorMessage);
           }
          
  }
  
  public list<Account> faultRecords{get;set;}
  public boolean thirdblock{get;set;}
  public String myListString {get;set;}
  public void uploadData(){
     thirdblock = true;
     Integer successfullCount = 0;
     Integer failureCount = 0;
     Database.UpsertResult[] srList = Database.upsert(acclist, false);
     faultRecords = New List<Account>();
     for(integer i=0;i<srList.size();i++){
         if (!srList[i].isSuccess()) {
             failureCount = failureCount + 1;
            // errorIndex.put(i,'error messge');
             Account errorfile = acclist.get(i);
             Database.Error error = srList.get(i).getErrors().get(0);
             errorfile.Error_File__c =  'Error:'+ string.valueOf(error.getMessage());
             faultRecords.add(errorfile);
             headerValues.add('Error_File__c');
         }else{
             Account succesfile = acclist.get(i);
             succesfile.id = srList[i].getId();
            succesfile.Error_File__c = 'Success';
             headerValues.add('Error_File__c');
             headerValues.add('Id');
         }
     }
      Set<String> allFlds = New Set<String>();
      allFlds.addAll(headerValues);
      headerValues.clear();
      headerValues.addAll(allFlds);
      myListString = string.join(headerValues,',');
      successfullCount = srList.size() - failureCount;
      
      ApexPages.Message errorMessage = new ApexPages.Message(ApexPages.severity.error,'Error Count Records:'+failureCount);
      ApexPages.addMessage(errorMessage);
      
      ApexPages.Message successMessage = new ApexPages.Message(ApexPages.severity.info,'successfull Count Records:'+successfullCount);
      ApexPages.addMessage(successMessage);
      
  }
  
  
    public pageReference downloadPage(){
        exportCSVController();
        EmailTemplate temp = [Select Id, Name from EmailTemplate where Name = 'ErrorFileTemplate'];
        pagereference pagRef = New pagereference('/apex/ExportErrorFile');
        Blob csvBlob;
        if (Test.IsRunningTest())
        {
            csvBlob=Blob.valueOf('UNIT.TEST');
        }
        else{
            csvBlob = pagRef.getContent();
        }
            
        
        try{
            // Sends the email
            //Messaging.SendEmailResult [] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[] {email});
            return pagRef;
        }
        catch(exception e){
            ApexPages.Message errorMessage = new ApexPages.Message(ApexPages.severity.error,'Something went wrong please contact administrator');
            ApexPages.addMessage(errorMessage);
        }    
        return null;
    }
    
     public List<List<Account>> myList {get;set;}
    
    public void exportCSVController() {
        myList = new List<List<Account>>();
        List<Account> temp = New List<Account>();
        for(Integer i = 0; i < acclist.size(); i++){
            if(temp.size() < 1000){
                Account m = acclist[i];
                temp.add(m);
            }
            else{
                myList.add(temp);
                temp = new List<Account>();
                Account m = acclist[i];
                temp.add(m);
            }
        }
        myList.add(temp);
    }
 }

Below is the test class which covered only 64% of code

@isTest
public class importDataFromCSVTest {

     static testMethod void test1(){
         list<String> tempList = new list<String>();
         String str = '';
          Id RecordTypeId = Schema.SObjectType.Masters__c.getRecordTypeInfosByName().get('Cluster').getRecordTypeId();
        Masters__c master = New Masters__c();
        master.Cluster_Name__c='RPCSCL004';
        master.Geographic_State__c='ANDHRA PRADESH';
        master.RecordTypeid=RecordTypeId;
        insert master; 
        
    //Create one more master record to pass the condition  "aa.Cluster_Code__c!=dup.Cluster_Code__c" in IF.
    Masters__c master2 = New Masters__c();
    master2.Cluster_Name__c='RPCSCL004';
    master2.Geographic_State__c='Telangana';
    master2.RecordTypeid=RecordTypeId;
    insert master2;         
        
        TL_Master__c tl1= new TL_Master__c();
        tl1.Name='APTL004';
        tl1.TL_Territory_Name__c='NORTH COASTAL';
        tl1.Cluster__c=master.id;
        insert tl1;
        
    //Create one more master record to pass the condition  "aa.TL_Code__c!=dup.TL_Code__c" in IF.        
    TL_Master__c tl2= new TL_Master__c();
    tl2.Name='APTL004';
    tl2.TL_Territory_Name__c='NORTH COASTALL';
    tl2.Cluster__c=master2.id;
    insert tl2;
        
        TSE_Master__c oldTse2 = new TSE_Master__c();
        oldTse2.Name = 'APTS033';
        oldTse2.TSE_Territory_Name__c = 'VISAKHAPATNAM - III AREA-I';
        oldTse2.TL_Code__c=tl1.id;
        insert oldTse2;
        
        Beat_TSE_Mapping__c NewBte1 = new Beat_TSE_Mapping__c();
        NewBte1.Beat_Name__c = 'BEAT 03';
        NewBte1.Name = 'ABBT1130';
        NewBte1.TSE_Code__c = oldTse2.id;
        insert NewBte1;
        
        Outlets_Groups_Primary_Customer__c newGrp = new Outlets_Groups_Primary_Customer__c();
        newGrp.Name = 'mygroup';
        newGrp.Type__c = 'Groups';
        newGrp.State_Group_PC__c = 'ANDHRA PRADESH';        
        //newGrp.Lead_TL__c = null -> so that "if(outgrps.Lead_TL__c == NULL || outgrps.Lead_TL__c == '')" will be true.
        newGrp.Lead_TL__c = null;        
        insert newGrp;
        
        Account OldAcc = new Account();        
        OldAcc.Beat_Code__c = NewBte1.Id;
        //OldAcc.Beat_Name__c = oldBte.Beat_Name__c ;
        OldAcc.TSE_Code__c = oldTse2.id;
        //OldAcc.TSE_ID__c = oldBte.TSE_ID__c;
        //OldAcc.TSE_Name__c = oldBte.TSE_Name__c;
        OldAcc.District__c = 'Test District';
        OldAcc.Goegraphy_state__c = 'ANDHRA PRADESH';
        OldAcc.Town__c = 'Test Town';
        OldAcc.Name = 'Test name';
        OldAcc.Market_Type__c = 'Corporation';
        OldAcc.MSL_Town_Tier__c= 'BTNTest';
        OldAcc.Cluster_Code__c=master.Id;
        OldAcc.TSE_Code__c=oldTse2.id;
        OldAcc.Outlet_Type__c='D';
        OldAcc.Beat_Code__c= NewBte1.Id;
        OldAcc.TL_Code__c = tl1.Id;
        OldAcc.Address__c = 'testadd';
        OldAcc.Stock_List__c = 'Tier 1';
        OldAcc.Channel_type__c = 'PrOP';
        OldAcc.Micro_channel__c = 'Prestige Bar';
        OldAcc.Perfect_Outlet__c = 'Yes';
        OldAcc.Group_Outlet__c='Yes';
        oldAcc.Group_Name1__c = newGrp.Id;
        OldAcc.Contract_type__c = 'Open';
        insert OldAcc;
         
         Account NewAcc = new Account();        
        NewAcc.Beat_Code__c = NewBte1.Id;
        //OldAcc.Beat_Name__c = oldBte.Beat_Name__c ;
        NewAcc.TSE_Code__c = oldTse2.id;
        //OldAcc.TSE_ID__c = oldBte.TSE_ID__c;
        //OldAcc.TSE_Name__c = oldBte.TSE_Name__c;
        NewAcc.District__c = 'Test District';
        NewAcc.Goegraphy_state__c = 'ANDHRA PRADESH';
        NewAcc.Town__c = 'Test Town';
        NewAcc.Name = 'Test name';
        NewAcc.Market_Type__c = 'Corporation';
        NewAcc.MSL_Town_Tier__c= 'BTNTest';
        NewAcc.Cluster_Code__c=master.Id;
        NewAcc.TSE_Code__c=oldTse2.id;
        NewAcc.Outlet_Type__c='D';
        NewAcc.Beat_Code__c= NewBte1.Id;
        NewAcc.TL_Code__c = tl1.Id;
        NewAcc.Address__c = 'testadd1';
        NewAcc.Stock_List__c = 'Tier 2';
        NewAcc.Channel_type__c = 'PrOP';
        NewAcc.Micro_channel__c = 'Prestige Bar';
        NewAcc.Perfect_Outlet__c = 'Yes';
        NewAcc.Group_Outlet__c='Yes';
        NewAcc.Group_Name1__c = newGrp.Id;
        NewAcc.Contract_type__c = 'Open';
        insert NewAcc;
         List<Account> AccLst = new List<Account>();
         AccLst.add(OldAcc);
         AccLst.add(NewAcc);
         try{
         for(Integer i=0;i<=2002;i++){
         Account a = new Account();
             a.Name= 'newAccount'+i;
            AccLst.add(a);
         }
             system.assert(true,'You can not inactivate this account ');
        }
          catch(Exception e)
        {
        Boolean expectedExceptionThrown =  e.getMessage().contains('The records to load is high in number, maximum number of records you can load is 2000') ? true : false;
            System.assertEquals(expectedExceptionThrown, false);
        }
         //AccLst = [Select Id, Name From Account];
         test.startTest();
         importDataFromCSVController ctrl = new importDataFromCSVController();
         ctrl.acclist = AccLst;
         //ctrl.listAccount = String.valueOf(acc) + '\n,'+ String.valueOf(acc1);
         ctrl.getFSEOptions();
         ctrl.importCSVFile();
         ctrl.uploadData();
         ctrl.downloadPage();
         ctrl.selectedValue = '';
         test.stopTest();
     }
     }

your help is greatly appreciated. Thanks