You need to sign in to do that
Don't have an account?
Test Coverage for Lead Conversion Trigger
Hey everyone,
Having a bit of trouble getting coverage for a trigger i wrote on Lead Conversion. I think a big problem i'm facing is that i don't completely understand test coverage conceptually.
Here's my trigger, it's working in Sandbox 100%. It basically fills in some fields in the resulting opportunity during lead conversion and inserts a partner as well.
trigger ResellerLeadConvert on Lead (after update) { // no bulk processing; will only run from the UI if (Trigger.new.size() == 1) { if (Trigger.old[0].isConverted == false && Trigger.new[0].isConverted == true && (Trigger.old[0].LeadSource == 'ADPResellerDeal' || Trigger.old[0].LeadSource == 'ResellerDeal' || Trigger.old[0].LeadSource == 'ADPPartnerReferral')) { // if a new opportunity was created if (Trigger.new[0].ConvertedOpportunityId != NULL) { // update the converted opportunity with some text from the lead Opportunity opp = [Select o.Id, o.LeadSource, o.CloseDate, o.ADP_Deal__c, o.NextStep, o.Portal_Status__c from Opportunity o Where o.Id = :Trigger.new[0].ConvertedOpportunityId]; opp.LeadSource = Trigger.old[0].LeadSource; opp.ADP_Deal__c = 'No'; if(Trigger.old[0].LeadSource == 'ADPPartnerReferral' || Trigger.old[0].LeadSource == 'ADPResellerDeal'){ opp.ADP_Deal__c = 'Yes'; } opp.NextStep = 'Rep to qualify'; opp.Portal_Status__c = 'This Oppty is a new sale / will create a new portal'; date fwdCloseDate = date.today(); opp.CloseDate = fwdCloseDate.addDays(60); update opp; // gather Campaign information from lead List<CampaignMember> ResellerMembers = new List<CampaignMember>(); ResellerMembers = [Select LeadId, z_CoSponsorAccID__c from CampaignMember where LeadId = :Trigger.old[0].Id]; Map<Id, Id> mapCampaignMember = new Map<Id, Id>(); for(CampaignMember m : ResellerMembers){ mapCampaignMember.put(m.LeadId, m.z_CoSponsorAccID__c); } // if lead has a campaign and campaign is tied to a co-sponosor account, a partner will be created if(mapCampaignMember.get(Trigger.new[0].Id)!= NULL){ Partner newPart = new Partner(); newPart.AccountToId = mapCampaignMember.get(Trigger.new[0].Id); newPart.OpportunityId = opp.Id; newPart.IsPrimary = true; newPart.Role = 'VARS/Reseller'; if(Trigger.old[0].LeadSource == 'ADPPartnerReferral'){ newPart.Role = 'Referral Partner - Sourced'; } insert newPart; } } } } }
Here's my test class. I got as far as creating the elements that the trigger covers (Lead, Campaign, CampaignMember, the Campaign's Account) but i'm unclear as to how to 'test' the lead conversion part.
@isTest private class testResellerLeadConvert { static testMethod void testConversion() { Lead L = new Lead(Company ='ABC Co', Email = '123@123.com', LastName = 'Freeman', LeadSource = 'ADPPartnerReferral', NumberOfEmployees = 100, Phone = '1234567', Partner_Salesperson_Email_Address__c = '123@123.com', Partner_Salesperson_Contact_Details__c ='x', Opportunity_Pain_Compelling_Event__c = 'x', Opportunity_Timeline__c = 'x', Opportunity_Executive_Sponsor_s__c= 'x', IsConverted = TRUE); insert L; Account ResellerAcc = new Account(Name= 'BlackMesa'); insert ResellerAcc; Campaign C = new Campaign(Name ='BMCampaign', Co_Sponsoring_Account__c = ResellerAcc.Id, Campaign_Vendor__c = 'ADP', Type = 'Referral Program (Opportunity Leads)', Topic__c = 'test topic', Campaign_Country__c = 'USA'); insert C; CampaignMember CMember = new CampaignMember(LeadId = L.Id, Campaign = C, CampaignId = C.Id); insert CMember; Test.startTest(); Database.LeadConvert lc = new Database.LeadConvert(); lc.setLeadId(L.Id); Database.LeadConvertResult lcr = Database.convertLead(lc); System.assert(lcr.isSuccess()); Test.stopTest(); } }
Any help is greatly appreciated.
oops.. these two line
LeadStatus convertStatus = [Select Id, MasterLabel from LeadStatus where IsConverted=true limit 1];
lc.setConvertedStatus(convertStatus.MasterLabel);
All Answers
In your test class you are trying to create a converted lead itself... and then trying to convert a converted lead..
Just remove IsConverted = TRUE and see it it works..
Thanks, Sam
Killed that line, getting this error:
Do i have to define the convertedStatus after i start the test method?
Class.testResellerLeadConvert.testConversion: line 38, column 1
Add these two lines just below lc.setLeadId
convertStatus = [Select Id, MasterLabel from LeadStatus where IsConverted=true limit 1];
lc.setConvertedStatus(convertStatus.MasterLabel);
oops.. these two line
LeadStatus convertStatus = [Select Id, MasterLabel from LeadStatus where IsConverted=true limit 1];
lc.setConvertedStatus(convertStatus.MasterLabel);
Sam,
Awesome, it 'Passed' on the Apex Test Results.
Do i need to write anything after the Test.stopTest(); to check if the resulting account, opportunity are correct?
Thanks!
Not required... If you want you can
Nice. Thanks dude.