From 9a0ee47197748b99bc409cec854770b20ae713be Mon Sep 17 00:00:00 2001 From: Mitch Spano Date: Thu, 17 Jul 2025 21:46:43 -0500 Subject: [PATCH] Enhance FormulaFilter and test classes for improved evaluation handling - Update FormulaFilter to explicitly check for true in evaluation condition. - Add test case to handle scenarios where formula evaluation results in null. - Modify test classes to run in parallel for better performance. --- .../main/default/classes/FormulaFilter.cls | 2 +- .../default/classes/FormulaFilterTest.cls | 29 ++++++++++++++++++- .../classes/TriggerActionFlowAddErrorTest.cls | 2 +- .../TriggerActionFlowClearBypassTest.cls | 2 +- .../TriggerActionFlowIsBypassedTest.cls | 2 +- 5 files changed, 32 insertions(+), 5 deletions(-) diff --git a/trigger-actions-framework/main/default/classes/FormulaFilter.cls b/trigger-actions-framework/main/default/classes/FormulaFilter.cls index 842eda5..e106af9 100644 --- a/trigger-actions-framework/main/default/classes/FormulaFilter.cls +++ b/trigger-actions-framework/main/default/classes/FormulaFilter.cls @@ -103,7 +103,7 @@ global class FormulaFilter { ); toProcess.newSobject = record; toProcess.oldSobject = recordPrior; - if ((Boolean) fx.evaluate(toProcess)) { + if ((Boolean) fx.evaluate(toProcess) == true) { result.triggerNew.add(record); result.triggerOld.add(recordPrior); } diff --git a/trigger-actions-framework/main/default/classes/FormulaFilterTest.cls b/trigger-actions-framework/main/default/classes/FormulaFilterTest.cls index 478d9be..37fa7a0 100644 --- a/trigger-actions-framework/main/default/classes/FormulaFilterTest.cls +++ b/trigger-actions-framework/main/default/classes/FormulaFilterTest.cls @@ -16,7 +16,7 @@ @SuppressWarnings( 'PMD.ApexUnitTestClassShouldHaveRunAs, PMD.AvoidGlobalModifier' ) -@IsTest +@IsTest(IsParallel=true) global class FormulaFilterTest { private static final String ACCOUNT_SOBJECT_NAME = 'Account'; private static final String EXCEPTION_SHOULD_BE_THROWN = 'An exception should be thrown'; @@ -327,6 +327,33 @@ global class FormulaFilterTest { ); } + @IsTest + private static void formulaEvaluatingToNullShouldBeTreatedAsFalse() { + triggerNew[1].Description = 'example 1'; + configuration.Entry_Criteria__c = 'CONTAINS(record.Description, "example")'; + FormulaFilter filter = new FormulaFilter( + configuration, + TriggerOperation.BEFORE_UPDATE, + ACCOUNT_SOBJECT_NAME + ); + + FormulaFilter.Result result = filter.filterByEntryCriteria( + triggerNew, + triggerOld + ); + + System.Assert.areEqual( + 1, + result.triggerNew.size(), + 'Only 1 record should be processed when CONTAINS evaluates to null for the first record' + ); + System.Assert.areEqual( + 1, + result.triggerOld.size(), + 'Only 1 record should be processed when CONTAINS evaluates to null for the first record' + ); + } + @SuppressWarnings('PMD.ApexDoc') global class AccountTriggerRecord extends TriggerRecord { global Account record { diff --git a/trigger-actions-framework/main/default/classes/TriggerActionFlowAddErrorTest.cls b/trigger-actions-framework/main/default/classes/TriggerActionFlowAddErrorTest.cls index 870a4f7..9f6a408 100644 --- a/trigger-actions-framework/main/default/classes/TriggerActionFlowAddErrorTest.cls +++ b/trigger-actions-framework/main/default/classes/TriggerActionFlowAddErrorTest.cls @@ -15,7 +15,7 @@ */ @SuppressWarnings('PMD.ApexDoc, PMD.ApexUnitTestClassShouldHaveRunAs') -@IsTest +@IsTest(IsParallel=true) private class TriggerActionFlowAddErrorTest { private static final String MY_STRING = 'MY_STRING'; private static final String NAME = 'Name'; diff --git a/trigger-actions-framework/main/default/classes/TriggerActionFlowClearBypassTest.cls b/trigger-actions-framework/main/default/classes/TriggerActionFlowClearBypassTest.cls index aec67e1..07dfd44 100644 --- a/trigger-actions-framework/main/default/classes/TriggerActionFlowClearBypassTest.cls +++ b/trigger-actions-framework/main/default/classes/TriggerActionFlowClearBypassTest.cls @@ -15,7 +15,7 @@ */ @SuppressWarnings('PMD.ApexDoc, PMD.ApexUnitTestClassShouldHaveRunAs') -@IsTest +@IsTest(IsParallel=true) private class TriggerActionFlowClearBypassTest { private static final String MY_STRING = 'MY_STRING'; private static List requests = new List(); diff --git a/trigger-actions-framework/main/default/classes/TriggerActionFlowIsBypassedTest.cls b/trigger-actions-framework/main/default/classes/TriggerActionFlowIsBypassedTest.cls index 8a0bd6d..fda22cd 100644 --- a/trigger-actions-framework/main/default/classes/TriggerActionFlowIsBypassedTest.cls +++ b/trigger-actions-framework/main/default/classes/TriggerActionFlowIsBypassedTest.cls @@ -15,7 +15,7 @@ */ @SuppressWarnings('PMD.ApexDoc, PMD.ApexUnitTestClassShouldHaveRunAs') -@IsTest +@IsTest(IsParallel=true) private class TriggerActionFlowIsBypassedTest { private static final String MY_STRING = 'MY_STRING'; private static List requests = new List();