• Lance Riviere
  • NEWBIE
  • 10 Points
  • Member since 2019

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 1
    Questions
  • 1
    Replies
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();
    }
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();
    }