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
llisallisa 

How to write a Test class for Importing a CSV File ?

Hello,
Here i am tried to write a test class for importing csv file.THere is no code coverage.Plese help me on this.

Controller Class-
public class adminPriorSale {
    public list<Sales__c> accon{get;set;}
    public Sales__c agnt{get;set;}
    
    public Blob csvFileBody{get;set;}
    public string csvAsString{get;set;}
    public String[] csvFileLines{get;set;}
    
    public adminPriorSale(apexpages.standardcontroller controller )
   {
     agnt = new Distributor_Prior_Sales__c();
     accon = New List<Distributor_Prior_Sales__c>(); 
     accon=[selectid,Name,SMS_sales_amount__c,SMS_Year__c,Exhibit_A_Customer__c,Calculation_Type__c from Distributor_Prior_Sales__c]; 
     csvFileLines = new String[]{};
     
     }

public void importCSVFile(){
        
       try{
              csvAsString = csvFileBody.toString();
              csvFileLines = csvAsString.split('\n'); 
              for(Integer i=0;i<csvFileLines.size();i++){
               Sales__c prisale = new Sales__c () ;
               string[] csvRecordData = csvFileLines[i].split(',');
               prisale.Year__c= csvRecordData[0] ;             
               prisale.sales_amount__c= Decimal.valueof(csvRecordData[1]);
               prisale.Customer__c= csvRecordData[2];
               prisale.Calculation_Type__c = csvRecordData[3];   
               accon.add(prisale); 
             
           }
        upsert accon;
        
        }
        catch (Exception e)
        {
            ApexPages.Message errorMessage = new ApexPages.Message(ApexPages.severity.ERROR,e.getMessage());
            ApexPages.addMessage(errorMessage);
        } 
        
  } 
}   



Testclass-
 @isTest
private class test_ExhibitAadminPriorSale {
    static testMethod void test_ExhibitAadminPriorSale4()
    { 
      //  Distributor_Prior_Sales__c   t1= new Distributor_Prior_Sales__c  ();
        //t1.Name='test1';
        //t1.SMS_sales_amount__c =123;
        //t1.SMS_Year__c='2014';
       // insert t1;
  
      
        Document lstDoc = [select id,name,Body from Document where name = 'accttest'];
 
        ExhibitAadminPriorSale file=new ExhibitAadminPriorSale ();
        file.fileAccess();
        Blob content= lstDoc.Body;
        file.csvFileBody = content; 
        file.importCSVFile(); 

file.csvAsString =content.toString();
String[] csvFileLines = new String[]{};
List accon;

accon = new List();
for (Integer i=1;i<csvFileLines.size();i++)
{
String[] csvRecordData = new String[]{};
csvRecordData = csvFileLines [i].split(',');
//Distributor_Prior_Sales__c a = new Distributor_Prior_Sales__c ();
Distributor_Prior_Sales__c   t1= new Distributor_Prior_Sales__c  ();
        t1.Name='test1';
        t1.SMS_sales_amount__c =123;
        t1.SMS_Year__c='2012';
        t1.Exhibit_A_Customer__c='I Architects';
        t1.Calculation_Type__c='Estimated Prior sales';
        t1.RecordTypeId = '0011900000AFc6c';

accon.add(t1); 
try{
      insert accon;
}
catch (Exception e)
{
      ApexPages.Message errormsg = new ApexPages.Message(ApexPages.severity.ERROR,'An error has occured. Please check the template');
      ApexPages.addMessage(errormsg);
}

}
}
 
Vignesh P 6Vignesh P 6
Hi llisa, 

For importing your CSV files into test classes, try this method.. First, Store your CSV files in Static Resources..Then Include the below line in test class.
consider You are dealing with Account Sobject.
====================================================
List<sObject> acct = Test.loadData(Account.sObjectType, 'acctList');
=====================================================

acctList--> Name of the static Resource.

Thanks
Vignesh P.
 
llisallisa
Hi Vignesh,
Thanks for your reply but I am unable to get u here. Can i Store my CSV files in Static Resources in the Controller class ?
CongnizentCongnizent
Hi ,

Use  @IsTest(seeAllData=true) in test class
llisallisa
Hello Congnizent,
Thanks a lot for your reply but it doesnot work.
CongnizentCongnizent
Can you please tell me error .

First you have to store document "accttest" in your org. and add csv file in it . 
llisallisa
Hello Congnizent,

There is no Error in the code but it covers nothing.
P5P5
For the issue mentioned here : https://salesforce.stackexchange.com/questions/175903/how-to-write-test-classes-to-export-data-from-the-csv-file. I have created a sample test classes which runs fine.

 
@isTest
public class ImportDataFromCSVControllerTest {
    static String str = 'Name,AccountNumber,Type,Accountsource,Industry\n Esha Patharabe,10001,Prospect,Test,Banking\n Trupti Nimje,10002,Prospect,Test,Banking';       

    public static String[] csvFileLines;
    public static Blob csvFileBody;

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

        ImportDataFromCSVController importData = new ImportDataFromCSVController();
        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'); 

        ImportDataFromCSVController importData = new ImportDataFromCSVController();
        importData.importCSVFile();
        Test.stopTest();
    }
}

The below is the code coverage shown : 

User-added image