200 lines
6.6 KiB
C#
200 lines
6.6 KiB
C#
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT License.
|
|
|
|
using RulesEngine.Models;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Xunit;
|
|
|
|
namespace RulesEngine.UnitTest
|
|
{
|
|
[Trait("Category", "Unit")]
|
|
[ExcludeFromCodeCoverage]
|
|
public class TypedClassTests
|
|
{
|
|
public class Transazione
|
|
{
|
|
public static string StaticProperty { get; set; } = "Hello";
|
|
public List<Attore> Attori { get; set; } = new();
|
|
}
|
|
public class Attore
|
|
{
|
|
public Guid Id { get; internal set; }
|
|
public string Nome { get; internal set; }
|
|
public RuoloAttore RuoloAttore { get; internal set; }
|
|
}
|
|
|
|
public enum RuoloAttore
|
|
{
|
|
A,
|
|
B,
|
|
C
|
|
}
|
|
|
|
[Fact]
|
|
public async Task TypedClassTest()
|
|
{
|
|
Workflow workflow = new() {
|
|
WorkflowName = "Conferimento",
|
|
Rules = new Rule[] {
|
|
new() {
|
|
RuleName = "Attore Da",
|
|
Enabled = true,
|
|
ErrorMessage = "Attore Da Id must be defined",
|
|
SuccessEvent = "10",
|
|
RuleExpressionType = RuleExpressionType.LambdaExpression,
|
|
Expression = "transazione.Attori.Any(a => a.RuoloAttore == 1)",
|
|
},
|
|
new() {
|
|
RuleName = "Attore A",
|
|
Enabled = true,
|
|
ErrorMessage = "Attore A must be defined",
|
|
SuccessEvent = "10",
|
|
RuleExpressionType = RuleExpressionType.LambdaExpression,
|
|
Expression = "transazione.Attori != null",
|
|
},
|
|
}
|
|
};
|
|
var reSettings = new ReSettings() {
|
|
CustomTypes = new Type[] {
|
|
},
|
|
AutoRegisterInputType = false
|
|
};
|
|
var re = new RulesEngine(reSettings);
|
|
re.AddWorkflow(workflow);
|
|
|
|
var param = new Transazione {
|
|
Attori = new List<Attore>{
|
|
new Attore{
|
|
RuoloAttore = RuoloAttore.B,
|
|
|
|
},
|
|
new Attore {
|
|
RuoloAttore = RuoloAttore.C
|
|
}
|
|
}
|
|
|
|
};
|
|
|
|
var result = await re.ExecuteAllRulesAsync("Conferimento", new RuleParameter("transazione", param));
|
|
|
|
Assert.All(result, (res) => Assert.True(res.IsSuccess));
|
|
|
|
}
|
|
|
|
|
|
[Fact]
|
|
public async Task TypedClassInputSameNameAsTypeTest()
|
|
{
|
|
Workflow workflow = new() {
|
|
WorkflowName = "Conferimento",
|
|
Rules = new Rule[] {
|
|
new() {
|
|
RuleName = "Attore Da",
|
|
Enabled = true,
|
|
ErrorMessage = "Attore Da Id must be defined",
|
|
SuccessEvent = "10",
|
|
RuleExpressionType = RuleExpressionType.LambdaExpression,
|
|
Expression = "transazione.Attori.Any(a => a.RuoloAttore == 1)",
|
|
},
|
|
new() {
|
|
RuleName = "Attore A",
|
|
Enabled = true,
|
|
ErrorMessage = "Attore A must be defined",
|
|
SuccessEvent = "10",
|
|
RuleExpressionType = RuleExpressionType.LambdaExpression,
|
|
Expression = "transazione.Attori != null",
|
|
}
|
|
|
|
}
|
|
};
|
|
var reSettings = new ReSettings() {
|
|
CustomTypes = new Type[] {
|
|
typeof(Transazione)
|
|
}
|
|
};
|
|
var re = new RulesEngine(reSettings);
|
|
re.AddWorkflow(workflow);
|
|
|
|
var param = new Transazione {
|
|
Attori = new List<Attore>{
|
|
new Attore{
|
|
RuoloAttore = RuoloAttore.B,
|
|
|
|
},
|
|
new Attore {
|
|
RuoloAttore = RuoloAttore.C
|
|
}
|
|
}
|
|
|
|
};
|
|
|
|
var result = await re.ExecuteAllRulesAsync("Conferimento", new RuleParameter("Transazione", param));
|
|
|
|
Assert.All(result, (res) => Assert.True(res.IsSuccess));
|
|
|
|
}
|
|
|
|
|
|
[Fact]
|
|
public async Task TypedClassBothAccessibleTestWhenCaseInsensitive()
|
|
{
|
|
Workflow workflow = new() {
|
|
WorkflowName = "Conferimento",
|
|
Rules = new Rule[] {
|
|
new() {
|
|
RuleName = "Attore Da",
|
|
Enabled = true,
|
|
ErrorMessage = "Attore Da Id must be defined",
|
|
SuccessEvent = "10",
|
|
RuleExpressionType = RuleExpressionType.LambdaExpression,
|
|
Expression = "transazione.Attori.Any(a => a.RuoloAttore == 1)",
|
|
},
|
|
new() {
|
|
RuleName = "Attore A",
|
|
Enabled = true,
|
|
ErrorMessage = "Attore A must be defined",
|
|
SuccessEvent = "10",
|
|
RuleExpressionType = RuleExpressionType.LambdaExpression,
|
|
Expression = "transazione.Attori != null",
|
|
},
|
|
new() {
|
|
RuleName = "Static FieldTest",
|
|
Expression = "Transazione.StaticProperty == \"Hello\""
|
|
}
|
|
}
|
|
};
|
|
var reSettings = new ReSettings() {
|
|
CustomTypes = new Type[] {
|
|
typeof(Transazione)
|
|
},
|
|
IsExpressionCaseSensitive = true
|
|
};
|
|
var re = new RulesEngine(reSettings);
|
|
re.AddWorkflow(workflow);
|
|
|
|
var param = new Transazione {
|
|
Attori = new List<Attore>{
|
|
new Attore{
|
|
RuoloAttore = RuoloAttore.B,
|
|
|
|
},
|
|
new Attore {
|
|
RuoloAttore = RuoloAttore.C
|
|
}
|
|
}
|
|
|
|
};
|
|
|
|
var result = await re.ExecuteAllRulesAsync("Conferimento", new RuleParameter("transazione", param));
|
|
|
|
Assert.All(result, (res) => Assert.True(res.IsSuccess));
|
|
|
|
}
|
|
}
|
|
}
|