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
Abiola Enifeni 23Abiola Enifeni 23 

Apex Trigger Counter

Hi Guys, 

Please could someone be so kind to help me with the Test Class to the Apex Trigger below;
 APEX TRIGGER:
Trigger SOSPCall_Counter on Task (after insert) {  
Set<Id> setClosedTaskAccountIds = new Set<Id>();
List<Account> listAccountUpdate = new List<Account>();
List<Account> listClosedTaskAccounts = new List<Account>();
List<Account> listUpdatedTaskAccounts = new List<Account>();
List<Account> listUpdatedAccounts = new List<Account>();

if(Trigger.IsAfter){
    if(Trigger.IsInsert  || Trigger.isUpdate) {
        for(Task t: Trigger.new) {
            if(String.valueOf(t.WhatId).startsWithIgnoreCase('001')) {
                if(t.Status.equalsIgnoreCase('Completed')){
                    setClosedTaskAccountIds.add(t.WhatId);
                    System.debug('@@@@Inside Completed@@@'+setClosedTaskAccountIds);
                }
               
                if(Trigger.IsUpdate){
                    if(Trigger.oldMap.get(t.Id).WhatId != t.WhatId){
                        if(t.Status.equalsIgnoreCase('Completed')){
                            
                            setClosedTaskAccountIds.add(Trigger.oldMap.get(t.Id).WhatId );
                            System.debug('@@@Inside Update Closed@@@'+setClosedTaskAccountIds);
                        }
                        
                    }
                }
            }
        }
    }
    
    
         
    listClosedTaskAccounts =[SELECT Id, Left_Message__c, RecordTypeId, Patient_Status__c,(Select Status From Tasks Where Status = 'Completed' AND Call_Reason__c = 'Left Message' )  
                             FROM Account 
                             WHERE Id =:setClosedTaskAccountIds
                             AND Patient_Status__c = 'Eligible'];

    System.debug('@@@@ListClosedTaskAccounts'+listClosedTaskAccounts );

    try{
        System.debug('@@@@listAccountUpdate'+listAccountUpdate);
        update listAccountUpdate;
    }catch(System.Exception e){
        System.debug('@@@error'+e.getMessage());
    }
    
    
     listUpdatedTaskAccounts =[SELECT Id, Left_Message__c, RecordTypeId, Eligibility_Date__c,Patient_Status__c, (Select Status From Tasks Where Status = 'Completed' AND Call_Reason__c = 'Left Message' )  
                             FROM Account 
                             WHERE Id =:setClosedTaskAccountIds
                             ];
    
    
    for(Account a : listUpdatedTaskAccounts)        
    {
     List<Task> ltsk = a.Tasks;
        if ((a.Left_Message__c <= 2) && (a.Patient_Status__c == 'Eligible'))  {
            a.Left_Message__c = a.Left_Message__c + 1;
            system.debug('ltsk.size()  line 67 ' + ltsk.size());
            system.debug('a.Patient_Status__c  line 68 ' + a.Patient_Status__c);
            system.debug('a.Left_Message__c    line 69 ' + a.Left_Message__c);
        }
        if ((a.Left_Message__c > 2) && (a.Patient_Status__c == 'Eligible'))  {
            a.Left_Message__c = 0;
            a.Patient_Status__c = 'Non-Responsive Member';
            system.debug('ltsk.size()  line 74 ' + ltsk.size());
            system.debug('a.Patient_Status__c  line 75 ' + a.Patient_Status__c);
            system.debug('a.Left_Message__c    line 76 ' + a.Left_Message__c);
        }
    update listUpdatedTaskAccounts;
    System.debug('***LOOK MA WE MADE IT***Update happened');
          
}


}

TEST CLASS
@isTest
private class SOSPCall_CounterTest{
    
  @isTest
  static void setupTestData(){
    Account acc = new Account(LastName = 'LastName870', Patient_Status__c = 'Eligible');
    Insert acc; 
      
    Task tsk = new Task(Status = 'Completed', Call_Reason__c = 'Left Message', Subject = 'This is a Test', WhatId = acc.Id);
    Insert tsk;  

  }
  static testMethod void test_TaskTrigger(){
   test.startTest();
    List<Account> account1_Obj  =  [SELECT Id,LastName,Patient_Status__c,Left_Message__c from Account];
    System.assertEquals(1,account1_Obj.size());  
    Task task_Obj = new Task(Status = 'Completed', Subject = 'This is a Test', Call_Reason__c = 'Left Message');
    Insert task_Obj; 
   test.stopTest();
  }
}

for some reasons oblivious to me. the Test Class is not working.
Nicolas KadisNicolas Kadis
You need to change the @itTest above your setupTestData() method to @TestSetup:
@TestSetup
static void setupTestData(){

Hope that helps :)

Nicolas Kadis​​​​​​​