You need to sign in to do that
Don't have an account?

test class for Apex Scheduler
Hello All,
Can someone help me write a test class for the below code.
Global class SendEmailToAccount implements Schedulable
{
global void execute(SchedulableContext sc)
{
sendmail();
}
public void sendmail()
{// Get default sender email address
OrgWideEmailAddress owa = [select id, DisplayName, Address from OrgWideEmailAddress where DisplayName='Sender' limit 1];
//Get Email Template
EmailTemplate templateId = [Select id from EmailTemplate where name = 'TemplateName'];
List<Messaging.SingleEmailMessage> allmsg = new List<Messaging.SingleEmailMessage>();
Set<Id> cid= new Set<id>();
List<Account> accList = [select Id,primary_contact__c from Account where RecordType.developerName = 'My_Account_Record_Type'];
List<Messaging.SendEmailResult> results;
for(account acc:accList)
{
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setTemplateID(templateId.Id);
mail.setSaveAsActivity(false);
mail.setTargetObjectId(acc.Primary_Contact__c);
mail.setWhatId(acc.Id);
mail.setOrgWideEmailAddressId(owa.id);
allmsg.add(mail);
}
if(allmsg.size()>0)
{
results = Messaging.sendEmail(allmsg,false);
}
if (!results.get(0).isSuccess())
{
System.StatusCode statusCode = results.get(0).getErrors()[0].getStatusCode();
String errorMessage = results.get(0).getErrors()[0].getMessage();
system.debug(errorMessage);
}
}
}
Can someone help me write a test class for the below code.
Global class SendEmailToAccount implements Schedulable
{
global void execute(SchedulableContext sc)
{
sendmail();
}
public void sendmail()
{// Get default sender email address
OrgWideEmailAddress owa = [select id, DisplayName, Address from OrgWideEmailAddress where DisplayName='Sender' limit 1];
//Get Email Template
EmailTemplate templateId = [Select id from EmailTemplate where name = 'TemplateName'];
List<Messaging.SingleEmailMessage> allmsg = new List<Messaging.SingleEmailMessage>();
Set<Id> cid= new Set<id>();
List<Account> accList = [select Id,primary_contact__c from Account where RecordType.developerName = 'My_Account_Record_Type'];
List<Messaging.SendEmailResult> results;
for(account acc:accList)
{
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
mail.setTemplateID(templateId.Id);
mail.setSaveAsActivity(false);
mail.setTargetObjectId(acc.Primary_Contact__c);
mail.setWhatId(acc.Id);
mail.setOrgWideEmailAddressId(owa.id);
allmsg.add(mail);
}
if(allmsg.size()>0)
{
results = Messaging.sendEmail(allmsg,false);
}
if (!results.get(0).isSuccess())
{
System.StatusCode statusCode = results.get(0).getErrors()[0].getStatusCode();
String errorMessage = results.get(0).getErrors()[0].getMessage();
system.debug(errorMessage);
}
}
}
Let us know if this will help you
All Answers
Let us know if this will help you
Thanks for your response.I modified the below statement in the test class.However, it did not work as it did not return any rows.Do I need to use seeallData=true ?
List<RecordType> listRT = [select id from RecordType where developerName = 'My_Account_Record_Type' limit 1 ];
@isTest
private class SendEmailToAccountTest
{
public static String CRON_EXP = '0 0 0 15 3 ? 2022';
static testmethod void test()
{
List<RecordType> listRT = [select id from RecordType where developerName = 'My_Account_Record_Type' limit 1 ];
Account acc = new Account();
acc.Name ='TEst';
if(listRT.size() >0 )
{
acc.recordTypeid= listRT[0].id;
}
insert acc;
Contact cont = new Contact();
cont.LastName = 'TEst';
cont.FirstName ='LastName';
cont.email ='test@test.com';
insert cont;
acc.Primary_Contact__c = cont.id;
update acc;
String jobId = System.schedule('SendEmailToAccount', CRON_EXP, new SendEmailToAccount ());
CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered, NextFireTime FROM CronTrigger WHERE id = :jobId];
System.assertEquals(CRON_EXP, ct.CronExpression);
}
}
Please check your Account object Record Type and there Name and update same according to Developer Name