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
Amol Gaikwad 13Amol Gaikwad 13 

How To cover PageReference and HttpRequest In Test Class.My Test Class Covered 41% coverage

My Class-

global with sharing class Z_GeneratePDF implements Database.AllowsCallouts {
   
    public static String SUCCESSLABEL = 'success'; //label.symc_QuotePDFSuccessMessage;
 
   
    public static zqu__Quote__c getQuoteId(ID recordId) {           
        List<zqu__Quote__c> quoteList = [
            SELECT Id, Name, zqu__QuoteTemplate__r.zqu__Template_Id__c,
                   zqu__SubscriptionType__c,
                   zqu__Opportunity__r.Primary_Language_Spoken__c
              FROM zqu__Quote__c
             WHERE Id =: recordId];               
               
        if (quoteList.size() == 0) {
            System.debug('Error: No quotes found with Id: ' + recordId);
            return null;
        } else {       
            return quoteList[0];
        }
    }
   
    public static String getDefaultQuoteTemplateId(zqu__Quote__c quote) {
        String defaultQuoteTemplateId;
        Set<String> templates = new Set<String>();
        Map<String, QuoteTemplateLanguageMap__c> mapLangToTemplate = QuoteTemplateLanguageMap__c.getAll();
        for(String lang:mapLangToTemplate.keySet()){
            templates.add(mapLangToTemplate.get(lang).QuoteTemplateName__c);
        }
   
        List<zqu__Quote_Template__c> quoteTemplateList = [
            SELECT Name,zqu__IsDefault__c, zqu__Description__c,
                   zqu__Quote_Type__c, zqu__Template_Id__c
            FROM zqu__Quote_Template__c
            WHERE zqu__Quote_Type__c = :quote.zqu__SubscriptionType__c
              and Name in :templates]; 
       
        if (quoteTemplateList.size() == 0) {
            System.debug('No Quote Templates are setup');
            return null;
        }
       
        for (zqu__Quote_Template__c template : quoteTemplateList) {
            if(mapLangToTemplate.ContainsKey('English') && mapLangToTemplate.get('English').QuoteTemplateName__c == template.Name){
                defaultQuoteTemplateId = template.zqu__Template_Id__c;
            }                      
        }
     
        for (zqu__Quote_Template__c template : quoteTemplateList) {
           if(!String.isEmpty(quote.zqu__QuoteTemplate__r.zqu__Template_Id__c)
                  && !String.isEmpty(quote.zqu__Opportunity__r.Primary_Language_Spoken__c)
                  && mapLangToTemplate.ContainsKey(quote.zqu__Opportunity__r.Primary_Language_Spoken__c)){
               if(mapLangToTemplate.get(quote.zqu__Opportunity__r.Primary_Language_Spoken__c).QuoteTemplateName__c == template.Name){
                     defaultQuoteTemplateId = template.zqu__Template_Id__c;
               }              
           }
        }                  
        if(defaultQuoteTemplateId == null){
            quoteTemplateList =[SELECT Name,zqu__IsDefault__c, zqu__Description__c,
                                       zqu__Quote_Type__c, zqu__Template_Id__c
                                  FROM zqu__Quote_Template__c
                                 WHERE zqu__IsDefault__c = true];
            defaultQuoteTemplateId = quoteTemplateList[0].zqu__Template_Id__c;
        }
        return defaultQuoteTemplateId;
    }
  
    public static String generate(ID quoteID, String sess) {
        String retResult = '';
        String defaultQuoteTemplateId;
        //ID recordId = controller.getRecord().Id;
        zqu__Quote__c quote = getQuoteId(quoteID);
        if (quote != null) {
            System.debug('Quote != null');
           
          
             defaultQuoteTemplateId = getDefaultQuoteTemplateId(quote);
            
           
            if (defaultQuoteTemplateId == null) {
                System.debug('defaultQuoteTemplateID not found');
                retResult = 'defaultQuoteTemplateID not found';
                return retResult;
                //defaultQuoteTemplateId = '2c92c0f95427f50501542b05f7671dc5';
            }
        }
       
        WelcomeEmailSettings__c zSettings = WelcomeEmailSettings__c.getOrgDefaults();
        Map<String,Object> zuoraConfigInfo = zqu.zQuoteUtil.getZuoraConfigInformation();
        Zuora.ZApi zApi = new Zuora.ZApi();
        Zuora.ZApi.LoginResult loginResult = new Zuora.ZApi.LoginResult();
        if(!Test.isRunningTest()){
            loginResult = zApi.zLogin();
            System.debug(loginResult.serverUrl);
        } else {
            loginResult.serverUrl = 'services86';
        }
        String quoteServletUrl = loginResult.serverUrl.substring(0, loginResult.serverUrl.indexOf('apps/')) + 'apps/servlet/GenerateQuote';
       
       
        String sessionId = UserInfo.getSessionId();
        if(sessionId==null){
            sessionId = sess;
        }
        System.debug('sessionId: '+sessionId);
        String sfdcUrl = URL.getSalesforceBaseUrl().toExternalForm()
            + '/services/Soap/u/10.0/' + UserInfo.getOrganizationId();
        PageReference generatePage = new PageReference(quoteServletUrl);
        generatePage.getParameters().put('templateId', defaultQuoteTemplateId);
        generatePage.getParameters().put('sessionId', sessionId);
        generatePage.getParameters().put('quoteId', quote.Id);
        generatePage.getParameters().put('attachToOpportunity', 'true');
        generatePage.getParameters().put('format', 'pdf');
        generatePage.getParameters().put('ZSession', loginResult.session);
        generatePage.getParameters().put('useSFDCLocale', '1');
        generatePage.getParameters().put('locale', UserInfo.getLocale());
        generatePage.getParameters().put('zquotesMajorVersion', zSettings.zquotesMajorVersion__c);
        generatePage.getParameters().put('zquotesMinorVersion', zSettings.zquotesMinorVersion__c);
         
        Http h = new Http();
        System.debug('Quote PDF URL = ' + generatePage.getUrl()+'&serverUrl='+sfdcUrl);
        HttpRequest req = new HttpRequest();
        req.setEndpoint(generatePage.getUrl()+'&serverUrl='+sfdcUrl);
        req.setMethod('GET');
        req.setTimeout(60000);
        HttpResponse res = new HttpResponse();
        if(!Test.isRunningTest()){
            try{
                res = h.send(req);
            }catch(Exception e){
                System.debug('Error with send: ' + e);
                if(e.getMessage() == 'Read timed out'){
                    System.debug('Test Has passed error test');
                    retResult = SUCCESSLABEL;
                }else{
                    System.debug('Test Did Not Pass: ' + e.getMessage());
                    retResult = e.getMessage();
                }
            }
        } else {
            res.setStatusCode(200);
        }
        if (res.getStatusCode() != 200) {
            System.debug('res: ' + res);   
            if(res.getStatusCode() == 0){
                retResult = SUCCESSLABEL;
            }else{
                System.Debug('Error contacting Zuora');
                retResult = 'Error contacting Zuora';
            }
            return retResult;
        }
       
        String zuoraResponse = res.getBody();
        if(Test.isRunningTest()){
            zuoraResponse = 'Quote PDF document has been successfully AttachmentID: 10101';
        }
       
        String successMessage = 'Quote PDF document has been successfully';
        String attachmentId;
        if (zuoraResponse.contains(successMessage)) {
            System.Debug('Response Body: ' + zuoraResponse);
            attachmentId = zuoraResponse.split('AttachmentID:', 0)[1];
            System.debug('Attachment ID Post Regex: ' + attachmentId);
            // We know the index of the the attachment id.
            if (attachmentId.length() > 19) {
                attachmentId = attachmentId.substring(1,19);
            }
            retResult = SUCCESSLABEL;
            System.debug('This was a success');
        } else {
            retResult = zuoraResponse;
        }
        return retResult;
    }
   
    private static void appendMessage(ApexPages.Severity severity,
            String message) {
        ApexPages.addMessage(new ApexPages.Message(severity, message));
    }
 
}


Test Class-
@isTest
public class Z_GeneratePDF_Test {   
 public static testMethod void unitTest(){
    Map<String, QuoteTemplateLanguageMap__c> mapLangToTemplate = QuoteTemplateLanguageMap__c.getAll();
        //insert QuoteTemplateLanguageMap__c
        QuoteTemplateLanguageMap__c setting = new QuoteTemplateLanguageMap__c(
            Name = 'testSetting',
            QuoteTemplateName__c = 'testQuote'
        );
        insert setting;
        System.assert(setting.Name == 'testSetting');
       
        //insert Account
        Account acc = new Account();
        acc.Name = 'testAccount';
        acc.Phone = '1234567890';
        acc.Phone_2__c = '1234567890';
        acc.Type = 'Prospect';
        acc.Lead_Type__c = 'Inbound';
        acc.Contact_Method__c = 'Email';
        acc.BillingCountry = 'United States';
        acc.Primary_Language_Spoken__c = 'Arabic';
        insert acc;
        System.assert(acc.Name == 'testAccount');
       
        //insert Opportunity
        Opportunity opp = new Opportunity(
            Name = 'TestOpp',
            StageName = 'Prospect',
            AccountId = acc.Id,
            CloseDate = Date.newInstance(2017, 9, 27),
            Welcome_Email__c = 'Touchpoint@gmail.com',
            Welcome_Email_Template__c = 'TestTemplate'
        );  
        insert Opp;
        System.assert(Opp.Name == 'TestOpp');
       
        //insert zqu__Quote_Template__c
        zqu__Quote_Template__c quoteTemp = new zqu__Quote_Template__c(
            Name = 'testQuote',
            zqu__IsDefault__c = true,
            zqu__Description__c = 'testDescription',
            zqu__Quote_Type__c = 'New Subscription',
            zqu__Template_Id__c = 'testId'
          
        );
        insert quoteTemp;
        System.assert(quoteTemp.Name == 'testQuote');
       
        //insert zqu__Quote__c
        zqu__Quote__c quote = new zqu__Quote__c(
            Name = 'testQuote',
            zqu__Opportunity__c = opp.Id,
            zqu__SubscriptionType__c = 'New Subscription',           
            zqu__QuoteTemplate__c = quoteTemp.Id
        );
        insert quote;
        System.assert(quote.Name == 'TestQuote');
       
      
       
         UserInfo.getSessionId();
         String sessionId=UserInfo.getSessionId();
        Test.startTest();
            Z_GeneratePDF.getQuoteId(quote.Id);
            Z_GeneratePDF.generate(quote.Id, null);
            Z_GeneratePDF.getDefaultQuoteTemplateId(quote);
         
       // Z_GeneratePDF.generate(quote.Id,'sess');
        Test.stopTest();
      
    }
    public static testMethod void unitTest1(){
         /* Map<String, QuoteTemplateLanguageMap__c> mapLangToTemplate = QuoteTemplateLanguageMap__c.getAll();
        //insert QuoteTemplateLanguageMap__c
        QuoteTemplateLanguageMap__c setting = new QuoteTemplateLanguageMap__c(
            Name = 'testSetting',
            QuoteTemplateName__c = 'testQuote'
        );
        insert setting;
        System.assert(setting.Name == 'testSetting');*/
       // String retResult = '';
        //String defaultQuoteTemplateId;
         //insert Account
        Account acc = new Account();
        acc.Name = 'testAccount';
        acc.Phone = '1234567890';
        acc.Phone_2__c = '1234567890';
        acc.Type = 'Prospect';
        acc.Lead_Type__c = 'Inbound';
        acc.Contact_Method__c = 'Email';
        acc.BillingCountry = 'United States';
        acc.Primary_Language_Spoken__c = 'Arabic';
        insert acc;
        System.assert(acc.Name == 'testAccount');
       
        //insert Opportunity
        Opportunity opp = new Opportunity(
            Name = 'TestOpp',
            StageName = 'Prospect',
            AccountId = acc.Id,
            CloseDate = Date.newInstance(2017, 9, 27),
            Welcome_Email__c = 'Touchpoint@gmail.com',
            Welcome_Email_Template__c = 'TestTemplate'
        );  
        //insert Opp;
        System.assert(Opp.Name == 'TestOpp');
       
        //insert zqu__Quote_Template__c
        zqu__Quote_Template__c quoteTemp = new zqu__Quote_Template__c(
            Name = 'testQuote',
            zqu__IsDefault__c = true,
            zqu__Description__c = 'testDescription',
            zqu__Quote_Type__c = 'New Subscription',
            zqu__Template_Id__c = 'testId'
          
        );
       // insert quoteTemp;
        System.assert(quoteTemp.Name == 'testQuote');
       
        List<zqu__Quote_Template__c> quoteTemplateListtest=new List<zqu__Quote_Template__c>();
        quoteTemplateListtest.add(quoteTemp);
        //insert zqu__Quote__c
        zqu__Quote__c quote = new zqu__Quote__c(
            Name = 'testQuote',
            zqu__Opportunity__c = opp.Id,
            zqu__SubscriptionType__c = 'New Subscription',
           
            zqu__QuoteTemplate__c = quoteTemp.Id
        );
        //insert quote;
        List<zqu__Quote__c> quoteListtest=new  List<zqu__Quote__c>();
        quoteListtest.add(quote);
        UserInfo.getSessionId();
         String sessionId=UserInfo.getSessionId();
       
         Test.startTest();
         
         
            Z_GeneratePDF.getQuoteId(quote.Id);
            //Z_GeneratePDF.generate(quote.Id, UserInfo.getSessionId());
            Z_GeneratePDF.getDefaultQuoteTemplateId(quote);
       // Z_GeneratePDF.generate(quote.Id,'sess');
        Test.stopTest();       
    }   
}
Best Answer chosen by Amol Gaikwad 13
Deepali KulshresthaDeepali Kulshrestha
Hi Amol,
For covering Http request you have to create a mock class for test class like this

global class YourHttpCalloutMockImpl implements HttpCalloutMock {
    global HTTPResponse respond(HTTPRequest req) {
        // Create a fake response.
        // Set response values, and 
        // return response.
    }
}

and add this code for page reference in your test class

   Test.setCurrentPage(pageRef);

   PageReference generatePage = new PageReference(quoteServletUrl);
   generatePage.getParameters().put('templateId', defaultQuoteTemplateId);
   generatePage.getParameters().put('sessionId', sessionId);
   generatePage.getParameters().put('quoteId', quote.Id);
   generatePage.getParameters().put('attachToOpportunity', 'true');
   generatePage.getParameters().put('format', 'pdf');
   generatePage.getParameters().put('ZSession', loginResult.session);
   generatePage.getParameters().put('useSFDCLocale', '1');
   generatePage.getParameters().put('locale', UserInfo.getLocale());
   generatePage.getParameters().put('zquotesMajorVersion', zSettings.zquotesMajorVersion__c);
   generatePage.getParameters().put('zquotesMinorVersion', zSettings.zquotesMinorVersion__c);



I hope you find the above solution helpful. If it does, please mark as Best Answer to help others too.

Thanks and Regards,
Deepali Kulshrestha.