You need to sign in to do that
Don't have an account?
Lance Riviere
Test Coverage for Email Template
Hello all,
Hopefully a quick fix, but I'm not having much luck. We're trying to get it set up for an email to be sent out when a Work Order reaches certain statuses. It works as intended in our Sandbox environment, but when I try to create a Test Class, I can't seem to get code coverage for the email itself and I'm not sure why. When I run the test, pretty much everything dealing with the email is red, but everything else is blue. I don't know if there's a setting that I'm missing when it comes to testing emails through triggers, or if something needs to be changed in the code, but any suggestions would be greatly appreciated.
Trigger:
if ((newRecord.Status != trigger.oldMap.get(newRecord.Id).Status)
&& (newRecord.Status == 'Pending Complete'))
{
List<Messaging.SingleEmailMessage> sendAll = new List<Messaging.SingleEmailMessage>();
for (Contact acctContact : [SELECT Id FROM Contact WHERE AccountId =: newRecord.AccountId AND Email_Pending_Complete__c = true])
{
------Red Code Coverage Starts-----
Messaging.SingleEmailMessage statusEmail = new Messaging.SingleEmailMessage();
statusEmail.setTargetObjectId(acctContact.Id);
statusEmail.setWhatId(newRecord.Id);
statusEmail.setReplyTo('(Reply Email)');
statusEmail.setSenderDisplayName('(Display Name)');
statusEmail.setTemplateId('(Template ID)');
sendAll.add(statusEmail);
------Red Code Coverage Ends-----
}
Integer recCount = [SELECT count() FROM Contact WHERE AccountId =: newRecord.AccountId AND Email_Pending_Complete__c = true];
if(recCount > 0)
{
------Red Code Coverage Starts-----
Messaging.sendEmail(sendAll);
------Red Code Coverage Ends-----
}
}
Test Method:
@isTest static void PendingStatus()
{
WorkOrder wOrderNew = new WorkOrder();
wOrderNew.Snap_Contact__c = '(Contact)';
wOrderNew.Client_Contact__c = '(Other Contact)';
wOrderNew.End_User_Account__c = '(End User)';
wOrderNew.ContactId = '(Yet Another Contact)';
wOrderNew.AccountId = '(Account)';
wOrderNew.Status = 'Scheduling';
insert wOrderNew;
Test.startTest();
wOrderNew.Status = 'Pending Complete';
update wOrderNew;
Test.stopTest();
}
Hopefully a quick fix, but I'm not having much luck. We're trying to get it set up for an email to be sent out when a Work Order reaches certain statuses. It works as intended in our Sandbox environment, but when I try to create a Test Class, I can't seem to get code coverage for the email itself and I'm not sure why. When I run the test, pretty much everything dealing with the email is red, but everything else is blue. I don't know if there's a setting that I'm missing when it comes to testing emails through triggers, or if something needs to be changed in the code, but any suggestions would be greatly appreciated.
Trigger:
if ((newRecord.Status != trigger.oldMap.get(newRecord.Id).Status)
&& (newRecord.Status == 'Pending Complete'))
{
List<Messaging.SingleEmailMessage> sendAll = new List<Messaging.SingleEmailMessage>();
for (Contact acctContact : [SELECT Id FROM Contact WHERE AccountId =: newRecord.AccountId AND Email_Pending_Complete__c = true])
{
------Red Code Coverage Starts-----
Messaging.SingleEmailMessage statusEmail = new Messaging.SingleEmailMessage();
statusEmail.setTargetObjectId(acctContact.Id);
statusEmail.setWhatId(newRecord.Id);
statusEmail.setReplyTo('(Reply Email)');
statusEmail.setSenderDisplayName('(Display Name)');
statusEmail.setTemplateId('(Template ID)');
sendAll.add(statusEmail);
------Red Code Coverage Ends-----
}
Integer recCount = [SELECT count() FROM Contact WHERE AccountId =: newRecord.AccountId AND Email_Pending_Complete__c = true];
if(recCount > 0)
{
------Red Code Coverage Starts-----
Messaging.sendEmail(sendAll);
------Red Code Coverage Ends-----
}
}
Test Method:
@isTest static void PendingStatus()
{
WorkOrder wOrderNew = new WorkOrder();
wOrderNew.Snap_Contact__c = '(Contact)';
wOrderNew.Client_Contact__c = '(Other Contact)';
wOrderNew.End_User_Account__c = '(End User)';
wOrderNew.ContactId = '(Yet Another Contact)';
wOrderNew.AccountId = '(Account)';
wOrderNew.Status = 'Scheduling';
insert wOrderNew;
Test.startTest();
wOrderNew.Status = 'Pending Complete';
update wOrderNew;
Test.stopTest();
}
All Answers