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) 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 +}