You need to sign in to do that
Don't have an account?
Akshay Shrivastava
test class for standardset controller
Hello guys,
I am trying to write test class but iam unable to remove error and get more then 75% coverage. Can anyone help me.
Apex class ----->
public class SendEmailCtrl {
public Set<Id> recordIdSet;
public List<opportunity> oppList;
public List<Opportunity> opportunities{get;private set;}
//public List<EmailTemplate> templateName{get;set;}
private List<EmailTemplate> allEmailTemplates;
private List<Folder> allEmailTemplateFolders;
public Integer numberOfSuccessfulMessages{get;set;}
public String selectedEmailTemplateFolder {public get; public set;}
public String selectedEmailTemplate {public get; public set;}
public EmailTemplate chosenEmailTemplate {public get; private set;}
public SendEmailCtrl(ApexPages.StandardSetController stdSetController){
opportunities = (List<Opportunity>) stdSetController.getSelected();
recordIdSet = new Set<Id>();
numberOfSuccessfulMessages = 0;
if(opportunities.size()>0)
{
for(Opportunity opp : opportunities)
{
recordIdSet.add(opp.Id);
}
}else{
ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'Please Select atleast one record'));
numberOfSuccessfulMessages=1;
}
allEmailTemplates = [select Id, Name, Subject, Body, FolderId from EmailTemplate order by Name asc];
allEmailTemplateFolders = [select Id, Name from Folder where Type = 'Email' order by Name asc];
}
public List<SelectOption> getEmailTemplateFolderOpts() {
List<SelectOption> opts = new List<SelectOption>();
opts.add(new SelectOption('null', ' - Select - '));
for ( Folder f : allEmailTemplateFolders )
opts.add(new SelectOption(f.Id, f.Name));
opts.add(new SelectOption(UserInfo.getOrganizationId(), 'Unfiled Public'));
return opts;
}
public List<SelectOption> getEmailTemplateOpts() {
List<SelectOption> opts = new List<SelectOption>();
if ( selectedEmailTemplateFolder != null ) {
opts.add(new SelectOption('null', ' - Select - '));
Id selectedId = (Id) selectedEmailTemplateFolder;
for ( EmailTemplate et : allEmailTemplates ) {
if ( et.FolderId == selectedId )
opts.add(new SelectOption(et.Id, et.Name));
}
}
return opts;
}
public PageReference refreshEmailTemplateSection() {
if ( selectedEmailTemplateFolder == null || selectedEmailTemplateFolder == 'null' ) {
selectedEmailTemplateFolder = null;
selectedEmailTemplate = null;
}
if ( selectedEmailTemplate == null || selectedEmailTemplate == 'null' ) {
selectedEmailTemplate = null;
chosenEmailTemplate = null;
} else {
Id selectedId = (Id) selectedEmailTemplate;
for ( EmailTemplate et : allEmailTemplates ) {
if ( et.Id == selectedId ) {
chosenEmailTemplate = et;
break;
}
}
}
return null;
}
public void sendEmail(){
list<opportunity> opplist= [SELECT Id,Contact__c from Opportunity where id in :recordIdSet];
map<Id,opportunity> oppMap = new Map<Id,opportunity>(oppList);
list<Messaging.SingleEmailMessage> emailtemp = new List<Messaging.SingleEmailMessage>();
//EmailTemplate templateId = [Select id from EmailTemplate where DeveloperName = 'Rebooking'];
for(id oppId : oppMap.keyset()){
Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
// message.setToAddresses(new list <string>(oppMap.Get(oppId).Contact__c));
message.setTemplateID(chosenEmailTemplate.Id);
message.setSaveAsActivity(true); // Line no. 84
message.setWhatId(oppId);
message.setTargetObjectId(oppMap.Get(oppId).Contact__c);
message.setTreatTargetObjectAsRecipient(true);
emailtemp.add(message);
}
Messaging.SendEmailResult[] results =Messaging.sendEmail(emailtemp);
for(Messaging.SendEmailResult emailresult : results){
if(emailresult.isSuccess()){
numberOfSuccessfulMessages++;
}else{
for (Messaging.Sendemailerror sendEmailError : emailresult.getErrors()){
Apexpages.addMessage(new ApexPages.Message (ApexPages.Severity.ERROR,'Send Email Result Error: ' +sendEmailError.Message));
}
}
}
if(numberOfSuccessfulMessages >0){
ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM,'Number of Emails sent Successfully: '+numberOfSuccessfulMessages));
}else{
ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'NO EMAIL SENT: Something went wrong'));
numberOfSuccessfulMessages=1;
}
/*Integer start = System.Now().millisecond();
while(System.Now().millisecond()< start+3000){
SendEmailCtrl.redirect();
}*/
// return 'done';
}
public PageReference redirect(){
PageReference pageRef = new PageReference('/lightning/o/Opportunity/list?filterName=Recent');
pageRef.setRedirect(true);
return pageRef;
}
}
test class ---------------------------->
@isTest
public class SendEmailCtrl_test {
@isTest
public static void getOpportunityList()
{
List<Opportunity> oppList = new List<Opportunity>();
//Insert new Account
Account accObj = new Account();
accObj.Name = 'New Account';
insert accObj;
//insert new contact
Contact conObj = new Contact();
conObj.AccountId = accObj.id;
conObj.LastName ='LName_Test1';
conObj.FirstName='FName_Test1';
conObj.Email='FName_Test1@yopmail.com';
insert conObj;
//Insert new opportunity
Opportunity oppObj = new Opportunity();
oppObj.Name = 'Opportunity Name Test1';
oppObj.AccountId = accObj.id;
oppObj.StageName = 'Prospecting';
oppObj.Contact__c = conObj.id;
oppObj.CloseDate = system.Today()+3;
insert oppObj;
oppList.add(oppObj);
//System.assert(ApexPages.hasMessages(ApexPages.SEVERITY.ERROR));
//System.assert(ApexPages.hasMessages(ApexPages.SEVERITY.CONFIRM));
//List<Opportunity> opplist = SendEmailCtrl_test.getOpportunityList();
Test.startTest();
ApexPages.StandardSetController stdSetControllerObj = new ApexPages.StandardSetController(opplist);
stdSetControllerObj.setSelected(opplist);
map<Id,opportunity> oppMap = new Map<Id,opportunity>(oppList);
SendEmailCtrl obj = new SendEmailCtrl(stdSetControllerObj);
obj.refreshEmailTemplateSection();
obj.getEmailTemplateOpts();
obj.getEmailTemplateFolderOpts();
obj.redirect();
obj.sendEmail();
Test.stopTest();
}
}
Error----------------->
Attempt to derefrence null object.
Class.SendEmailCtrl.sendEmail: line 84, column 1
Class.SendEmailCtrl_test.getOpportunityList: line 46, column 1
AnyOne can help ?
I am trying to write test class but iam unable to remove error and get more then 75% coverage. Can anyone help me.
Apex class ----->
public class SendEmailCtrl {
public Set<Id> recordIdSet;
public List<opportunity> oppList;
public List<Opportunity> opportunities{get;private set;}
//public List<EmailTemplate> templateName{get;set;}
private List<EmailTemplate> allEmailTemplates;
private List<Folder> allEmailTemplateFolders;
public Integer numberOfSuccessfulMessages{get;set;}
public String selectedEmailTemplateFolder {public get; public set;}
public String selectedEmailTemplate {public get; public set;}
public EmailTemplate chosenEmailTemplate {public get; private set;}
public SendEmailCtrl(ApexPages.StandardSetController stdSetController){
opportunities = (List<Opportunity>) stdSetController.getSelected();
recordIdSet = new Set<Id>();
numberOfSuccessfulMessages = 0;
if(opportunities.size()>0)
{
for(Opportunity opp : opportunities)
{
recordIdSet.add(opp.Id);
}
}else{
ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'Please Select atleast one record'));
numberOfSuccessfulMessages=1;
}
allEmailTemplates = [select Id, Name, Subject, Body, FolderId from EmailTemplate order by Name asc];
allEmailTemplateFolders = [select Id, Name from Folder where Type = 'Email' order by Name asc];
}
public List<SelectOption> getEmailTemplateFolderOpts() {
List<SelectOption> opts = new List<SelectOption>();
opts.add(new SelectOption('null', ' - Select - '));
for ( Folder f : allEmailTemplateFolders )
opts.add(new SelectOption(f.Id, f.Name));
opts.add(new SelectOption(UserInfo.getOrganizationId(), 'Unfiled Public'));
return opts;
}
public List<SelectOption> getEmailTemplateOpts() {
List<SelectOption> opts = new List<SelectOption>();
if ( selectedEmailTemplateFolder != null ) {
opts.add(new SelectOption('null', ' - Select - '));
Id selectedId = (Id) selectedEmailTemplateFolder;
for ( EmailTemplate et : allEmailTemplates ) {
if ( et.FolderId == selectedId )
opts.add(new SelectOption(et.Id, et.Name));
}
}
return opts;
}
public PageReference refreshEmailTemplateSection() {
if ( selectedEmailTemplateFolder == null || selectedEmailTemplateFolder == 'null' ) {
selectedEmailTemplateFolder = null;
selectedEmailTemplate = null;
}
if ( selectedEmailTemplate == null || selectedEmailTemplate == 'null' ) {
selectedEmailTemplate = null;
chosenEmailTemplate = null;
} else {
Id selectedId = (Id) selectedEmailTemplate;
for ( EmailTemplate et : allEmailTemplates ) {
if ( et.Id == selectedId ) {
chosenEmailTemplate = et;
break;
}
}
}
return null;
}
public void sendEmail(){
list<opportunity> opplist= [SELECT Id,Contact__c from Opportunity where id in :recordIdSet];
map<Id,opportunity> oppMap = new Map<Id,opportunity>(oppList);
list<Messaging.SingleEmailMessage> emailtemp = new List<Messaging.SingleEmailMessage>();
//EmailTemplate templateId = [Select id from EmailTemplate where DeveloperName = 'Rebooking'];
for(id oppId : oppMap.keyset()){
Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
// message.setToAddresses(new list <string>(oppMap.Get(oppId).Contact__c));
message.setTemplateID(chosenEmailTemplate.Id);
message.setSaveAsActivity(true); // Line no. 84
message.setWhatId(oppId);
message.setTargetObjectId(oppMap.Get(oppId).Contact__c);
message.setTreatTargetObjectAsRecipient(true);
emailtemp.add(message);
}
Messaging.SendEmailResult[] results =Messaging.sendEmail(emailtemp);
for(Messaging.SendEmailResult emailresult : results){
if(emailresult.isSuccess()){
numberOfSuccessfulMessages++;
}else{
for (Messaging.Sendemailerror sendEmailError : emailresult.getErrors()){
Apexpages.addMessage(new ApexPages.Message (ApexPages.Severity.ERROR,'Send Email Result Error: ' +sendEmailError.Message));
}
}
}
if(numberOfSuccessfulMessages >0){
ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM,'Number of Emails sent Successfully: '+numberOfSuccessfulMessages));
}else{
ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'NO EMAIL SENT: Something went wrong'));
numberOfSuccessfulMessages=1;
}
/*Integer start = System.Now().millisecond();
while(System.Now().millisecond()< start+3000){
SendEmailCtrl.redirect();
}*/
// return 'done';
}
public PageReference redirect(){
PageReference pageRef = new PageReference('/lightning/o/Opportunity/list?filterName=Recent');
pageRef.setRedirect(true);
return pageRef;
}
}
test class ---------------------------->
@isTest
public class SendEmailCtrl_test {
@isTest
public static void getOpportunityList()
{
List<Opportunity> oppList = new List<Opportunity>();
//Insert new Account
Account accObj = new Account();
accObj.Name = 'New Account';
insert accObj;
//insert new contact
Contact conObj = new Contact();
conObj.AccountId = accObj.id;
conObj.LastName ='LName_Test1';
conObj.FirstName='FName_Test1';
conObj.Email='FName_Test1@yopmail.com';
insert conObj;
//Insert new opportunity
Opportunity oppObj = new Opportunity();
oppObj.Name = 'Opportunity Name Test1';
oppObj.AccountId = accObj.id;
oppObj.StageName = 'Prospecting';
oppObj.Contact__c = conObj.id;
oppObj.CloseDate = system.Today()+3;
insert oppObj;
oppList.add(oppObj);
//System.assert(ApexPages.hasMessages(ApexPages.SEVERITY.ERROR));
//System.assert(ApexPages.hasMessages(ApexPages.SEVERITY.CONFIRM));
//List<Opportunity> opplist = SendEmailCtrl_test.getOpportunityList();
Test.startTest();
ApexPages.StandardSetController stdSetControllerObj = new ApexPages.StandardSetController(opplist);
stdSetControllerObj.setSelected(opplist);
map<Id,opportunity> oppMap = new Map<Id,opportunity>(oppList);
SendEmailCtrl obj = new SendEmailCtrl(stdSetControllerObj);
obj.refreshEmailTemplateSection();
obj.getEmailTemplateOpts();
obj.getEmailTemplateFolderOpts();
obj.redirect();
obj.sendEmail();
Test.stopTest();
}
}
Error----------------->
Attempt to derefrence null object.
Class.SendEmailCtrl.sendEmail: line 84, column 1
Class.SendEmailCtrl_test.getOpportunityList: line 46, column 1
AnyOne can help ?
Actually error showing at the devloper console when I am testing test class. Not at the time of deployment.