Write a trigger that prevents records from being deleted if a certain condition is met

Trigger

trigger OppTrigger on Opportunity (before delete) {
    OppTriggerHandler.handleBeforeDelete(Trigger.old);
}

Apex Class

public class OppTriggerHandler {
    
    public static void handleBeforeDelete(List opportunities) {
        // Check if Opportunity Stage is 'Closed Won' and prevent deletion
        for (Opportunity opp : opportunities) {
            if (opp.StageName == 'Closed Won') {
                opp.addError('Opportunity cannot be deleted because Stage is Closed Won.');
            }
        }
    }
}

Apex Test Class

@isTest
private class OppTriggerTest {
    
    static testMethod void testPreventOpportunityDeletion() {
        // Create test opportunities
        Opportunity opp1 = new Opportunity(
            Name = 'Test Opp 1',
            StageName = 'Prospecting',
            CloseDate = Date.today() + 30
        );
        Opportunity opp2 = new Opportunity(
            Name = 'Test Opp 2',
            StageName = 'Closed Won',
            CloseDate = Date.today() + 15
        );
        
        insert new List{opp1, opp2};
        
        System.Test.startTest();
        
        // Attempt to delete records
        try {
            delete new List{opp1, opp2};
        } catch (DmlException e) {
            String expectedMessage = 'Opportunity cannot be deleted because Stage is Closed Won.';
            System.assertEquals(expectedMessage, e.getDmlMessage(0));
        }
        
        System.Test.stopTest();
    }
}

Leave a Comment

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