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