You need to sign in to do that
Don't have an account?
nilesh walke 6
can any one please help me in this trigger test class
public without sharing class EmailQueueTriggerHelper extends GNT.TriggerHelper{
public static boolean skipAll = false;
public override void processAfterUpdate() {
if (skipAll == false) {
systemEmailHelper();
}
}
public static void systemEmailHelper(){
//as we have written this code in after update we need to 1st get those records from by SQOL and then only we can do DML operation on those records.
//For the same writen dynamic query as we need to clone new values, so to avoid adding all flieds every time used dynamic query
sObjectType objType = Schema.getGlobalDescribe().get('GNT__EmailQueue__c');
Map<String,Schema.SObjectField> mfields = objType.getDescribe().fields.getMap();
String fields = '';
for (SObjectField field : mfields.values()) {
fields += field + ',';
}
fields = fields.removeEnd(',');
Set<Id> setEmailId = new Set<Id>();
for(GNT__EmailQueue__c obj : (List<GNT__EmailQueue__c>)Trigger.new){
setEmailId.add(obj.id);
}
String query4Queue = 'SELECT '+fields+' FROM GNT__EmailQueue__c where Id IN :setEmailId';
List<GNT__EmailQueue__c> lstEmailQueues = Database.query(query4Queue);
List<GNT__EmailQueue__c> lstEmailsToSplit = new List<GNT__EmailQueue__c>(); //1st we will select records which we need to split email ids
List<GNT__EmailQueue__c> lstEmailsToUpdatewithClone = new List<GNT__EmailQueue__c>();
Map<Id,GNT__EmailQueue__c> mapEmails = new map<Id,GNT__EmailQueue__c>();
for(GNT__EmailQueue__c obj : lstEmailQueues){
GNT__EmailQueue__c oldRec = (GNT__EmailQueue__c)trigger.oldMap.get(obj.Id);
if(obj.GNT__ToEmails__c.contains(',') && obj.GNT__Status__c =='Processed' && oldRec.GNT__Status__c=='Queued' && obj.IsClone__c == false){
obj.isClone__c= true;
lstEmailsToSplit.add(obj);
mapEmails.put(obj.Id,obj);
}else{
obj.ToAddress__c = obj.GNT__ToEmails__c;
obj.isClone__c= true;
lstEmailsToUpdatewithClone.add(obj);
}
}
List<GNT__EmailQueue__c> lstEmailsToInsert = new List<GNT__EmailQueue__c>();
if(lstEmailsToSplit.size()>0){
map<Id,List<String>> mapEmailRecordsWthMultiEmails = new map<Id,List<String>>();
for(GNT__EmailQueue__c obj : lstEmailsToSplit){
mapEmailRecordsWthMultiEmails.put(obj.id,obj.GNT__ToEmails__c.split(','));
}
for(Id obj : mapEmailRecordsWthMultiEmails.keySet()){
List<String> lstEmails = mapEmailRecordsWthMultiEmails.get(obj);
if(lstEmails.size()>0){
for(String str : lstEmails){
GNT__EmailQueue__c newRec1 = mapEmails.get(obj);
GNT__EmailQueue__c newRec = newRec1.clone(false, false, false, false);
newRec.id = null;
newRec.ToAddress__c = str;
newRec.isClone__c= true;
lstEmailsToInsert.add(newRec);
}
}
}
}
List<GNT__EmailQueue__c> lstToUpsrtEmails = new List<GNT__EmailQueue__c>();
if(lstEmailsToInsert.size()>0){
lstToUpsrtEmails.addAll(lstEmailsToInsert);
}
if(lstEmailsToUpdatewithClone.size()>0){
lstToUpsrtEmails.addAll(lstEmailsToUpdatewithClone);
}
if(lstToUpsrtEmails.size()>0){
lstToUpsrtEmails.addAll(lstEmailsToSplit);
}
if(lstToUpsrtEmails.size()>0){
skipAll = true;
upsert lstToUpsrtEmails;
skipAll = false;
}
}
}
public static boolean skipAll = false;
public override void processAfterUpdate() {
if (skipAll == false) {
systemEmailHelper();
}
}
public static void systemEmailHelper(){
//as we have written this code in after update we need to 1st get those records from by SQOL and then only we can do DML operation on those records.
//For the same writen dynamic query as we need to clone new values, so to avoid adding all flieds every time used dynamic query
sObjectType objType = Schema.getGlobalDescribe().get('GNT__EmailQueue__c');
Map<String,Schema.SObjectField> mfields = objType.getDescribe().fields.getMap();
String fields = '';
for (SObjectField field : mfields.values()) {
fields += field + ',';
}
fields = fields.removeEnd(',');
Set<Id> setEmailId = new Set<Id>();
for(GNT__EmailQueue__c obj : (List<GNT__EmailQueue__c>)Trigger.new){
setEmailId.add(obj.id);
}
String query4Queue = 'SELECT '+fields+' FROM GNT__EmailQueue__c where Id IN :setEmailId';
List<GNT__EmailQueue__c> lstEmailQueues = Database.query(query4Queue);
List<GNT__EmailQueue__c> lstEmailsToSplit = new List<GNT__EmailQueue__c>(); //1st we will select records which we need to split email ids
List<GNT__EmailQueue__c> lstEmailsToUpdatewithClone = new List<GNT__EmailQueue__c>();
Map<Id,GNT__EmailQueue__c> mapEmails = new map<Id,GNT__EmailQueue__c>();
for(GNT__EmailQueue__c obj : lstEmailQueues){
GNT__EmailQueue__c oldRec = (GNT__EmailQueue__c)trigger.oldMap.get(obj.Id);
if(obj.GNT__ToEmails__c.contains(',') && obj.GNT__Status__c =='Processed' && oldRec.GNT__Status__c=='Queued' && obj.IsClone__c == false){
obj.isClone__c= true;
lstEmailsToSplit.add(obj);
mapEmails.put(obj.Id,obj);
}else{
obj.ToAddress__c = obj.GNT__ToEmails__c;
obj.isClone__c= true;
lstEmailsToUpdatewithClone.add(obj);
}
}
List<GNT__EmailQueue__c> lstEmailsToInsert = new List<GNT__EmailQueue__c>();
if(lstEmailsToSplit.size()>0){
map<Id,List<String>> mapEmailRecordsWthMultiEmails = new map<Id,List<String>>();
for(GNT__EmailQueue__c obj : lstEmailsToSplit){
mapEmailRecordsWthMultiEmails.put(obj.id,obj.GNT__ToEmails__c.split(','));
}
for(Id obj : mapEmailRecordsWthMultiEmails.keySet()){
List<String> lstEmails = mapEmailRecordsWthMultiEmails.get(obj);
if(lstEmails.size()>0){
for(String str : lstEmails){
GNT__EmailQueue__c newRec1 = mapEmails.get(obj);
GNT__EmailQueue__c newRec = newRec1.clone(false, false, false, false);
newRec.id = null;
newRec.ToAddress__c = str;
newRec.isClone__c= true;
lstEmailsToInsert.add(newRec);
}
}
}
}
List<GNT__EmailQueue__c> lstToUpsrtEmails = new List<GNT__EmailQueue__c>();
if(lstEmailsToInsert.size()>0){
lstToUpsrtEmails.addAll(lstEmailsToInsert);
}
if(lstEmailsToUpdatewithClone.size()>0){
lstToUpsrtEmails.addAll(lstEmailsToUpdatewithClone);
}
if(lstToUpsrtEmails.size()>0){
lstToUpsrtEmails.addAll(lstEmailsToSplit);
}
if(lstToUpsrtEmails.size()>0){
skipAll = true;
upsert lstToUpsrtEmails;
skipAll = false;
}
}
}
here I written Test Class for you . you can take this for you convinience.
I divided it in TestSetup and test method for insert and update .
@isTest
public class EmailQueueTriggerHelperTest {
@testSetup static void setupmethod() {
List<GNT__EmailQueue__c> EmailQueueList=new List<GNT__EmailQueue__c>();
for(integer i=1;i<3;i++){
GNT__EmailQueue__c EmailQue=new GNT__EmailQueue__c();
EmailQue.GNT__ToEmails__c=',';
EmailQue.GNT__Status__c='Queued';
EmailQue.IsClone__c == true;
EmailQueueList.add(EmailQue);
}
insert EmailQueueList;
}
@istest
public static void Testmethod1(){
List<GNT__EmailQueue__c> updateRecord=[select id,GNT__ToEmails__c,GNT__Status__c,IsClone__c from GNT__EmailQueue__c where IsClone__c=false];
List<GNT__EmailQueue__c> EmailQueueList1=new List<GNT__EmailQueue__c>();
for(GNT__EmailQueue__c obj : updateRecord){
obj.GNT__Status__c='Processed';
obj.GNT__ToEmails__c='demo,demo1';
obj.IsClone__c=false;
EmailQueueList1.add(obj);
}
update EmailQueueList1;
}
}
If you find your Solution then mark this as the best answer. Thank you! Regards, Suraj Tripathi
Thank you!
Regards,
Suraj Tripathi
First time i have run this method it is giving 90% covergae but now i dont know why but it is giving 0% any solution on this