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
Navya sree 4Navya sree 4 

Test class for lookup controller?

Hi,
can you please help me test class

public with sharing class LookupController {

   /* Method to query records using SOSL*/
    @AuraEnabled
    public static String search(String objectAPIName, String searchText,
            List<String> whereClause, List<String> extrafields){

        objectAPIName = String.escapeSingleQuotes(objectAPIName);
        searchText = String.escapeSingleQuotes(searchText);
        String searchQuery = 'FIND \'' + searchText + '*\' IN ALL FIELDS RETURNING ' + objectAPIName + '(Id,Name' ;
        if(!extrafields.isEmpty()){
            searchQuery = searchQuery + ',' + String.join(extrafields, ',') ;
        }
        system.debug(whereClause);
        if(!whereClause.isEmpty()){
            searchQuery = searchQuery + ' WHERE ' ;
            searchQuery = searchQuery + String.join(whereClause, 'AND') ;
        }
        searchQuery = searchQuery + ' LIMIT 10 ) ';
        system.debug(searchQuery);
        return JSON.serializePretty(search.query(searchQuery)) ;
    }

    /* Method to query records using SOQL*/
    @AuraEnabled
    public static List<SObject> getRecentlyViewed(
            String objectAPIName,
            List<String> whereClause,
            List<String> extrafields){

        String searchQuery = 'SELECT Id, Name';
        if(!extrafields.isEmpty()){
            searchQuery = searchQuery + ',' + String.join(extrafields, ',') ;
        }
        //searchQuery = searchQuery + ' FROM ' + objectAPIName + ' WHERE LastViewedDate != NULL ';
        searchQuery = searchQuery + ' FROM ' + objectAPIName ;
        if(!whereClause.isEmpty()){
            searchQuery = searchQuery + ' AND ' ;
            searchQuery = searchQuery + String.join(whereClause, 'AND') ;
            system.debug(searchQuery);
        }
        searchQuery = searchQuery + ' ORDER BY LastViewedDate DESC LIMIT 10 ' ;
        List<SObject> objectList =  new List<SObject>();
                system.debug('-----------------------'+searchQuery);
        objectList = Database.query(searchQuery);
        return objectList;
    }
}


Thanks
sfdcMonkey.comsfdcMonkey.com
Hi navya, try below test class 
@isTest
public class LookupControllerTest {
  static testMethod void testMethodOne() {
      Account acc = new Account();
        acc.Name = 'test';
        acc.Phone = '1234567897';
      // add all required fields here..
      insert acc;
       
      List<string> lstExtraFields = new List<string>();
        lstExtraFields.add('Phone');
      
      List<string> lstWhere = new List<string>();
       
      LookupController.search('Account', 'test',lstWhere,lstExtraFields);
      LookupController.getRecentlyViewed('Account',lstWhere, lstExtraFields);
  }
 
}
this will give you more then 80% code coverge 

Thanks,let us know if it helps you 
http://sfdcMonkey.com
Maharajan CMaharajan C
Hi Navya,

Small change in your class also in line 41. You have used the AND instead of Where.

Please change the class first as like below then run the test class. 

The below test class give 100% coverage.

@isTest
public class LookupControllerTest {
  static testMethod void testMethodOne() {
       
      List<string> lstExtraFields = new List<string>();
        lstExtraFields.add('Phone');
      
      List<string> lstWhere = new List<string>();
      lstWhere.add('Id != Null');
       
      LookupController.search('Account', 'test',lstWhere,lstExtraFields);
      LookupController.getRecentlyViewed('Account',lstWhere, lstExtraFields);
  }
 
}


===================


public with sharing class LookupController {

   /* Method to query records using SOSL*/
    @AuraEnabled
    public static String search(String objectAPIName, String searchText,
            List<String> whereClause, List<String> extrafields){
        system.debug('@@@ whereClause = '+whereClause);
        system.debug('@@@ whereClause = '+whereClause[0]);
        objectAPIName = String.escapeSingleQuotes(objectAPIName);
        searchText = String.escapeSingleQuotes(searchText);
        String searchQuery = 'FIND \'' + searchText + '*\' IN ALL FIELDS RETURNING ' + objectAPIName + '(Id,Name' ;
        if(!extrafields.isEmpty()){
            searchQuery = searchQuery + ',' + String.join(extrafields, ',') ;
        }
        system.debug(whereClause);
        if(!whereClause.isEmpty()){
            searchQuery = searchQuery + ' WHERE ' ;
            searchQuery = searchQuery + String.join(whereClause, ' AND') ;
          
        }
        searchQuery = searchQuery + ' LIMIT 10 ) ';
        system.debug(searchQuery);
        return JSON.serializePretty(search.query(searchQuery)) ;
    }

    /* Method to query records using SOQL*/
    @AuraEnabled
    public static List<SObject> getRecentlyViewed(
            String objectAPIName,
            List<String> whereClause,
            List<String> extrafields){
        system.debug('@@@ whereClause = '+whereClause);
        system.debug('@@@ whereClause = '+whereClause[0]);
        String searchQuery = 'SELECT Id, Name';
        if(!extrafields.isEmpty()){
            searchQuery = searchQuery + ',' + String.join(extrafields, ',') ;
        }
        //searchQuery = searchQuery + ' FROM ' + objectAPIName + ' WHERE LastViewedDate != NULL ';
        searchQuery = searchQuery + ' FROM ' + objectAPIName ;
        if(!whereClause.isEmpty()){
            // searchQuery = searchQuery + ' AND ' ;
            searchQuery = searchQuery + ' WHERE ' ;

            searchQuery = searchQuery + String.join(whereClause, ' AND') ;
           
             
            
            system.debug(searchQuery);
        }
        searchQuery = searchQuery + ' ORDER BY LastViewedDate DESC LIMIT 10 ' ;
        List<SObject> objectList =  new List<SObject>();
                system.debug('-----------------------'+searchQuery);
        objectList = Database.query(searchQuery);
        return objectList;
    }
}


Can you please Let me know if it helps or not!!!

If it helps don't forget to mark this as a best answer!!!


Thanks,
Maharajan.C
Maharajan CMaharajan C
remove the debug statements i have used that for find the issue in your class.
Ajay K DubediAjay K Dubedi
Hi Navya,

Below test class can fulfill your requirements. Hope this will work for you.

@isTest
private class AccountRecord_Test {
    @isTest
    static void Controller_Test(){
        List<Account> accInsert=new List<Account>();
        for(integer i=0;i<5;i++){
            Account acc=new Account();
            acc.Name='Test Account';
            acc.Phone='9415825000';
            acc.Billingcity='VNS';
            acc.BillingPostalcode='221002';
            accInsert.add(acc);
        }
        Insert accInsert;
     
       List<string> newFieldList = new List<string>();
       newFieldList.add('Phone');
      List<string> lstSelect = new List<string>();
      test.startTest();
      LookupController.search('Account', 'Test Account',lstSelect,newFieldList);
      LookupController.getRecentlyViewed('Account',lstSelect, newFieldList);
      test.stopTest();
    
    }    
      
}


Please mark this as best answer if this solves your problem.

Thank you
Ajay Dubedi