function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Lance RiviereLance 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();
    }
Best Answer chosen by Lance Riviere
Raj VakatiRaj Vakati
Use this code
 
@isTest static void PendingStatus()
    {
		
		 Account acc = new Account(name='Test Account');
          insert acc;
		  
		  
		   Contact c=new Contact(
            FirstName='fname',accountid = acc.id ,
            LastName = 'lname',Email_Pending_Complete__c  =true ,
            Email = 'email@gmail.com',
            Phone = '9743800309'); 
        insert c; 
		
		
        WorkOrder wOrderNew = new WorkOrder();
        wOrderNew.Snap_Contact__c = '(Contact)';
        wOrderNew.Client_Contact__c = '(Other Contact)';
        wOrderNew.End_User_Account__c = '(End User)';
        wOrderNew.ContactId =c.Id ;
        wOrderNew.AccountId = acc.Id;
        wOrderNew.Status = 'Scheduling';
        insert wOrderNew;
        
        Test.startTest();
        wOrderNew.Status = 'Pending Complete';
        update wOrderNew;
        Test.stopTest();
    }

 

All Answers

Raj VakatiRaj Vakati
Use this code
 
@isTest static void PendingStatus()
    {
		
		 Account acc = new Account(name='Test Account');
          insert acc;
		  
		  
		   Contact c=new Contact(
            FirstName='fname',accountid = acc.id ,
            LastName = 'lname',Email_Pending_Complete__c  =true ,
            Email = 'email@gmail.com',
            Phone = '9743800309'); 
        insert c; 
		
		
        WorkOrder wOrderNew = new WorkOrder();
        wOrderNew.Snap_Contact__c = '(Contact)';
        wOrderNew.Client_Contact__c = '(Other Contact)';
        wOrderNew.End_User_Account__c = '(End User)';
        wOrderNew.ContactId =c.Id ;
        wOrderNew.AccountId = acc.Id;
        wOrderNew.Status = 'Scheduling';
        insert wOrderNew;
        
        Test.startTest();
        wOrderNew.Status = 'Pending Complete';
        update wOrderNew;
        Test.stopTest();
    }

 
This was selected as the best answer
Lance RiviereLance Riviere
It didn't work quite as posted, due to restrictions and stuff that we have in place, but after tinkering with it some more I did get it to work. Thank you for the help in getting me started on the right path.