From a796094fa1000ebd7014ab99d10b6a8860b15aca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ta=C5=9Fk=C4=B1n=20=C3=96zdemir?= Date: Fri, 1 Mar 2024 11:16:12 +0300 Subject: [PATCH 1/2] Update Helpers.cs --- src/RulesEngine/HelperFunctions/Helpers.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/RulesEngine/HelperFunctions/Helpers.cs b/src/RulesEngine/HelperFunctions/Helpers.cs index 481ecc2b..b30e3cf0 100644 --- a/src/RulesEngine/HelperFunctions/Helpers.cs +++ b/src/RulesEngine/HelperFunctions/Helpers.cs @@ -18,9 +18,9 @@ internal static class Helpers internal static RuleFunc ToResultTree(ReSettings reSettings, Rule rule, IEnumerable childRuleResults, Func isSuccessFunc, string exceptionMessage = "") { return (inputs) => { - var isSuccess = false; var inputsDict = new Dictionary(); + string finalMessage = exceptionMessage; try { inputsDict = inputs.ToDictionary(c => c.Name, c => c.Value); @@ -28,7 +28,7 @@ internal static RuleFunc ToResultTree(ReSettings reSettings, Rul } catch (Exception ex) { - exceptionMessage = GetExceptionMessage($"Error while executing rule : {rule?.RuleName} - {ex.Message}", reSettings); + finalMessage = GetExceptionMessage($"Error while executing rule : {rule?.RuleName} - {ex.Message}", reSettings); HandleRuleException(new RuleException(exceptionMessage,ex), rule, reSettings); isSuccess = false; } @@ -38,11 +38,10 @@ internal static RuleFunc ToResultTree(ReSettings reSettings, Rul Inputs = inputsDict, IsSuccess = isSuccess, ChildResults = childRuleResults, - ExceptionMessage = exceptionMessage + ExceptionMessage = finalMessage }; }; - } internal static RuleFunc ToRuleExceptionResult(ReSettings reSettings, Rule rule,Exception ex) From c69cb5df1e10ce735807e04dbf0880ec58b2a446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ta=C5=9Fk=C4=B1n=20=C3=96zdemir?= Date: Fri, 1 Mar 2024 11:31:06 +0300 Subject: [PATCH 2/2] Whenever an exception is occured in an execution. Error message will be transfered to the next runs. --- .../BusinessRuleEngineTest.cs | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/test/RulesEngine.UnitTest/BusinessRuleEngineTest.cs b/test/RulesEngine.UnitTest/BusinessRuleEngineTest.cs index d27d6cd0..c2414b8b 100644 --- a/test/RulesEngine.UnitTest/BusinessRuleEngineTest.cs +++ b/test/RulesEngine.UnitTest/BusinessRuleEngineTest.cs @@ -836,7 +836,38 @@ public async Task ExecuteRule_RuntimeError_ShouldReturnAsErrorMessage() Assert.All(result, rule => Assert.StartsWith("Error while executing rule :", rule.ExceptionMessage)); } + [Fact] + public async Task ExecuteRule_RuntimeErrorInPreviousRun_ShouldReturnEmptyErrorMessage() + { + var workflow = new Workflow { + WorkflowName = "TestWorkflow", + Rules = new[] { + new Rule { + RuleName = "ruleWithRuntimeError", + Expression = "input1.Country.ToLower() == \"india\"" + } + } + }; + + var re = new RulesEngine(new[] { workflow }, null); + var input = new RuleTestClass { + Country = null + }; + var result = await re.ExecuteAllRulesAsync("TestWorkflow", input); + + Assert.NotNull(result); + Assert.All(result, rule => Assert.False(rule.IsSuccess)); + Assert.All(result, rule => Assert.StartsWith("Error while executing rule :", rule.ExceptionMessage)); + + input.Country="india"; + result = await re.ExecuteAllRulesAsync("TestWorkflow", input); + + Assert.NotNull(result); + Assert.All(result, rule => Assert.True(rule.IsSuccess)); + Assert.All(result, rule => Assert.Empty(rule.ExceptionMessage)); + } + [Fact] public async Task ExecuteRule_RuntimeError_ThrowsException() { @@ -1166,4 +1197,4 @@ public bool CheckExists(string str) } } -} \ No newline at end of file +}