A Campaign Member After Update trigger should fire after a lead in a campaign is converted, correct? My AfterUpdate trigger is not firing at all in unit testing. I have enabled "Require Validation for Converted Leads".
I can see some managed package activity when the lead is converted, and then my CampaignMember AfterUpdate trigger is skipped, but the contact is being created and is populating the existing CampaignMember record.
trigger CampaignMemberTriggers on CampaignMember (after insert, after update) {
if (Trigger.isAfter && Trigger.isInsert) {
CampaignMemberAfterInsertHandler.process(Trigger.new);
}
if (Trigger.isAfter && Trigger.isUpdate) {
system.debug('*** after update ***');
CampaignMemberAfterUpdateHandler.process(Trigger.new, Trigger.oldMap);
}
}
Update: I created a clean developer instance and it doesn't work there either. I created a simple afterupdate trigger, wrote a unit test and ran it, and the trigger doesn't fire.
trigger CampaignMemberTriggers on CampaignMember (after update) {
if (Trigger.isAfter && Trigger.isUpdate) {
system.debug('*** after update ***');
}
}
@isTest
public class UnitTest {
static testmethod void testTrigger() {
Account acct = new Account(Name = 'Apex Test');
insert acct;
Campaign camp = new Campaign(Name = 'apex test', isActive = true);
insert camp;
Lead myLead = new Lead(LastName = 'Apex Test', Company = 'Apex Test');
insert myLead;
CampaignMember cm = new CampaignMember(CampaignId = camp.Id, LeadId = myLead.Id);
insert cm;
Database.LeadConvert lc = new Database.LeadConvert();
lc.setLeadId(myLead.Id);
lc.setAccountId(acct.Id);
lc.setDoNotCreateOpportunity(true);
LeadStatus convertStatus = [SELECT Id, MasterLabel FROM LeadStatus WHERE IsConverted = true LIMIT 1];
lc.setConvertedStatus(convertStatus.MasterLabel);
Database.LeadConvertResult lcr = Database.convertLead(lc);
System.assert(lcr.isSuccess());
CampaignMember cmNew = [SELECT LeadId, ContactId FROM CampaignMember WHERE Id = :cm.Id];
}
}