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
Sujay KothapalliSujay Kothapalli 

Apex test class for after update trigger

Hello gang,

I need your help to write a test class for my after update trigger.

trigger CPQQuotelinesupdate on Summit_CPQ__Quote__c (after update) {
    
    Map < Id, Summit_CPQ__Quote__c > mapQuote = new Map < Id, Summit_CPQ__Quote__c >();
    List < Summit_CPQ__Quote_Line__c > listQuoteLines = new List< Summit_CPQ__Quote_Line__c >();
    
    for ( Summit_CPQ__Quote__c Quote : trigger.new ) {
       
        if(trigger.oldMap.get( Quote.Id ).Summit_CPQ__SubTotal__c != Quote.Summit_CPQ__SubTotal__c || trigger.oldMap.get( Quote.Id ).Solid_Brick_Building_Construction__c != Quote.Solid_Brick_Building_Construction__c || trigger.oldMap.get( Quote.Id ).Travel_Surcharge__c != Quote.Travel_Surcharge__c || trigger.oldMap.get( Quote.Id ).Renovation_Area__c != Quote.Renovation_Area__c)
            
            mapQuote.put( Quote.Id, Quote );
        
        
       if ( mapQuote.size() > 0 ) {
             
  listQuoteLines=[SELECT Summit_CPQ__Product_Code__c,Summit_CPQ__ListPrice__c,Summit_CPQ__Description__c,Summit_CPQ__Unit_Cost__c,Summit_CPQ__Cost_Total__c,Summit_CPQ__Quantity__c,Summit_CPQ__Hide_Line_Item__c, Summit_CPQ__Quote__c FROM Summit_CPQ__Quote_Line__c WHERE Summit_CPQ__Quote__c  IN : mapQuote.keySet()];
 
            for  (Summit_CPQ__Quote_Line__c Quoteline : listQuoteLines)  {
                
                if ((Quoteline.Summit_CPQ__Product_Code__c.contains('SOLIDBRICKSURCHARGE')) && (Quote.Solid_Brick_Building_Construction__c == 'Solid brick')){
                Quoteline.Summit_CPQ__Unit_Cost__c = 50;
                Quoteline.Summit_CPQ__Hide_Line_Item__c = FALSE;
                }
                if ((Quoteline.Summit_CPQ__Product_Code__c.contains('SOLIDBRICKSURCHARGE')) && (Quote.Solid_Brick_Building_Construction__c != 'Solid brick')){
                Quoteline.Summit_CPQ__Unit_Cost__c = 0;
                Quoteline.Summit_CPQ__Hide_Line_Item__c = TRUE;
            }
   update listQuoteLines;
     }
}
}

 

The below is what I've done

@isTest(seealldata=true)
public class CpqQuotelines_Test {
public TestMethod static void CPQQuote_Method()
    {
       
                   
    Summit_CPQ__Quote__c Quote = New Summit_CPQ__Quote__c();
    Quote.Name = 'Test';
    Quote.Solid_Brick_Building_Construction__c = 'Solid brick';
    Quote.Travel_Surcharge__c = 24;
    Quote.Division__c = 'The Inside Project';
    Quote.Renovation_Area__c = 'Ground Floor';
    insert Quote;
    

Id pricebookId = Test.getStandardPricebookId();

//Create your product
Product2 p1 = new Product2(
     Name = 'Product X',
     ProductCode = 'SOLID',
     isActive = true);
     insert p1;
        System.assert(p1.Id != null);
        Product2 p2= new Product2(
        name='TWIG 5',
        IsActive=true,
        ProductCode='CONTINGENCY');
    insert p2;
        System.assert(p2.Id != null);
        
        List<Summit_CPQ__Quote_Line__c> QLList = new List<Summit_CPQ__Quote_Line__c>
    {new Summit_CPQ__Quote_Line__c(Summit_CPQ__Level_Order__c = '1',Summit_CPQ__Hide_Line_Item__c = FALSE,Summit_CPQ__Description__c = 'Not required',
        Summit_CPQ__Quote__c = Quote.id,Summit_CPQ__Quantity__c = 1,Summit_CPQ__Product__c =p1.Id,Summit_CPQ__Unit_Cost__c = 1.00)};
        insert QLList;
       
        
     Summit_CPQ__Quote_Line__c Q2 = New Summit_CPQ__Quote_Line__c();
        Q2.Summit_CPQ__Level_Order__c = '1';
        Q2.Summit_CPQ__Hide_Line_Item__c = TRUE;
        Q2.Summit_CPQ__Description__c = 'required';
        Q2.Summit_CPQ__Quote__c = Quote.id;
        Q2.Summit_CPQ__Quantity__c = 1;
        Q2.Summit_CPQ__Product__c =p2.Id;
        Q2.Summit_CPQ__Unit_Cost__c = 100.00;
        QLList.add(Q2);
      
        
 Summit_CPQ__Quote_Line__c Q3 = New Summit_CPQ__Quote_Line__c();
        Q3.Summit_CPQ__Level_Order__c = '1';
        Q3.Summit_CPQ__Hide_Line_Item__c = TRUE;
        Q3.Summit_CPQ__Description__c = 'required';
        Q3.Summit_CPQ__Quote__c = Quote.id;
        Q3.Summit_CPQ__Quantity__c = 1;
        Q3.Summit_CPQ__Product__c =p2.Id;
        Q3.Summit_CPQ__Unit_Cost__c = 100.00;
        QLList.add(Q3);
      
    List<Summit_CPQ__Quote_Line__c> QLLists = new List<Summit_CPQ__Quote_Line__c>{ [select id,Summit_CPQ__Product_Code__c,Summit_CPQ__ListPrice__c,Summit_CPQ__Description__c,Summit_CPQ__Unit_Cost__c,Summit_CPQ__Cost_Total__c,Summit_CPQ__Quantity__c,Summit_CPQ__Hide_Line_Item__c, Summit_CPQ__Quote__c from Summit_CPQ__Quote_Line__c where id in :QLList and Summit_CPQ__Quote__c = :Quote.Id]};
        for(Summit_CPQ__Quote_Line__c QL1:QLLists){
            If(QL1.Summit_CPQ__Product_Code__c == 'Solid'){
                QL1.Summit_CPQ__Unit_Cost__c= 15;
            }
        }
        
    update QLLists;
        
        Quote.Division__c = 'Wedo';
        update Quote;
       
        }
        
    }

 

Suraj Tripathi 47Suraj Tripathi 47

Hi Sujay,

Please take reference from the below Code.

Summit_CPQ__Quote__c  similar to Opportunity

Summit_CPQ__Quote_Line__c  similar OpportunityLineItem

@isTest(seeAllData=true)
private class TestUpdateClosedListPrice {

static testMethod void TestUpdateClosedListPrice() {

Account acc = new Account(Name = 'Test Account');
insert acc;

//get standard pricebook
Pricebook2  standardPb = [select id, name, isActive from Pricebook2 where IsStandard = true limit 1];

Pricebook2 pbk1 = new Pricebook2 (Name='Test Pricebook Entry 1',Description='Test Pricebook Entry 1', isActive=true);
insert pbk1;

Product2 prd1 = new Product2 (Name='Test Product Entry 1',Description='Test Product Entry 1',productCode = 'ABC', isActive = true);
insert prd1;


PricebookEntry pbe1 = new PricebookEntry (Product2ID=prd1.id,Pricebook2ID=standardPb.id,UnitPrice=50, isActive=true);
insert pbe1;


Opportunity opp1 = new Opportunity (Name='Opp1',StageName='Stage 0 - Lead Handed Off',CloseDate=Date.today(),Pricebook2Id = pbe1.Pricebook2Id, AccountId = acc.id);
insert opp1;


OpportunityLineItem lineItem1 = new OpportunityLineItem (OpportunityID=opp1.id,PriceBookEntryID=pbe1.id, quantity=4,Closed_List_Price__c=0, totalprice=200);
insert lineItem1;

Test.startTest();
 
Test.stopTest();
}
}

I hope it would help you

Thank You

Sujay KothapalliSujay Kothapalli

Hi Suraj,

What should be the logic inside the test start and stop methods?