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
suji srinivasansuji srinivasan 

testclass - convert currency to word

how to write testclass for convert currency to word  Apex class?

Apex class:

public with sharing class ConvertCurrencyToWords {
 
     static String[] to_19 = new string[]{ 'zero', 'one',  'two', 'three', 'four',  'five',  'six',  
     'seven', 'eight', 'nine', 'ten',  'eleven', 'twelve', 'thirteen',  
      'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen' };  
    static String[] tens = new string[]{ 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'};  
    static String[] denom = new string[]{ '',  
     'thousand',   'million',     'billion',    'trillion',    'quadrillion',  
      'quintillion', 's!xtillion',   'septillion',  'octillion',   'nonillion',  
      'decillion',  'undecillion',   'duodecillion', 'tredecillion',  'quattuordecillion',  
      's!xdecillion', 'septendecillion', 'octodecillion', 'novemdecillion', 'vigintillion' };  
    // convert a value < 100 to English.    
   public static String convert_nn(integer val) {  
      if (val < 20)  
        return to_19[val];  
      if(val == 100)  
          return 'One Hundred';  
      for (integer v = 0; v < tens.size(); v++) {  
        String dcap = tens[v];  
        integer dval = 20 + 10 * v;  
        if (dval + 10 > val) {  
          if (Math.Mod(val,10) != 0)  
           return dcap + ' ' + to_19[Math.Mod(val,10)];  
         return dcap;  
        }      
      }  
      return 'Should never get here, less than 100 failure';  
    }  
    // convert a value < 1000 to english, special cased because it is the level that kicks   
    // off the < 100 special case. The rest are more general. This also allows you to  
   // get strings in the form of "forty-five hundred" if called directly.  
   public static String convert_nnn(integer val) {  
     String word = '';  
     integer rem = val / 100;  
     integer mod = Math.mod(val,100);  
      if (rem > 0) {  
        word = to_19[rem] + ' hundred';          if (mod > 0) {  
          word += ' ';  
        }  
      }  
      if (mod > 0) {  
        word += convert_nn(mod);  
      }        return word;  
    }  
   public static String english_number(long val) {  
     if (val < 100) {  
       return convert_nn(val.intValue());  
      }  
      if (val < 1000) {  
        return convert_nnn(val.intValue());  
      }  
      for (integer v = 0; v < denom.size(); v++) {  
        integer didx = v - 1;  
        integer dval = (integer)Math.pow(1000, v);  
        if (dval > val) {  
          integer mod = (integer)Math.pow(1000, didx);  
         integer l = (integer) val / mod;  
          integer r = (integer) val - (l * mod);  
          String ret = convert_nnn(l) + ' ' + denom[didx];  
          if (r > 0) {  
           ret += ', ' + english_number(r);  
         }  
          return ret;  
        }  
      }  
      return 'Should never get here, bottomed out in english_number';  
        }  
 
        
  }
Best Answer chosen by suji srinivasan
Sai PraveenSai Praveen (Salesforce Developers) 
Hi Suji,

Please find the below test class which gives you around 90% of code coverage
 
@istest
private class ConvertCurrencyToWordsTest  {
 
    static testMethod void testMethod1() 
    {  
        
        String number1=ConvertCurrencyToWords.convert_nn(10);
        system.assertEquals('ten', number1);
        String number2=ConvertCurrencyToWords.convert_nn(100);
        system.assertEquals('One Hundred', number2);
        String number3=ConvertCurrencyToWords.convert_nnn(356);
        system.assertEquals('three hundred fifty six', number3);
        String number4=ConvertCurrencyToWords.english_number(35645);
        system.assertEquals('thirty five thousand, six hundred forty five', number4);
    }

}

Let me know if you face any issues.

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

Thanks,

All Answers

Sai PraveenSai Praveen (Salesforce Developers) 
Hi Suji,

Please find the below test class which gives you around 90% of code coverage
 
@istest
private class ConvertCurrencyToWordsTest  {
 
    static testMethod void testMethod1() 
    {  
        
        String number1=ConvertCurrencyToWords.convert_nn(10);
        system.assertEquals('ten', number1);
        String number2=ConvertCurrencyToWords.convert_nn(100);
        system.assertEquals('One Hundred', number2);
        String number3=ConvertCurrencyToWords.convert_nnn(356);
        system.assertEquals('three hundred fifty six', number3);
        String number4=ConvertCurrencyToWords.english_number(35645);
        system.assertEquals('thirty five thousand, six hundred forty five', number4);
    }

}

Let me know if you face any issues.

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

Thanks,
This was selected as the best answer
suji srinivasansuji srinivasan
Thank you sai praveen