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
RahulRahul 

Hello friends, Iam trying to deploy quote handler , Quote trigger and test class in production. code coverage is 86% and Production organization coverage is also 82% but still not able to deploy in production. Getting the below error, Need your help

Getting this Error :-

Code Coverage Failure
Your code coverage is 59%. You need at least 75% coverage to complete this deployment.
QuoteHandler_PayTerms_GenerateDoc
 
ApuroopApuroop
Hey Rahul,

Did the test class run successfully? Forget about the coverage..
Can you post the code?
RahulRahul
Getting this Error in Production while Deployment :-

QuoteTrigger_PayTerms_GenerateDoc_TesttestMethod3System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_EXECUTE_FLOW_TRIGGER, We can't save this record because the “Update Renewal Date in Opportunity” process failed. Give your Salesforce admin these details. This error occurred when the flow tried to update records: LIMIT_EXCEEDED: System.LimitException: Too many SOQL queries: 101. You can look up ExceptionCode values in the SOAP API Developer Guide.: [] 
Stack Trace: Class.QuoteTrigger_PayTerms_GenerateDoc_Test.testMethod3: line 203, column 1
QuoteTrigger_PayTerms_GenerateDoc_TesttestMethod4System.LimitException: Too many SOQL queries: 101 
Stack Trace: Class.QuoteHandler_PayTerms_GenerateDoc.Documenttemplate: line 11, column 1 Trigger.QuoteTrigger_PayTerms_GenerateDoc: line 7, column 1

Test Method 3 and 4 for your Reference Thanks 

Static testMethod Void testMethod3(){        
               
               Test.starttest();
               Account acc = new Account();
             acc.Name = 'Test Account';
             acc.Website ='www.test.com';
             acc.Type='Banking';
             insert acc;
             
             opportunity opp = new opportunity();
            opp.name ='Test Opp';
            opp.stagename='Closed Won';
            opp.Type= 'New Business';
            opp.CloseDate=system.today().addmonths(2);
            opp.Upsell_Potential__c ='No';
            opp.RenewalDate__c = system.today();

            opp.accountid=acc.id;
            insert opp;  
            
               
             SBQQ__QuoteTemplate__c qt2 = new SBQQ__QuoteTemplate__c();

            qt2.Name='Auto Renew with Auto pay';
               qt2.SBQQ__Default__c=false;
               qt2.SBQQ__PageWidth__c= 8.5;
               qt2.SBQQ__TopMargin__c =0.50;
               qt2.SBQQ__LeftMargin__c = 0.50;
               qt2.SBQQ__PageHeight__c  =11.00;
               qt2.SBQQ__BottomMargin__c = 0.50;   
               qt2.SBQQ__RightMargin__c = 0.50;
               qt2.SBQQ__FontFamily__c = 'Helvetica';
               qt2.SBQQ__ShadingColor__c = 'FFFFFF';   
               qt2.SBQQ__BorderColor__c = '000000';
               qt2.SBQQ__FontSize__c = 9.0;
               insert qt2;
               
            
            
            SBQQ__Quote__c oldquote = new SBQQ__Quote__c();
            oldquote.SBQQ__Primary__c = true;
            oldquote.SBQQ__Opportunity2__c = opp.id;
            oldquote.SBQQ__StartDate__c = system.today();
            oldquote.SBQQ__EndDate__c= system.today().addmonths(3);
            oldquote.SBQQ__SubscriptionTerm__c=1;
            
            oldquote.Status_Of_Approval__c='Pending';
            oldquote.Document_Template__c= 'Auto Renew';

            oldquote.SBQQ__PaymentTerms__c= 'Annual';
           // oldquote.Contract_End_Date__c = system.today().addmonths(3);
            insert oldquote;
            
            opp.RenewalDate__c = oldquote.SBQQ__EndDate__c;
            update opp;
            
              SBQQ__Quote__c oldquote3 = new SBQQ__Quote__c();
            oldquote3.SBQQ__Primary__c = true;
            oldquote3.SBQQ__Opportunity2__c = opp.id;
            oldquote3.SBQQ__StartDate__c = system.today();
            oldquote3.SBQQ__EndDate__c= system.today().addmonths(3);
            oldquote3.SBQQ__SubscriptionTerm__c=1;
            
            oldquote3.Status_Of_Approval__c='Pending';
            oldquote3.Document_Template__c= 'Auto Renew 3';

            oldquote3.SBQQ__PaymentTerms__c= 'Quarterly';
            insert oldquote3;
            
            opp.RenewalDate__c = oldquote3.SBQQ__EndDate__c;
            update opp;
            
              SBQQ__Quote__c oldquote4 = new SBQQ__Quote__c();
            oldquote4.SBQQ__Primary__c = true;
            oldquote4.SBQQ__Opportunity2__c = opp.id;
            oldquote4.SBQQ__StartDate__c = system.today();
            oldquote4.SBQQ__EndDate__c= system.today().addmonths(3);
            oldquote4.SBQQ__SubscriptionTerm__c=1;
            
            oldquote4.Status_Of_Approval__c='Pending';
            oldquote4.Document_Template__c= 'Auto Renew 3';

            oldquote4.SBQQ__PaymentTerms__c= 'Annual';
            
            insert oldquote4;
            
            opp.RenewalDate__c = oldquote4.SBQQ__EndDate__c;
            update opp;
            
        }
        
        Static testMethod Void testMethod4(){        
               
               Test.starttest();
               Account acc = new Account();
             acc.Name = 'Test Account';
             acc.Website ='www.test.com';
             acc.Type='Banking';
             insert acc;
             
             opportunity opp = new opportunity();
            opp.name ='Test Opp';
            opp.stagename='Closed Won';
            opp.Type= 'New Business';
            opp.CloseDate=system.today().addmonths(2);
            opp.Upsell_Potential__c ='No';
            opp.RenewalDate__c = system.today();

            opp.accountid=acc.id;
            insert opp;  

            SBQQ__Quote__c oldquote6 = new SBQQ__Quote__c();
            oldquote6.SBQQ__Primary__c = true;
            oldquote6.SBQQ__Opportunity2__c = opp.id;
            oldquote6.SBQQ__StartDate__c = system.today();
            oldquote6.SBQQ__EndDate__c= system.today().addmonths(3);
            oldquote6.SBQQ__SubscriptionTerm__c=1;
            
            oldquote6.Status_Of_Approval__c='Pending';
            oldquote6.Document_Template__c= 'Basic Template';

            oldquote6.SBQQ__PaymentTerms__c= 'Annual';
            
            insert oldquote6; 
            opp.RenewalDate__c = oldquote6.SBQQ__EndDate__c;
            //update opp;
            
            SBQQ__Quote__c oldquote7 = new SBQQ__Quote__c();
            oldquote7.SBQQ__Primary__c = true;
            oldquote7.SBQQ__Opportunity2__c = opp.id;
            oldquote7.SBQQ__StartDate__c = system.today();
            oldquote7.SBQQ__EndDate__c= system.today().addmonths(3);
            oldquote7.SBQQ__SubscriptionTerm__c=1;
            
            oldquote7.Status_Of_Approval__c='Pending';
            oldquote7.Document_Template__c= 'Auto Renew';

            oldquote7.SBQQ__PaymentTerms__c= 'Monthly';
            
            insert oldquote7; 

            opp.RenewalDate__c = oldquote7.SBQQ__EndDate__c;
            //update opp;
            
            SBQQ__Quote__c oldquote5 = new SBQQ__Quote__c();
            oldquote5.SBQQ__Primary__c = true;
            oldquote5.SBQQ__Opportunity2__c = opp.id;
            oldquote5.SBQQ__StartDate__c = system.today();
            oldquote5.SBQQ__EndDate__c= system.today().addmonths(3);
            oldquote5.SBQQ__SubscriptionTerm__c=1;
            
            oldquote5.Status_Of_Approval__c='Pending';
            oldquote5.Document_Template__c= 'Basic Template';

            oldquote5.SBQQ__PaymentTerms__c= 'Quarterly';
            
            insert oldquote5;
            
            opp.RenewalDate__c = oldquote5.SBQQ__EndDate__c;
            //update opp;
            
            SBQQ__Quote__c oldquote10 = new SBQQ__Quote__c();
            oldquote10.SBQQ__Primary__c = true;
            oldquote10.SBQQ__Opportunity2__c = opp.id;
            oldquote10.SBQQ__StartDate__c = system.today();
            oldquote10.SBQQ__EndDate__c= system.today().addmonths(3);
            oldquote10.SBQQ__SubscriptionTerm__c=1;
            
            oldquote10.Status_Of_Approval__c='Pending';
            oldquote10.Document_Template__c= 'Basic Template';

            oldquote10.SBQQ__PaymentTerms__c= 'Monthly';
            
            insert oldquote10; 
            
            opp.RenewalDate__c = oldquote10.SBQQ__EndDate__c;
            //update opp;
            Test.stoptest();

        
   
   }

 
ApuroopApuroop
Hey Rahul,

I couldn't create so many fields man, sorry. I just did some bulkifying to the code. Try it out.
 
Static testMethod Void testMethod3(){
        Account acc = new Account(Name = 'Test Account',
                                  Website ='www.test.com',
                                  Type='Banking');
        insert acc;
        
        Opportunity opp = new Opportunity(Name ='Test Opp',
                                          StageName='Closed Won',
                                          Type= 'New Business',
                                          CloseDate=system.today().addmonths(2),
                                          Upsell_Potential__c ='No',
                                          RenewalDate__c = system.today(),
                                          AccountId = acc.Id);
        insert opp;
        
        //System.assertEquals(0, Limits.getDMLStatements()); //Uncomment this to check how many DML statements have you called so far.
        Test.starttest();
        List<SBQQ__Quote__c> quote_List = new List<SBQQ__Quote__c>();
        SBQQ__QuoteTemplate__c qt2 = new SBQQ__QuoteTemplate__c(Name='Auto Renew with Auto pay',
                                                                SBQQ__Default__c=false,
                                                                SBQQ__PageWidth__c= 8.5,
                                                                SBQQ__TopMargin__c =0.50,
                                                                SBQQ__LeftMargin__c = 0.50,
                                                                SBQQ__PageHeight__c  =11.00,
                                                                SBQQ__BottomMargin__c = 0.50,
                                                                SBQQ__RightMargin__c = 0.50,
                                                                SBQQ__FontFamily__c = 'Helvetica',
                                                                SBQQ__ShadingColor__c = 'FFFFFF',
                                                                SBQQ__BorderColor__c = '000000',
                                                                SBQQ__FontSize__c = 9.0);
        insert qt2;
        
        SBQQ__Quote__c oldquote = new SBQQ__Quote__c(SBQQ__Primary__c = true,
                                                     SBQQ__Opportunity2__c = opp.id,
                                                     SBQQ__StartDate__c = system.today(),
                                                     SBQQ__EndDate__c= system.today().addmonths(3),
                                                     SBQQ__SubscriptionTerm__c=1,
                                                     Status_Of_Approval__c='Pending',
                                                     Document_Template__c= 'Auto Renew',
                                                     SBQQ__PaymentTerms__c= 'Annual');
        quote_List.add(oldquote);
        
        SBQQ__Quote__c oldquote3 = new SBQQ__Quote__c(SBQQ__Primary__c = true,
                                                      SBQQ__Opportunity2__c = opp.id,
                                                      SBQQ__StartDate__c = system.today(),
                                                      SBQQ__EndDate__c= system.today().addmonths(3),
                                                      SBQQ__SubscriptionTerm__c=1,
                                                      Status_Of_Approval__c='Pending',
                                                      Document_Template__c= 'Auto Renew 3',
                                                      SBQQ__PaymentTerms__c= 'Quarterly');
        quote_List.add(oldquote3);
        
        SBQQ__Quote__c oldquote4 = new SBQQ__Quote__c(SBQQ__Primary__c = true,
                                                      SBQQ__Opportunity2__c = opp.id,
                                                      SBQQ__StartDate__c = system.today(),
                                                      SBQQ__EndDate__c= system.today().addmonths(3),
                                                      SBQQ__SubscriptionTerm__c=1,
                                                      Status_Of_Approval__c='Pending',
                                                      Document_Template__c= 'Auto Renew 3',
                                                      SBQQ__PaymentTerms__c= 'Annual');
        
        quote_List.add(oldquote4);
        
        insert quote_List;
        //System.assertEquals(0, Limits.getDMLStatements()); //Uncomment this to check how many DML statements have you called so far.
        Test.stoptest();
        
        //The EndDates for all the below are the same, aren't they?
        //I don't see a difference if we include the below statements before the insert DML on quote_List.
        opp.RenewalDate__c = oldquote.SBQQ__EndDate__c;
        update opp;
        
        opp.RenewalDate__c = oldquote3.SBQQ__EndDate__c;
        update opp;
        
        opp.RenewalDate__c = oldquote4.SBQQ__EndDate__c;
        update opp;
        //System.assertEquals(0, Limits.getDMLStatements()); //Uncomment this to check how many DML statements have you called so far.
    }
    
    Static testMethod Void testMethod4(){
        Account acc = new Account(Name = 'Test Account',
                                  Website ='www.test.com',
                                  Type='Banking');
        insert acc;
        
        Opportunity opp = new opportunity(Name ='Test Opp',
                                          Stagename='Closed Won',
                                          Type= 'New Business',
                                          CloseDate=system.today().addmonths(2),
                                          Upsell_Potential__c ='No',
                                          RenewalDate__c = system.today(),
                                          AccountId=acc.Id);
        insert opp;  
        //System.assertEquals(0, Limits.getDMLStatements()); //Uncomment this to check how many DML statements have you called so far.
        Test.startTest();
        List<SBQQ__Quote__c> QuoteList = new List<SBQQ__Quote__c>();
        SBQQ__Quote__c oldquote5 = new SBQQ__Quote__c(SBQQ__Primary__c = true,
                                                      SBQQ__Opportunity2__c = opp.id,
                                                      SBQQ__StartDate__c = system.today(),
                                                      SBQQ__EndDate__c= system.today().addmonths(3),
                                                      SBQQ__SubscriptionTerm__c=1,
                                                      Status_Of_Approval__c='Pending',
                                                      Document_Template__c= 'Basic Template',
                                                      SBQQ__PaymentTerms__c= 'Quarterly');
        quoteList.add(oldQuote5);
        
        SBQQ__Quote__c oldQuote6 = new SBQQ__Quote__c(SBQQ__Primary__c = true,
                                                      SBQQ__Opportunity2__c = opp.id,
                                                      SBQQ__StartDate__c = system.today(),
                                                      SBQQ__EndDate__c= system.today().addmonths(3),
                                                      SBQQ__SubscriptionTerm__c=1,
                                                      Status_Of_Approval__c='Pending',
                                                      Document_Template__c= 'Basic Template',
                                                      SBQQ__PaymentTerms__c= 'Annual');
        quoteList.add(oldQuote6);
        
        SBQQ__Quote__c oldQuote7 = new SBQQ__Quote__c(SBQQ__Primary__c = true,
                                                      SBQQ__Opportunity2__c = opp.id,
                                                      SBQQ__StartDate__c = system.today(),
                                                      SBQQ__EndDate__c= system.today().addmonths(3),
                                                      SBQQ__SubscriptionTerm__c=1,
                                                      Status_Of_Approval__c='Pending',
                                                      Document_Template__c= 'Auto Renew',
                                                      SBQQ__PaymentTerms__c= 'Monthly');
        quoteList.add(oldQuote7);
        
        SBQQ__Quote__c oldquote10 = new SBQQ__Quote__c(SBQQ__Primary__c = true,
                                                       SBQQ__Opportunity2__c = opp.id,
                                                       SBQQ__StartDate__c = system.today(),
                                                       SBQQ__EndDate__c= system.today().addmonths(3),
                                                       SBQQ__SubscriptionTerm__c=1,
                                                       Status_Of_Approval__c='Pending',
                                                       Document_Template__c= 'Basic Template',
                                                       SBQQ__PaymentTerms__c= 'Monthly');
        quoteList.add(oldQuote10);
        
        insert quoteList;
        Test.stopTest();
        
        opp.RenewalDate__c = oldquote5.SBQQ__EndDate__c;
        //update opp;
        opp.RenewalDate__c = oldquote6.SBQQ__EndDate__c;
        //update opp;
        opp.RenewalDate__c = oldquote7.SBQQ__EndDate__c;
        //update opp;
        opp.RenewalDate__c = oldquote10.SBQQ__EndDate__c;
        //update opp;
        //System.assertEquals(0, Limits.getDMLStatements()); //Uncomment this to check how many DML statements have you called so far.
    }

Few questions & points though,
  • What exactly are you trying to do that single opp? Can you create one Opportunity for each quote? In that way, we can do just one insert and one update for all the opps by adding all of them to one list.
  • I included some System.assert statements in comments, uncomment those to check the DML statements that you have used until that line.
  • Use the Test.StartTest and StopTest methods based on how many DML statements can you use from point A to point B. 
  • In the error that you posted, either there's multiple DML operations happening in that very Process or it's entirely due to the separate DML statements used in this test class. Can't say for sure.
  • It's hard to trace the error because only you can investigate what's happening at those given lines in the stack trace.
  • LPT: ALWAYS bulkify your code.
For reference:
https://salesforce.stackexchange.com/questions/80949/when-to-use-test-starttest
https://developer.salesforce.com/page/Best_Practice%3A_Bulkify_Your_Code
RahulRahul
Hi Apuroop, thanks for the Reply. This code worked for me.


@isTest
public class QuoteTrigger_PayTerms_GenerateDoc_Test{
      Static testMethod Void testMethod2(){
           Test.starttest();

           Account acc = new Account();
           acc.Name = 'Test Account';
          acc.Website ='www.test.com';
             acc.Type='Banking';
             insert acc;
             
             opportunity opp = new opportunity();
            opp.name ='Test Opp';
            opp.stagename='Closed Won';
            opp.Type= 'New Business';
            opp.CloseDate=system.today().addmonths(2);
            opp.Upsell_Potential__c ='No';
            opp.RenewalDate__c = system.today();

            opp.accountid=acc.id;
            insert opp;  
      
             SBQQ__QuoteTemplate__c qt7 = new SBQQ__QuoteTemplate__c();

               qt7.Name='Auto Renew with 3% Annual Increment with Autopay';
               qt7.SBQQ__Default__c=false;
               qt7.SBQQ__PageWidth__c= 8.5;
               qt7.SBQQ__TopMargin__c =0.50;
               qt7.SBQQ__LeftMargin__c = 0.50;
               qt7.SBQQ__PageHeight__c  =11.00;
               qt7.SBQQ__BottomMargin__c = 0.50;   
               qt7.SBQQ__RightMargin__c = 0.50;
               qt7.SBQQ__FontFamily__c = 'Helvetica';
               qt7.SBQQ__ShadingColor__c = 'FFFFFF';   
               qt7.SBQQ__BorderColor__c = '000000';
               qt7.SBQQ__FontSize__c = 9.0;
               insert qt7;
            
            
            SBQQ__QuoteTemplate__c qt6 = new SBQQ__QuoteTemplate__c();

               qt6.Name='Auto Renew with 3% Annual Increment';
               qt6.SBQQ__Default__c=false;
               qt6.SBQQ__PageWidth__c= 8.5;
               qt6.SBQQ__TopMargin__c =0.50;
               qt6.SBQQ__LeftMargin__c = 0.50;
               qt6.SBQQ__PageHeight__c  =11.00;
               qt6.SBQQ__BottomMargin__c = 0.50;   
               qt6.SBQQ__RightMargin__c = 0.50;
               qt6.SBQQ__FontFamily__c = 'Helvetica';
               qt6.SBQQ__ShadingColor__c = 'FFFFFF';   
               qt6.SBQQ__BorderColor__c = '000000';
               qt6.SBQQ__FontSize__c = 9.0;
               insert qt6;
            
             SBQQ__QuoteTemplate__c qt5 = new SBQQ__QuoteTemplate__c();

               qt5.Name='Auto Renew';
               qt5.SBQQ__Default__c=false;
               qt5.SBQQ__PageWidth__c= 8.5;
               qt5.SBQQ__TopMargin__c =0.50;
               qt5.SBQQ__LeftMargin__c = 0.50;
               qt5.SBQQ__PageHeight__c  =11.00;
               qt5.SBQQ__BottomMargin__c = 0.50;   
               qt5.SBQQ__RightMargin__c = 0.50;
               qt5.SBQQ__FontFamily__c = 'Helvetica';
               qt5.SBQQ__ShadingColor__c = 'FFFFFF';   
               qt5.SBQQ__BorderColor__c = '000000';
               qt5.SBQQ__FontSize__c = 9.0;
               insert qt5;

             SBQQ__QuoteTemplate__c qt4 = new SBQQ__QuoteTemplate__c();

               qt4.Name='Basic Template with Auto Pay';
               qt4.SBQQ__Default__c=false;
               qt4.SBQQ__PageWidth__c= 8.5;
               qt4.SBQQ__TopMargin__c =0.50;
               qt4.SBQQ__LeftMargin__c = 0.50;
               qt4.SBQQ__PageHeight__c  =11.00;
               qt4.SBQQ__BottomMargin__c = 0.50;   
               qt4.SBQQ__RightMargin__c = 0.50;
               qt4.SBQQ__FontFamily__c = 'Helvetica';
               qt4.SBQQ__ShadingColor__c = 'FFFFFF';   
               qt4.SBQQ__BorderColor__c = '000000';
               qt4.SBQQ__FontSize__c = 9.0;
               insert qt4;
             
             SBQQ__QuoteTemplate__c qt3 = new SBQQ__QuoteTemplate__c();

            qt3.Name='Basic Template';
               qt3.SBQQ__Default__c=false;
               qt3.SBQQ__PageWidth__c= 8.5;
               qt3.SBQQ__TopMargin__c =0.50;
               qt3.SBQQ__LeftMargin__c = 0.50;
               qt3.SBQQ__PageHeight__c  =11.00;
               qt3.SBQQ__BottomMargin__c = 0.50;   
               qt3.SBQQ__RightMargin__c = 0.50;
               qt3.SBQQ__FontFamily__c = 'Helvetica';
               qt3.SBQQ__ShadingColor__c = 'FFFFFF';   
               qt3.SBQQ__BorderColor__c = '000000';
               qt3.SBQQ__FontSize__c = 9.0;
               insert qt3;
               
                SBQQ__Quote__c oldquote = new SBQQ__Quote__c();
                oldquote.SBQQ__Primary__c = true;
                oldquote.SBQQ__Opportunity2__c = opp.id;
                oldquote.SBQQ__StartDate__c = system.today();
                oldquote.SBQQ__EndDate__c= system.today().addmonths(3);
                oldquote.SBQQ__SubscriptionTerm__c=1;
            
                oldquote.Status_Of_Approval__c='Pending';
                oldquote.Document_Template__c= 'Auto Renew';

                oldquote.SBQQ__PaymentTerms__c= 'Annual';
               // oldquote.Contract_End_Date__c = system.today().addmonths(3);
                insert oldquote;
                
                oldquote.Document_Template__c= 'Auto Renew';
                oldquote.SBQQ__PaymentTerms__c= 'monthly';
                update oldquote;
                
                oldquote.Document_Template__c= 'Auto Renew 3';
                oldquote.SBQQ__PaymentTerms__c= 'monthly';
                update oldquote;
                
                oldquote.Document_Template__c= 'Basic Template';
                oldquote.SBQQ__PaymentTerms__c= 'monthly';
                update oldquote;
                
                oldquote.Document_Template__c= 'Basic Template';
                oldquote.SBQQ__PaymentTerms__c= 'Annual';
                update oldquote;
 
                   Test.stoptest();
        
            }
    
   
    }