You need to sign in to do that
Don't have an account?
sudhirn@merunetworks.com
Suggestion to write a complex trigger test class
Hi Apex Experts,
I need your valuable suggestion for a trgger written below Trigger update quote values based on the values that are added in quotelineitems there are few apex class called inside the trigger
Have written the test class but logic does not seems to be working please suggest me how to write the logic to get good code coverage.
Test Class below is the test written trigger still shows 0% code coverage please advice me how to get good coverage and logic how to write test class for above trigger
Thanks
Sudhir
I need your valuable suggestion for a trgger written below Trigger update quote values based on the values that are added in quotelineitems there are few apex class called inside the trigger
Have written the test class but logic does not seems to be working please suggest me how to write the logic to get good code coverage.
trigger GenQuoteApproval on QuoteLineItem (After Insert, After Update, After Delete) { Decimal LineMaxDiscount; Decimal LineMaxACV; Decimal SubLineMaxDiscount; Decimal SubLineMaxACV; Decimal SerLineMaxDiscount; Decimal SerLineMaxACV; Map<ID, Quote> ParentQuote = new Map<ID, Quote>(); String SALREPID; String MRGID; String SALID; String CFOID; String Level; Integer GSublevel1Count; Integer GSublevel2Count; Integer GSublevel3Count; Integer GSublevel4Count; Integer GSerlevel1Count; Integer GSerlevel2Count; Integer GSerlevel3Count; Decimal SubscriptionTerm; Try { if ( Trigger.isAfter) { List<Id> listIds = new List<Id>(); //Set<Id> listIds = new Set<Id>(); List<Quote> QuotetList = new List<Quote>(); /* Get Quote ID */ for (QuoteLineItem childquoteline : Trigger.new) { listIds.add(childquoteline.QuoteId); } ParentQuote = new Map<Id, Quote>([SELECT id,Level_1__c,Level_2__c,Level_3__c,Level_4__c FROM Quote WHERE ID IN :listIds]); /* Get service list of all quote id */ list<id> serviceid = new list<id>(); for(QuoteLineItem getserviceid : [select id from QuoteLineItem where quoteid in :listIds and product2.Productcode like 'CBSVC%'] ) { serviceid.add(getserviceid.id); } /* Get subscription list of all quote id */ list<id> subscriptionid = new list<id>(); for(QuoteLineItem getsubscriptionid : [select id from QuoteLineItem where quoteid in :listIds and Subscription_Terms__c <> 0] ) { subscriptionid.add(getsubscriptionid.id); } /* Subscription Discount and ACV */ List<AggregateResult> MaxSubscription = [select max(Discount_Percent__c) SubQuoteLineMaxDiscount,sum(f_ACV__c) SubQuoteLineMaxACV from QuoteLineItem where quoteid in :listIds and Subscription_Terms__c <> 0 and ID not in :serviceid ]; for (AggregateResult SubQuoteMaxDiscount : MaxSubscription) { SubLineMaxDiscount = (Decimal)SubQuoteMaxDiscount.get('SubQuoteLineMaxDiscount'); SubLineMaxACV = (Decimal)SubQuoteMaxDiscount.get('SubQuoteLineMaxACV'); } system.debug('Subscription Line Discount :' + SubLineMaxDiscount); system.debug('Subscription Line ACV :' + SubLineMaxACV); /* Service Discount and ACV */ List<AggregateResult> MaxService = [select max(Discount_Percent__c) SerQuoteLineMaxDiscount,SUM(f_ACV__c) SerQuoteLineMaxACV from QuoteLineItem where quoteid in :listIds and product2.Productcode like 'CBSVC%' and id not in :subscriptionid]; for (AggregateResult SerQuoteMaxDiscount : MaxService) { SerLineMaxDiscount = (Decimal)SerQuoteMaxDiscount.get('SerQuoteLineMaxDiscount'); SerLineMaxACV = (Decimal)SerQuoteMaxDiscount.get('SerQuoteLineMaxACV'); } system.debug('Service Line Discount :' + SerLineMaxDiscount); system.debug('Service Line ACV :' + SerLineMaxACV); Opportunity Opp = [select ownerid from opportunity where id in (select OpportunityId from quote where id in :listIds) ]; system.debug(listIds); SubscriptionTerm = ApprovalUtils.GetSubscriptionTerm(listIds); system.debug('Get New Subscription Term' + SubscriptionTerm); /* Get Manager ID */ User Usr = [select managerid from user where id = :opp.ownerid]; /* Subscription Query to get level 1..4 values */ if ( SubscriptionTerm != null && SubLineMaxACV != null && SubLineMaxDiscount != null) { GSublevel1Count = ApprovalUtils.SubLevel1(SubscriptionTerm , SubLineMaxACV , SubLineMaxDiscount); system.debug('Subscription Level1 :' + GSublevel1Count); GSublevel2Count = ApprovalUtils.SubLevel2(SubscriptionTerm , SubLineMaxACV , SubLineMaxDiscount); system.debug('Subscription Level2 :' + GSublevel2Count); GSublevel3Count = ApprovalUtils.SubLevel3(SubscriptionTerm , SubLineMaxACV , SubLineMaxDiscount); system.debug('Subscription Level3 :' + GSublevel3Count); GSublevel4Count = ApprovalUtils.SubLevel4(SubscriptionTerm , SubLineMaxACV , SubLineMaxDiscount); system.debug('Subscription Level4 :' + GSublevel4Count); } /* Service Query to get level 1..4 values */ if (SerLineMaxACV != null && SerLineMaxDiscount != null) { GSerlevel1Count = ApprovalUtils.SerLevel1(SerLineMaxACV,SerLineMaxDiscount); system.debug('Service Level1 :' + GSerlevel1Count); GSerlevel2Count = ApprovalUtils.SerLevel2(SerLineMaxACV,SerLineMaxDiscount); system.debug('Service Level2 :' + GSerlevel2Count); GSerlevel3Count = ApprovalUtils.SerLevel3(SerLineMaxACV,SerLineMaxDiscount); system.debug('Service Level3 :' + GSerlevel3Count); } If( GSublevel1Count >= 1 || GSerlevel1Count >= 1 ) { SALREPID = Opp.OwnerId; } If (GSublevel2Count >= 1 || GSerlevel2Count >= 1 ) { SALREPID = NULL; MRGID = Usr.managerid; } /* Future here you may have to change for amount > 1000000 if its going only to SVP */ If ( GSublevel3Count >= 1 || GSerlevel3Count >= 1) { SALREPID = NULL; MRGID = Usr.managerid; SALID = '00580000007jaoA'; } If ( GSublevel4Count >= 1 ) { SALREPID = NULL; MRGID = Usr.managerid; SALID = '00580000007jaoA'; CFOID = '00580000006HV0w'; Level = '4sub'; } //system.debug('Which Level :' + Level); system.debug('Sales Rep :' + SALREPID); system.debug('Manager :' + MRGID); system.debug('Sales Ops :' + SALID); system.debug('CEO CFO :' + CFOID); for (QuoteLineItem gqtl : Trigger.new) { Quote MyParentQuote = ParentQuote.get(gqtl.QuoteId); MyParentQuote.Level_1__c = SALREPID; MyParentQuote.Level_2__c=MRGID; MyParentQuote.Level_3__c=SALID; MyParentQuote.Level_4__c=CFOID; } update ParentQuote.values(); } } catch(Exception e) { System.debug('The following exception has occurred: ' + e.getMessage()); } }
Test Class below is the test written trigger still shows 0% code coverage please advice me how to get good coverage and logic how to write test class for above trigger
@isTest(SeeAllData=True) private class GenQuoteApproval_Test { static testMethod void GenQuote(){ QuoteLineItem Qtl = [select id,quoteid from QuoteLineItem where id = '0QL18000000HS8x']; Quote Qot = [select id,Level_1__c,Level_2__c,Level_3__c,Level_4__c,opportunityid FROM Quote WHERE ID = :Qtl.quoteid ]; Opportunity Opp = [select ownerid from opportunity where id = :Qot.opportunityid ]; User Usr = [select managerid from user where id = :opp.ownerid]; test.startTest(); List<quote> qList = new List <quote> (); //Iterate and collect all the end user records for (quote q : [select id,Level_1__c,Level_2__c,Level_3__c,Level_4__c,opportunityid FROM Quote WHERE ID = :Qtl.id]) { qList.add(new quote(Id = q.Id, Level_1__c= opp.ownerid, Level_2__c= usr.managerid, Level_3__c= '00580000007jaoA', Level_4__c= '00580000007jaoA')); } update qList; test.stopTest(); } }
Thanks
Sudhir
Check in Developer console under Test tab always run aynchronously is checked
PS : Make dummy data for test classes never use actul data for test classes.
Best Regards,
Amit Ghadage.