THE PROBLEM: My CustomObjectTrigger has a CustomObjectHandler class. I have code that is fired in the CustomObjectHandler class when the CustomObjectTrigger is fired by a new record that (isInsert && isAfter). I have created a test class to test the code, but the test code only seems to trigger (isInsert && isBefore). Something must be incorrect in my test class.
Any help would be greatly appreciated!
Trigger:
trigger CustomObjectTrigger on CustomObject__c(after delete, after insert, after undelete, after update, before delete, before insert, before update) {
if (CustomObjectHandler.hasExecuted) {
return;
}
CustomObjectHandler.hasExecuted = true;
CustomObjectHandler = new CustomObjectHandler(Trigger.isExecuting, Trigger.size);
if(Trigger.isInsert && Trigger.isBefore) { // this code runs
handler.OnBeforeInsert(Trigger.new);
}
else if(Trigger.isInsert && Trigger.isAfter) { // this code doesn't run
handler.OnAfterInsert(Trigger.new);
CustomObjectHandler.OnAfterInsertAsync(Trigger.newMap.keySet());
}
}
Test Class:
@isTest
public class LookupRollup_CustomObject__c_test {
static void test_method_one() {
Test.startTest();
// Create Custom Object
CustomObject__c rs = new CustomObject__c();
rs.Start_Date__c = system.today();
rs.End_Date__c = system.today() + 30;
rs.Annualized_Rent__c = 12000;
String testAfterTrigger = rs.Id;
insert rs;
List<CustomObject__c > testInsert = new List<CustomObject__c >([SELECT Id, Annualized_Rent__c FROM CustomObject__c WHERE Id =: rs.id]);
system.assertEquals(testInsert[0].Annualized_Rent__c, rs.Annualized_Rent__c);
rs.Annualized_Rent__c = 12001;
update rs;
Test.stopTest();
}
}
}
CustomObjectHandler.hasExecuted = false
after yourbefore insert
block is executed successfully? Or else, the value beingtrue
in the next pass, the control will just return without executing the trigger.