You need to sign in to do that
Don't have an account?
ApexDev
Apex Test Class for SingleEmailMessage - need help
Hi Experts!
I need help to increase my test coverage for SingleEmailMessage. The test coverage is only 33%. Everything after for (Case cs : cases) is not coverage. What I am doing wrong?
Email Class:
Test Class:
I need help to increase my test coverage for SingleEmailMessage. The test coverage is only 33%. Everything after for (Case cs : cases) is not coverage. What I am doing wrong?
Email Class:
public class EmailClass { @InvocableMethod public static void sendEmail() { //Contact and Case lists List<Contact> contacts =[Select Id From Contact where Email!=null]; List<Case> cases = new List<Case>(); cases = [Select Id,ContactEmail, Letter_Sent__c, Letter_Sent_Date__c, Reminder_Sent__c, Reminder_Sent_Date__c, Follow_up_Date__c, Responsibility_Center__c, Status, ContactId, Follow_Up_Date_in_Days__c, Actual_Follow_up_Date__c From Case Where ContactEmail!=null AND subject='Periodic Service' AND account.company_code__c='US45' AND Actual_Follow_up_Date__c = true AND Status='Ready for Email' AND Letter_Sent__c = false AND Reminder_Sent__c = false AND ContactId IN : contacts]; List<Case> cases2 = new List<Case>(); cases2 = [Select Id,ContactEmail, Letter_Sent__c, Letter_Sent_Date__c, Reminder_Sent__c, Reminder_Sent_Date__c, Follow_up_Date__c, Responsibility_Center__c, Status, ContactId, Follow_Up_Date_in_Days__c, Actual_Follow_up_Date__c From Case Where ContactEmail!=null AND Follow_Up_Date_in_Days__c = 0 AND subject='Periodic Service' AND account.company_code__c='US45' AND Actual_Follow_up_Date__c = true AND Status='Waiting for Customer' AND Letter_Sent__c = true AND Reminder_Sent__c = false AND ContactId IN : contacts]; //ORG Wide Email Addresses lists OrgWideEmailAddress AST = new OrgWideEmailAddress(); AST = [SELECT Id, Address, DisplayName FROM OrgWideEmailAddress Where DisplayName='Austin']; OrgWideEmailAddress ATL = new OrgWideEmailAddress(); ATL = [SELECT Id, Address, DisplayName FROM OrgWideEmailAddress Where DisplayName='Atlanta']; List<Messaging.SingleEmailMessage> emails = new List<Messaging.SingleEmailMessage>(); for (Case cs : cases) { Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage(); List<String> toAddress = new List<String>(); toAddress.add(cs.ContactEmail); email.setToAddresses(toAddress); email.setWhatId(cs.Id); email.setTargetObjectId(cs.ContactId); email.setTemplateId('00X7Z0000027tioUAA'); email.setTreatTargetObjectAsRecipient(false); //email.setOrgWideEmailAddressId(owea.id); //List<String> ccAddress = new List<String>(); //email.setCcAddresses(ccAddress); //email.setSaveAsActivity(true); //First email reminder //Letter_Sent_Date__c and Follow_up_Date__c updated in Cases Processes for first reminder if (cs.Responsibility_Center__c =='AST' && cs.status=='Ready for Email' && cs.Letter_Sent__c == false && cs.Reminder_Sent__c == false) { cs.status = 'Waiting for Customer'; cs.Letter_Sent__c = true; email.setOrgWideEmailAddressId(AST.id); } if (cs.Responsibility_Center__c =='ATL' && cs.status=='Ready for Email' && cs.Letter_Sent__c == false && cs.Reminder_Sent__c == false) { cs.status = 'Waiting for Customer'; cs.Letter_Sent__c = true; email.setOrgWideEmailAddressId(ATL.id); } else { system.debug('no mail was sent'); } emails.add(email);} //Second email reminder for (Case cs2 : cases2) { Messaging.SingleEmailMessage email2 = new Messaging.SingleEmailMessage(); List<String> toAddress2 = new List<String>(); toAddress2.add(cs2.ContactEmail); email2.setToAddresses(toAddress2); email2.setWhatId(cs2.Id); email2.setTargetObjectId(cs2.ContactId); email2.setTemplateId('00X7Z0000027tioUAA'); email2.setTreatTargetObjectAsRecipient(false); cs2.Reminder_Sent__c = true; if (cs2.Responsibility_Center__c =='AST' && cs2.status=='Waiting for Customer' && cs2.Letter_Sent__c == true && cs2.Follow_Up_Date_in_Days__c == 0) { cs2.Reminder_Sent__c = true; email2.setOrgWideEmailAddressId(AST.id); } if (cs2.Responsibility_Center__c =='ATL' && cs2.status=='Waiting for Customer' && cs2.Letter_Sent__c == true && cs2.Follow_Up_Date_in_Days__c == 0) { cs2.Reminder_Sent__c = true; email2.setOrgWideEmailAddressId(ATL.id); } else { system.debug('no mail was sent'); } emails.add(email2); } else { system.debug('no mail was sent'); } emails.add(email2); } Messaging.sendEmail(emails); update cases; update cases2; } }
Test Class:
@isTest(seeAllData=true) public class EmailClassTest { @isTest public static void sendEmail(){ //Insert Profile Profile cus = [SELECT Id FROM Profile WHERE Name='DGS - Customer Service']; //Insert User User us = new User(Alias = 'standt', Email='standarduser@testorg.com', EmailEncodingKey='UTF-8', LastName='Testing', LanguageLocaleKey='en_US', LocaleSidKey='en_US', ProfileId = cus.Id, CompanyName = 'E3', TimeZoneSidKey='America/Los_Angeles', UserName='standarduser@testorg.com'); //Insert Account Account acct = new Account(Name='TestClassAccount', Customer_Segment__c = 'Hospitals', Calibration_Intervals__c = 'Half year'); insert acct; //Insert Contact Contact con = new Contact(LastName='JasonSendEmail', email='sendemail@toatlanta.com', AccountId=acct.Id); insert con; //Insert Responsibility Center Responsibility_Center__c rc = new Responsibility_Center__c(Name='e3 AST'); //Insert Case Case cas = new Case(Status = 'Ready for Email', ContactId=con.id, subject='Periodic Service', AccountId = acct.id, Case_Reason__c = 'Business related', Reason = 'General Enquiry', Responsibility_Center_lookup__c=rc.id, Reminder_Sent__c = false, Letter_Sent__c = false, Follow_up_date__c = datetime.newInstance(2022, 10, 15, 12, 30, 0)); insert cas; //Insert 2nd Case Case cas2 = new Case(Follow_up_Date__c = date.today(), Status = 'Waiting for Customer', ContactId=con.id, subject='Periodic Service', AccountId = acct.id, Case_Reason__c = 'Business related', Reason = 'General Enquiry', Responsibility_Center_lookup__c=rc.id, Reminder_Sent__c = false, Letter_Sent__c = true); insert cas2; //Insert Org-wide OrgWideEmailAddress[] addresses = [SELECT Id, Address, DisplayName FROM OrgWideEmailAddress Where DisplayName='Austin']; Test.startTest(); System.assertEquals(0, Limits.getEmailInvocations(), 'No emails should be sent'); EmailClass.sendEmail(); System.assertEquals(1, Limits.getEmailInvocations(), 'Emails should be sent'); Test.stopTest(); } }
As per salesforce best practies you will not use seealldata=true for test classes.
try with below code.
If this helps, Please mark it as best answer.
Sorry for the late reply.
I will try from my end and get back to you.
Thanks!!