You need to sign in to do that
Don't have an account?
Trigger Test class
Hello,
I have an issue in Apex triggers can any one help me out: I have a lraedy made two post but didnot get any reply .please help me out as it is very urjent for me.
Here is the code of my Apex trigger test class:
public class sampleTest{
static testMethod void WCSFTrigger(){
Map<String, Individual_Email_Results__c> lgaMap = new Map<String, Individual_Email_Results__c>();
Individual_Email_Results__c objInsert = new Individual_Email_Results__c();
objInsert .Hard_Bounce__c = 1;
objInsert .Abuse__c = '1';
objInsert .GlobalUnsubscribe__c = '1';
objInsert .UniversalUnsubscribe__c = '1';
objInsert .Unsubscribe__c = '1';
objInsert .Lead__c = '00Q90000001S4fL';
objInsert .Contact__c = '00390000001bZ1V';
insert objInsert ;
//Here the triggers fires on updation
objInsert . Unsubscribe__c = '3';
update objInsert;
Decimal newValue = objInsert .Hard_Bounce__c;//obj.Hard_Bounce__c;
Decimal oldValue = 2;
String contactID = objInsert.Contact__c;//'00390000001bZ1V';
String leadID = objInsert.Lead__c;
system.debug(objInsert.Contact__c);
if(newValue != oldValue)
{
system.debug(contactID);
if(contactID != null)
{
Contact contact = [Select Id, HasOptedOutOfEmail from contact WHERE Id=: contactID ];
system.debug(contact);
system.debug(contact.HasOptedOutOfEmail);
if(contact.HasOptedOutOfEmail == true)
{
contact.HasOptedOutOfEmail = false;
//system.assertEquals(contact.HasOptedOutOfEmail , false);
}
else
{
contact.HasOptedOutOfEmail = true;
//system.assertEquals(contact.HasOptedOutOfEmail , true);
}
update contact;
}
if(objInsert.Lead__c!= null)
{
Lead lead = [Select Id, HasOptedOutOfEmail from lead WHERE Id=:objInsert.Lead__c];
if(lead .HasOptedOutOfEmail == true)
{
system.assertEquals(lead .HasOptedOutOfEmail , true);
}
else
{
system.assertEquals(lead .HasOptedOutOfEmail , true);
}
update lead ;
}
if( (objInsert.Abuse__c != '2') || (objInsert.GlobalUnsubscribe__c != '2') || (objInsert.UniversalUnsubscribe__c != '2') || (objInsert.Unsubscribe__c != '2'))
{
if(objInsert.Contact__c!= null)
{
Contact contact = [Select Id, EmailBouncedDate , EmailBouncedReason from contact WHERE Id=:objInsert.Contact__c];
system.assertEquals( contact.EmailBouncedReason , 'WhatCounts Hard Bounce');
update contact;
}
if(objInsert.Lead__c!= null)
{
Lead lead= [Select Id, EmailBouncedDate , EmailBouncedReason from lead WHERE Id=:objInsert.Lead__c];
system.assertEquals( lead.EmailBouncedReason , 'WhatCounts Hard Bounce');
update lead;
}
}
}
I have a problem in writing test class for code which has bold font .Please let me know if there is any issue.
The trigger is:
trigger WCSFTrigger on Individual_Email_Results__c (after update) {
Map<String, Individual_Email_Results__c> lgaMap = new Map<String, Individual_Email_Results__c>();
for (Individual_Email_Results__c objUpdate: System.Trigger.New) {
Individual_Email_Results__c obj= [Select id,Contact__c,Lead__c,Hard_Bounce__c,Abuse__c,GlobalUnsubscribe__c,UniversalUnsubscribe__c,Unsubscribe__c,Hard_Bounce_Event_Date__c from Individual_Email_Results__c where id= :objUpdate.Id];
string contactID = obj.Contact__c;
string leadID = obj.Lead__c;
Decimal newValue = trigger.new[0].Hard_Bounce__c;
Decimal oldValue = trigger.old[0].Hard_Bounce__c;
if(newValue != oldValue )
{
if(contactID != null)
{
Contact contact = [Select Id, HasOptedOutOfEmail from contact WHERE Id=:contactID ];
if(contact.HasOptedOutOfEmail == true)
{
contact.HasOptedOutOfEmail = false;
}
else
{
contact.HasOptedOutOfEmail = true;
}
update contact;
}
if(leadId != null)
{
Lead lead = [Select Id, HasOptedOutOfEmail from lead WHERE Id=: leadId];
if(lead.HasOptedOutOfEmail == true)
{
lead.HasOptedOutOfEmail = false;
}
else
{
lead.HasOptedOutOfEmail = true;
}
update lead;
}
}
if( (trigger.new[0].Abuse__c != trigger.old[0].Abuse__c) || (trigger.new[0].GlobalUnsubscribe__c != trigger.old[0].GlobalUnsubscribe__c) || (trigger.new[0].UniversalUnsubscribe__c != trigger.old[0].UniversalUnsubscribe__c) || (trigger.new[0].Unsubscribe__c != trigger.old[0].Unsubscribe__c))
{
if(contactID != null)
{
Contact contact = [Select Id, EmailBouncedDate , EmailBouncedReason from contact WHERE Id=:contactID ];
contact.EmailBouncedReason = 'WhatCounts Hard Bounce';
contact.EmailBouncedDate = datetime.valueOf(obj.Hard_Bounce_Event_Date__c);
update contact;
}
if(leadId != null)
{
Lead lead= [Select Id, EmailBouncedDate , EmailBouncedReason from lead WHERE Id=:leadID ];
lead.EmailBouncedReason = 'WhatCounts Hard Bounce';
lead.EmailBouncedDate = datetime.valueOf(obj.Hard_Bounce_Event_Date__c);
update lead;
}
}
}
}
Please let me know if any changes has to be done.
I have followed the APEX DOCS TO WRITE THE CODE. I have already made two posts regarding this issue but didnot get any reply.
Thanks
I would refactor your code to move the large if statements within the trigger.* and place it in another class.
Maybe call it:
Individual_Email_ResultController();
Place a static class that the trigger can see easily.
IndividualEmailResultsController.hasContactID();
This way you can test that method ... without having to test the full trigger.
etc ... and then write unit tests around that ... its a lot easier then doing all the code within the trigger. And a lot easier to test to move it to another class. At least from what I've been testing.
I hope that helps.