When a case is inserted on any account put the latest case number on the account in latest case inserted field

Trigger

trigger CaseTrigger on Case (after insert) {
    if(trigger.isAfter && trigger.isInsert) {
        CaseTriggerHandler.updateLatestCaseOnAccount(trigger.new);
    }
}

Apex Class

public class CaseTriggerHandler {

    public static void updateLatestCaseOnAccount(List newCases) {
        
        Set accIds = new Set();
        Map accMap = new Map();
        
        for(Case cs: newCases) {
            if(cs.AccountId != null) {
            	accIds.add(cs.AccountId);   
            }
        }
        
        if(!accIds.isEmpty()) {
            accMap = New Map([SELECT Id, Latest_Case_Inserted__c FROM Account WHERE Id IN:accIds]);
        }

        for(Case cs : newCases) {
            if(cs.AccountId != null && accMap.containsKey(cs.AccountId)) {
                Account a = accMap.get(cs.AccountId);
                a.Latest_Case_Inserted__c = cs.CaseNumber;
            }
        }
        
        if(!accMap.isEmpty()) {
        	update accMap.values();            
        }
    }
}  

Apex Test Class

@isTest
private class CaseTriggerHandlerTest {

    @isTest
    static void testUpdateLatestCaseOnAccount() {
        // Create test data
        Account acc = new Account(Name = 'Test Account');
        insert acc;

        Case cs = new Case(
            AccountId = acc.Id,
            Subject = 'Test Case',
            Contact_Email__c = 'test@test.com'
        );
        insert cs;

        PracticeCaseTriggerHandler.updateLatestCaseOnAccount(new List{ cs });

        Account updatedAccount = [SELECT Id, Latest_Case_Inserted__c FROM Account WHERE Id = :acc.Id];

        System.assertEquals(cs.CaseNumber, updatedAccount.Latest_Case_Inserted__c,
                            'Latest_Case_Inserted__c field on Account should be updated correctly');

    }
}

Leave a Comment

Your email address will not be published. Required fields are marked *