From looking at your code, it appears to me that when you insert new records in your test class, your trigger fires causing an update of Opportunity.
if (Trigger.isInsert){
....
for (Opportunity o : insertedOpps){
.....
} else if (o.Ramp_Profile__c == 'Standard'){
// set different values
}
}
// ==> update oppsToUpdate;
When the above happens, this causes the trigger to fire again in the same execution context. Unless you add a boolean flag of some kind to prevent it, the trigger will fire again and do an after update in this execution context. When that happens, you'll see the same trigger.old
as existed the first time the trigger fired in the AfterInsert
context.
This happens before you ever do the update in your test class and may be what you're seeing in your debug logs. This same recursion will occur in your AfterUpdate
handler code if you don't do something to prevent it.
More than anything, I recommend you add debug statements in your test class to obtain the values of your important variables after insertion of Opportunities1
and following your query to get list opportunities
. You'll also benefit from inserting debug statements in your code after update opportunities;
(can be placed after Test.stopTest();
if you prefer).
Once you have things sorted, your class should include assertions of what you expect those values to be instead of the debug statements following Test.stopTest();