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');
}
}