Skip to content

Commit 4ca3cc2

Browse files
When a exception occured in execution, the error message is transfered to the next executions. (#592)
* Update Helpers.cs * Whenever an exception is occured in an execution. Error message will be transfered to the next runs. --------- Co-authored-by: YogeshPraj <[email protected]>
1 parent 95c6340 commit 4ca3cc2

File tree

2 files changed

+35
-5
lines changed

2 files changed

+35
-5
lines changed

src/RulesEngine/HelperFunctions/Helpers.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,17 @@ internal static class Helpers
1818
internal static RuleFunc<RuleResultTree> ToResultTree(ReSettings reSettings, Rule rule, IEnumerable<RuleResultTree> childRuleResults, Func<object[], bool> isSuccessFunc, string exceptionMessage = "")
1919
{
2020
return (inputs) => {
21-
2221
var isSuccess = false;
2322
var inputsDict = new Dictionary<string, object>();
23+
string finalMessage = exceptionMessage;
2424
try
2525
{
2626
inputsDict = inputs.ToDictionary(c => c.Name, c => c.Value);
2727
isSuccess = isSuccessFunc(inputs.Select(c => c.Value).ToArray());
2828
}
2929
catch (Exception ex)
3030
{
31-
exceptionMessage = GetExceptionMessage($"Error while executing rule : {rule?.RuleName} - {ex.Message}", reSettings);
31+
finalMessage = GetExceptionMessage($"Error while executing rule : {rule?.RuleName} - {ex.Message}", reSettings);
3232
HandleRuleException(new RuleException(exceptionMessage,ex), rule, reSettings);
3333
isSuccess = false;
3434
}
@@ -38,11 +38,10 @@ internal static RuleFunc<RuleResultTree> ToResultTree(ReSettings reSettings, Rul
3838
Inputs = inputsDict,
3939
IsSuccess = isSuccess,
4040
ChildResults = childRuleResults,
41-
ExceptionMessage = exceptionMessage
41+
ExceptionMessage = finalMessage
4242
};
4343

4444
};
45-
4645
}
4746

4847
internal static RuleFunc<RuleResultTree> ToRuleExceptionResult(ReSettings reSettings, Rule rule,Exception ex)

test/RulesEngine.UnitTest/BusinessRuleEngineTest.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -836,7 +836,38 @@ public async Task ExecuteRule_RuntimeError_ShouldReturnAsErrorMessage()
836836
Assert.All(result, rule => Assert.StartsWith("Error while executing rule :", rule.ExceptionMessage));
837837
}
838838

839+
[Fact]
840+
public async Task ExecuteRule_RuntimeErrorInPreviousRun_ShouldReturnEmptyErrorMessage()
841+
{
842+
var workflow = new Workflow {
843+
WorkflowName = "TestWorkflow",
844+
Rules = new[] {
845+
new Rule {
846+
RuleName = "ruleWithRuntimeError",
847+
Expression = "input1.Country.ToLower() == \"india\""
848+
}
849+
}
850+
};
851+
852+
var re = new RulesEngine(new[] { workflow }, null);
853+
var input = new RuleTestClass {
854+
Country = null
855+
};
839856

857+
var result = await re.ExecuteAllRulesAsync("TestWorkflow", input);
858+
859+
Assert.NotNull(result);
860+
Assert.All(result, rule => Assert.False(rule.IsSuccess));
861+
Assert.All(result, rule => Assert.StartsWith("Error while executing rule :", rule.ExceptionMessage));
862+
863+
input.Country="india";
864+
result = await re.ExecuteAllRulesAsync("TestWorkflow", input);
865+
866+
Assert.NotNull(result);
867+
Assert.All(result, rule => Assert.True(rule.IsSuccess));
868+
Assert.All(result, rule => Assert.Empty(rule.ExceptionMessage));
869+
}
870+
840871
[Fact]
841872
public async Task ExecuteRule_RuntimeError_ThrowsException()
842873
{
@@ -1166,4 +1197,4 @@ public bool CheckExists(string str)
11661197
}
11671198

11681199
}
1169-
}
1200+
}

0 commit comments

Comments
 (0)