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
Taresh Pandey 19Taresh Pandey 19 

How to get test coverage in nested IF ELSE condition ?

Hi Mates,
I have wrote a trigger on task but i'm not able to get test coverage in side nested IF ELSE condition, can anyone suggest me, how can I bring this code into testCoverage. Please refer following code.
if(Trigger.isAfter){
        if(Trigger.isInsert ||Trigger.isUpdate){
        Set<ID> ContactIDis = new Set<ID>();
          list<Contact> Con_logs = new list<Contact>();
          for(Task tasklogs: trigger.new){
                ContactIDs.add(tasklogs.WhoId);
            }
            for(Contact conlogs : [SELECT Id, 
                          Name,
                          Contact_Status__c,
                          Next_Follow_Up_Date__c,(SELECT ID,
                                          AccountId,
                                          Activity__c,
                                          CallDisposition,
                                          CallObject,
                                          CallType,
                                          Contact_Name__c,
                                          CreatedDate,
                                          Subject,
                                          WhatId,
                                          WhoId FROM Tasks ///ORDER BY CallDisposition ASC NULLS LAST
                                      )FROM Contact Where ID IN :ContactIDis ]){
              try{
                  for(Task tasklogs : conlogs.Tasks){
                    if(tasklogs.CallDisposition == 'Do Not Disturb' || tasklogs.CallDisposition == 'Negative' ){
                      conlogs.Contact_Status__c = 'Negative';
                    }else if(tasklogs.CallDisposition == 'Voice Mail'){
                      conlogs.Next_Follow_Up_Date__c = System.today()+1;
                    }else if(tasklogs.CallDisposition == 'No Response' || tasklogs.CallDisposition == 'Person Unavailable' || tasklogs.CallDisposition == 'Person Busy'){
                      conlogs.Next_Follow_Up_Date__c = System.today()+2;
                    }else{
                      conlogs.Next_Follow_Up_Date__c = Null;
                    }
                  Con_logs.add(conlogs);
                  }
              }catch(exception e){
                  system.debug('Got an exception');
              }
            }  
              upsert Con_logs;
        }
    }
I'm not getting coverage in the bold highlighted area.
Test Class :
@isTest
private class TaskUpdateContact_Test {
   
    static testmethod void test_trigger(){
    List<Contact> l = new List<Contact>();
    List<Task> task_list = new List<Task>();
    
        Account acc = new Account(Name = 'testAccount');
        insert acc;
        Contact a =New Contact(); // creating new contact
            a.LastName='Sri';
            a.MailingCountry='INDIA';
            a.MailingCity='Mumbai';
            a.Email='abc@example.com';
            a.Phone='11111111';
            a.AccountID = acc.ID;
            a.Next_Follow_Up_Date__c = system.today();
        insert a;
                
        //Creating new task
        Task task1= new task();
            task1.Subject='Call';
            task1.status='Completed';
            task1.Whoid=a.id;
            task1.ActivityDate=Date.Today();
            task1.CallDisposition ='Negative';
            task1.FastCall__Call_Notes__c = 'abc';
            task_list.add(task1);
        insert task_list;
        // Updating existing contact 
        test.startTest();
        if(task1.CallDisposition == 'Voice Mail'){
            a.MailingCity = 'Pune';
            a.Next_Follow_Up_Date__c = system.today()+3;
            //a.ID = task1.whoID;
        }else if(task1.CallDisposition == 'Negative'){
            a.Contact_Status__c = 'Negative';
        }
        update a;
        l.add(a);
        //test.startTest();
        upsert l;
        test.stopTest();    

         
    }
}

Any help would be appreciated, please reply ASAP

Regards'
Taresh
v varaprasadv varaprasad
Hi Taresh,

Please check once below sample code : 

 
@isTest
private class TaskUpdateContact_Test {
   
    static testmethod void test_trigger(){
    List<Contact> l = new List<Contact>();
    List<Task> task_list = new List<Task>();
    
        Account acc = new Account(Name = 'testAccount');
        insert acc;
        Contact a =New Contact(); // creating new contact
            a.LastName='Sri';
            a.MailingCountry='INDIA';
            a.MailingCity='Mumbai';
            a.Email='abc@example.com';
            a.Phone='11111111';
            a.AccountID = acc.ID;
            a.Next_Follow_Up_Date__c = system.today();
        insert a;
                
        //Creating new task
        Task task1= new task();
            task1.Subject='Call';
            task1.status='Completed';
            task1.Whoid=a.id;
            task1.ActivityDate=Date.Today();
            task1.CallDisposition ='Negative';
            task1.FastCall__Call_Notes__c = 'abc';
            task_list.add(task1);
			
			Task task2= new task();
            task2.Subject='Call';
            task2.status='Completed';
            task2.Whoid=a.id;
            task2.ActivityDate=Date.Today();
            task2.CallDisposition ='Voice Mail';
            task2.FastCall__Call_Notes__c = 'abc';
            task_list.add(task2);
			
			Task task3= new task();
            task3.Subject='Call';
            task3.status='Completed';
            task3.Whoid=a.id;
            task3.ActivityDate=Date.Today();
            task3.CallDisposition ='No Response';
            task3.FastCall__Call_Notes__c = 'abc';
            task_list.add(task3);
			
			Task task4= new task();
            task4.Subject='Call';
            task4.status='Completed';
            task4.Whoid=a.id;
            task4.ActivityDate=Date.Today();           
            task4.FastCall__Call_Notes__c = 'abc';
            task_list.add(task4);
			
        insert task_list;
        // Updating existing contact 
        test.startTest();
        if(task1.CallDisposition == 'Voice Mail'){
            a.MailingCity = 'Pune';
            a.Next_Follow_Up_Date__c = system.today()+3;
            //a.ID = task1.whoID;
        }else if(task1.CallDisposition == 'Negative'){
            a.Contact_Status__c = 'Negative';
        }
        update a;
        l.add(a);
        //test.startTest();
        upsert l;
        test.stopTest();    

         
    }
}

Hope this helps.



Thanks
Varaprasad
@For Support: varaprasad4sfdc@gmail.com
 
Taresh Pandey 19Taresh Pandey 19
Thanks Prasad for quick response, I already tried that way but creating multiple tasks test record not helping. Please see following image
User-added image

let me share my complete code with you, I think that might help you to find actual problem
refer the following code please.
 
trigger TaskUpdate_Contact on Task (after delete, after insert, after undelete, after update) {
    
    Set<ID> ContactIds = new Set<ID>();
    
    //We only care about tasks linked to Contacts.
    
    String ContactPrefix = Contact.SObjectType.getDescribe().getKeyPrefix();
    
    //Add any Contact ids coming from the new data
    
    if(trigger.new!=null){
        for (Task t : Trigger.new) {
            if (t.WhoId!= null && string.valueof(t.WhoId).startsWith(ContactPrefix) ) {
                
                if(!ContactIds.contains(t.WhoId)){
                    //adding unique Contact ids since there can be many tasks with single Contact
                    ContactIds.add(t.WhoId);
                }
            }
        }
    }
    
    //Also add any Contact ids coming from the old data (deletes, moving an activity from one Contact to another)
    
    if(trigger.old!=null){
        for (Task t2 : Trigger.old) {
            if (t2.WhoId!= null && string.valueof(t2.WhoId).startsWith(ContactPrefix) )
            {
                if(!ContactIds.contains(t2.WhoId)){
                    //adding unique Contact ids since there can be many tasks with single Contact
                    ContactIds.add(t2.WhoId);
                }
            }
        }
    }
    
    if (ContactIds.size() > 0){
        
        List<Contact> ContactsWithTasks = [select id,Email_Count__c,(select id,ActivityDate from Tasks where Activity__c='Email' and Status='Completed') from Contact where Id IN : Contactids];
        
        List<Contact> ContactsWithTask = [select id,Call_Count__c,Call_Duration_Minutes__c,(select id,ActivityDate,CallDurationInSeconds from Tasks where Activity__c='Call'and Status='Completed') from Contact where Id IN : Contactids];
        
        List<Contact> ContactsUpdatable = new List<Contact>();
        List<Contact> ContactsUpdate = new List<Contact>();
        List<Contact> lastEmail = new List<Contact>();
        List<Contact> firstEmail = new List<Contact>();
        List<Contact> lastCall = new List<Contact>();
        List<Contact> firstCall = new List<Contact>();
        
        for(Contact L : ContactsWithTasks){
            L.Email_Count__c = L.Tasks.size();
            ContactsUpdatable.add(L);
        }
        if(ContactsUpdatable.size()>0){
            update ContactsUpdatable;
            //update all the Contacts with activity count
        }
        for(Contact L : ContactsWithTask){
            L.Call_Count__c = L.Tasks.size();
            ContactsUpdate.add(L);
        }
        if(ContactsUpdate.size()>0){
            update ContactsUpdate;
            //update all the Contacts with activity count
        }
        for(Contact ld : [Select Id,
        						 Name,
        						 Call_Duration_Minutes__c,(
        						 Select Id, 
		 								  Subject,
		 								  ActivityDate,Activity__c,
		 								  FastCall__Call_Notes__c,
		 								  CallDisposition,
		 								  CallDurationInSeconds 
		 								  from Tasks where Status='Completed' Order by ActivityDate DESC Limit 1
 						   		) 
                          		from Contact where Id IN : Contactids]){
        	for(task t:ld.tasks){
				if(t.Activity__c =='Call'){
					ld.Last_Call_Date__c = t.activitydate;
     				// ld.Call_Notes__c = t.FastCall__Call_Notes__c;
      				//ld.Call_Disposition__c= t.CallDisposition;
      				t.CallDurationInSeconds =  integer.valueOf(ld.Call_Duration_Minutes__c);
      				lastCall.add(ld);
      
  				}else{
                      ld.Last_Email_Date__c = t.activitydate;
                      lastEmail.add(ld);
                }
                		update lastCall;
                        update lastEmail;
            }
          }
        
        for(Contact ld : [Select Id, Name,Call_Duration_Minutes__c,
                          (Select Id, Subject,ActivityDate,Activity__c,CallDurationInSeconds from Tasks where Status='Completed' Order by ActivityDate ASC Limit 1) 
			  			  from Contact where Id IN : Contactids]){
		      for(task t:ld.tasks){
		          if(t.Activity__c =='Call'){
		              ld.First_Call_Date__c = t.activitydate;
		              firstCall.add(ld);
		          }else{
		              ld.First_Email_Date__c = t.activitydate;
		              firstEmail.add(ld);
		          }
		      }
		      update firstCall;
		      update firstEmail;
		}
    }
    //--------------------------------------------------------------------
    //This trigger is updating NextFollowUpDate of Contact according to Call Result of SalesPerson
    if(Trigger.isAfter){
    	if(Trigger.isInsert ||Trigger.isUpdate){
	    Set<ID> ContactIDis = new Set<ID>();
	      list<Contact> Con_logs = new list<Contact>();
	      for(Task tasklogs: trigger.new){
	            ContactIDs.add(tasklogs.WhoId);
	        }
	        for(Contact conlogs : [SELECT Id, 
	                      Name,
	                      Contact_Status__c,
	                      Next_Follow_Up_Date__c,(SELECT ID,
	                                      AccountId,
	                                      Activity__c,
	                                      CallDisposition,
	                                      CallObject,
	                                      CallType,
	                                      Contact_Name__c,
	                                      CreatedDate,
	                                      Subject,
	                                      WhatId,
	                                      WhoId FROM Tasks ///ORDER BY CallDisposition ASC NULLS LAST
	                                  )FROM Contact Where ID IN :ContactIDis ]){
	          try{
	              for(Task tasklogs : conlogs.Tasks){
	                if(tasklogs.CallDisposition == 'Do Not Disturb' || tasklogs.CallDisposition == 'Negative' ){
	                  conlogs.Contact_Status__c = 'Negative';
	                }else if(tasklogs.CallDisposition == 'Voice Mail'){
	                  conlogs.Next_Follow_Up_Date__c = System.today()+1;
	                }else if(tasklogs.CallDisposition == 'No Response' || tasklogs.CallDisposition == 'Person Unavailable' || tasklogs.CallDisposition == 'Person Busy'){
	                  conlogs.Next_Follow_Up_Date__c = System.today()+2;
	                }else{
	                  conlogs.Next_Follow_Up_Date__c = Null;
	                }
	              Con_logs.add(conlogs);
	              }
	          }catch(exception e){
	              system.debug('Got an exception');
	          }
	        }  
	          upsert Con_logs;
    	}
    }
}

you can see the test class in my question.


Regards'
Taresh