• Jon Rodiger
  • NEWBIE
  • 30 Points
  • Member since 2016

  • Chatter
    Feed
  • 0
    Best Answers
  • 1
    Likes Received
  • 0
    Likes Given
  • 3
    Questions
  • 0
    Replies
I am trying to update the status of a lead from a task trigger if a certain task is completed. When testing my code the execution always seems to stop when I try to update the lead. I think this may be because in my test class the tasks are not assigned to a lead, but when I tried creating a sample lead to use I think I made a mistake because the test then gets 0% code coverage.
trigger TaskScheduler on Task (after insert, after update) {
    // Iterate through all tasks
    for(Task t : Trigger.new){
        // Schedule follow up task for completed tasks depending on task subject
        if(t.Status == 'Completed'){    
            if(t.Subject == 'Send Initial Email'){
                // update lead status
                Lead myLead = new Lead(Id = t.whoId);
                myLead.Id = t.whoId;
                myLead.Status = 'Working';
                update myLead;
                // schedule new task
                Task newTask = new Task(Subject = 'Make Initial Phone Call', IsReminderSet = True, ReminderDateTime = System.now(), Activitydate = System.now().date().addDays(1), WhoId = t.WhoId, ownerId = t.ownerId);
                insert newTask;
            } else if(t.Subject == 'Make Initial Phone Call'){
                Task newTask = new Task(Subject = 'Send Email #2', IsReminderSet = True, ReminderDateTime = System.now(), Activitydate = System.now().date(), WhoId = t.WhoId, ownerId = t.ownerId);
                insert newTask;
            } else if(t.Subject == 'Send Email #2'){
                Task newTask = new Task(Subject = 'Make Phone Call #2', IsReminderSet = True, ReminderDateTime = System.now(), Activitydate = System.now().date().addDays(1), WhoId = t.WhoId, ownerId = t.ownerId);
                insert newTask;
            } else if(t.Subject == 'Make Phone Call #2'){
                Task newTask = new Task(Subject = 'Send Email #3', IsReminderSet = True, ReminderDateTime = System.now(), Activitydate = System.now().date(), WhoId = t.WhoId, ownerId = t.ownerId);
                insert newTask;
            } else if(t.Subject == 'Send Email #3'){
                Task newTask = new Task(Subject = 'Make Phone Call #3', IsReminderSet = True, ReminderDateTime = System.now(), Activitydate = System.now().date().addDays(1), WhoId = t.WhoId, ownerId = t.ownerId);
                insert newTask;
            // When final task is completed, change lead status to 'unresponsive'
            } else if(t.Subject == 'Make Phone Call #3'){
                // update lead status
                Lead myLead2 = new Lead(Id = t.whoId);             
                myLead2.Id = t.whoId;     
                myLead2.Status = 'Unresponsive';
                update myLead2;
            }
        }    
    }
}

My test class so far:
@isTest
private class TestTaskScheduler {
    public static testMethod void validateScheduler(){
        // Start Test
        System.Test.startTest();
        Lead myLead = new Lead();
        String userId = UserInfo.getUserId();
        List<Task> taskList = new List<Task>();
        for(integer i = 0; i < 6; i++){
            Task t = new Task();
            t.OwnerId = userId;
            t.Subject = 'Send Initial Email';
            t.priority= 'Normal';
            t.status = 'Completed';
            t.description = 'Testing';
            t.ActivityDate = system.now().Date();
            t.whoId = myLead.Id;
            taskList.add(t);
        }
        taskList[1].Subject = 'Make Initial Phone Call';
        taskList[2].Subject = 'Send Email #2';
        taskList[3].Subject = 'Make Phone Call #2';
        taskList[4].Subject = 'Send Email #3';
        taskList[5].Subject = 'Make Phone Call #3';
        insert taskList;
        System.Test.stopTest(); 
    }
}

Thanks!
I am finishing up my code and the last problem I haven't been able to solve is: when the final task for a lead is completed, I want the lead status to be updated. I have the task whoId field value, but I don't know how to use this value to access and update the lead that the task is related to. This is my code so far:
trigger Scheduler on Task (after insert, after update) {
    // Iterate through all tasks
    for(Task t : Trigger.new){
        // Schedule follow up task for completed tasks depending on task subjecct
        if(t.Status == 'Completed'){    
            if(t.Subject == 'Send Initial Email'){
                Task newTask = new Task(Subject = 'Make Initial Phone Call', IsReminderSet = True, ReminderDateTime = System.now()+1, Activitydate = System.now().date().addDays(1), WhoId = t.WhoId, ownerId = t.ownerId);
                insert newTask;
            } else if(t.Subject == 'Make Initial Phone Call'){
                Task newTask = new Task(Subject = 'Send Email #2', IsReminderSet = True, ReminderDateTime = System.now(), Activitydate = System.now().date(), WhoId = t.WhoId, ownerId = t.ownerId);
                insert newTask;
            } else if(t.Subject == 'Send Email #2'){
                Task newTask = new Task(Subject = 'Make Phone Call #2', IsReminderSet = True, ReminderDateTime = System.now(), Activitydate = System.now().date().addDays(1), WhoId = t.WhoId, ownerId = t.ownerId);
                insert newTask;
            } else if(t.Subject == 'Make Phone Call #2'){
                Task newTask = new Task(Subject = 'Send Email #3', IsReminderSet = True, ReminderDateTime = System.now(), Activitydate = System.now().date(), WhoId = t.WhoId, ownerId = t.ownerId);
                insert newTask;
            } else if(t.Subject == 'Send Email #3'){
                Task newTask = new Task(Subject = 'Make Phone Call #3', IsReminderSet = True, ReminderDateTime = System.now(), Activitydate = System.now().date().addDays(1), WhoId = t.WhoId, ownerId = t.ownerId);
                insert newTask;
            // When final task is completed, change lead status to 'unresponsive'
            } else if(t.Subject == 'Make Phone Call #3'){
                
                Lead myLead = [SELECT Id, Status FROM Lead WHERE Id = :t.whoId];       
                
                myLead.Status = 'Unresponsive';
                
                update myLead;
            }
        }    
    }
}

Any help would be greatly appreciated. Thank you!
I'm trying to write a trigger that schedules a new task for the same user that completed a specified task. This is my trigger so far and I am trying to test it, but I am not sure how to assign a completed task to a user and then check if a new task was created for that user.
trigger finTask on Task (after insert, after update) {
    // Iterate through all tasks
    for(Task t : Trigger.new){
        // Schedule follow up task for completed tasks
        if(t.Status == 'Completed'){
            if(t.Subject == 'Send Initial Email'){
                Task newTask = new Task(Subject = 'Make Initial Phone Call', IsReminderSet = True, ReminderDateTime = System.now()+1, WhoId = t.WhoId, ownerId = t.ownerId);
                insert newTask;
            } else if(t.Subject == 'Make Initial Phone Call'){
                //scheduleEmail2(t.OwnerId);
            } else if(t.Subject == 'Send Email #2'){
                //schedulePhone2(t.OwnerId);
            }
        }
    }
}
This is my test class so far
@isTest
private class TestTaskScheduler {
    public static testMethod void validateScheduler(){
    
    Test.startTest();
    
    String userId = UserInfo.getUserId();

    Task task = new Task();
        task.OwnerId = userId;
        task.Subject = 'Send Initial Email';
        task.priority= 'Normal';
        task.status = 'Completed';
        task.description = 'Testing';
        task.ActivityDate = system.now();
        insert task;
    Test.stopTest(); 
    }
}
Any help would be greatly appreciated. Thanks!
 
I am trying to update the status of a lead from a task trigger if a certain task is completed. When testing my code the execution always seems to stop when I try to update the lead. I think this may be because in my test class the tasks are not assigned to a lead, but when I tried creating a sample lead to use I think I made a mistake because the test then gets 0% code coverage.
trigger TaskScheduler on Task (after insert, after update) {
    // Iterate through all tasks
    for(Task t : Trigger.new){
        // Schedule follow up task for completed tasks depending on task subject
        if(t.Status == 'Completed'){    
            if(t.Subject == 'Send Initial Email'){
                // update lead status
                Lead myLead = new Lead(Id = t.whoId);
                myLead.Id = t.whoId;
                myLead.Status = 'Working';
                update myLead;
                // schedule new task
                Task newTask = new Task(Subject = 'Make Initial Phone Call', IsReminderSet = True, ReminderDateTime = System.now(), Activitydate = System.now().date().addDays(1), WhoId = t.WhoId, ownerId = t.ownerId);
                insert newTask;
            } else if(t.Subject == 'Make Initial Phone Call'){
                Task newTask = new Task(Subject = 'Send Email #2', IsReminderSet = True, ReminderDateTime = System.now(), Activitydate = System.now().date(), WhoId = t.WhoId, ownerId = t.ownerId);
                insert newTask;
            } else if(t.Subject == 'Send Email #2'){
                Task newTask = new Task(Subject = 'Make Phone Call #2', IsReminderSet = True, ReminderDateTime = System.now(), Activitydate = System.now().date().addDays(1), WhoId = t.WhoId, ownerId = t.ownerId);
                insert newTask;
            } else if(t.Subject == 'Make Phone Call #2'){
                Task newTask = new Task(Subject = 'Send Email #3', IsReminderSet = True, ReminderDateTime = System.now(), Activitydate = System.now().date(), WhoId = t.WhoId, ownerId = t.ownerId);
                insert newTask;
            } else if(t.Subject == 'Send Email #3'){
                Task newTask = new Task(Subject = 'Make Phone Call #3', IsReminderSet = True, ReminderDateTime = System.now(), Activitydate = System.now().date().addDays(1), WhoId = t.WhoId, ownerId = t.ownerId);
                insert newTask;
            // When final task is completed, change lead status to 'unresponsive'
            } else if(t.Subject == 'Make Phone Call #3'){
                // update lead status
                Lead myLead2 = new Lead(Id = t.whoId);             
                myLead2.Id = t.whoId;     
                myLead2.Status = 'Unresponsive';
                update myLead2;
            }
        }    
    }
}

My test class so far:
@isTest
private class TestTaskScheduler {
    public static testMethod void validateScheduler(){
        // Start Test
        System.Test.startTest();
        Lead myLead = new Lead();
        String userId = UserInfo.getUserId();
        List<Task> taskList = new List<Task>();
        for(integer i = 0; i < 6; i++){
            Task t = new Task();
            t.OwnerId = userId;
            t.Subject = 'Send Initial Email';
            t.priority= 'Normal';
            t.status = 'Completed';
            t.description = 'Testing';
            t.ActivityDate = system.now().Date();
            t.whoId = myLead.Id;
            taskList.add(t);
        }
        taskList[1].Subject = 'Make Initial Phone Call';
        taskList[2].Subject = 'Send Email #2';
        taskList[3].Subject = 'Make Phone Call #2';
        taskList[4].Subject = 'Send Email #3';
        taskList[5].Subject = 'Make Phone Call #3';
        insert taskList;
        System.Test.stopTest(); 
    }
}

Thanks!