function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
nilesh walke 6nilesh 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;
        }
    }
}
Suraj Tripathi 47Suraj Tripathi 47
Hi nilesh,

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  
nilesh walke 6nilesh walke 6
Thanks @Suraj Tripathi     
nilesh walke 6nilesh walke 6
Hi @Suraj
   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