public void CanReadMethods() { var condition = new ExpressionCondition("Person.IsMinor", "is true"); var action = new AssignAction("Person.Salutation", "To the parents of"); var rule = CreateTestRule(condition, action); _ruleSet.AddRule(rule); var engine = WFRuleEngine.Compile(_ruleSet); var person = new TestPerson { BirthDate = DateTime.Today }; _workingMemory.Add("Person", person); engine.Invoke(_workingMemory); Assert.AreEqual("To the parents of", person.Salutation); }
public void RuleSetIsValidIfRulesAreValid() { var rule = new Rule { Name = "First Rule", TopCondition = new LogicCondition { Operator = "all" } }; var action1 = new AssignAction { LeftHandSide = "Person.Salutation", Value = "Mr." }; var action2 = new AssignAction { LeftHandSide = "Person.Greeting", Value = "Hello" }; rule.AddAction(action1); rule.AddAction(action2); var rs = new RuleSet { Name = "Whatever" }; rs.AddInput("Person", typeof(TestPerson)); rs.AddRule(rule); Assert.IsTrue(rs.IsValid()); }
public void CanReadAndWriteProperties() { var condition = new ExpressionCondition("Person.Sex", "is", "Male"); var action = new AssignAction("Person.Salutation", "Mr."); Rule rule = CreateTestRule(condition, action); _ruleSet.AddRule(rule); var person = new TestPerson { Sex = "Male" }; var engine = WFRuleEngine.Compile(_ruleSet); _workingMemory.Add("Person", person); engine.Invoke(_workingMemory); Assert.AreEqual("Mr.", person.Salutation); }
public void InvokingWithIncorrectWorkingMemoryThrowsAnException() { var rule = new Rule { Name = "First Rule", TopCondition = new LogicCondition { Operator = "all" } }; var action1 = new AssignAction { LeftHandSide = "Person.Salutation", Value = "Mr." }; rule.AddAction(action1); var rs = new RuleSet { Name = "Whatever" }; rs.AddInput("Person", typeof(TestPerson)); rs.AddRule(rule); IRuleEngine engine = WFRuleEngine.Compile(rs); Assert.Throws(typeof(InvalidWorkflowException), delegate { engine.Invoke(_workingMemory); }); }
private Rule CreateTestRule(ExpressionCondition condition, AssignAction action) { var rule = new Rule { Name = "Rule 1", TopCondition = new LogicCondition { Operator = "all" } }; rule.TopCondition.AddCondition(condition); rule.AddAction(action); return rule; }
public void AddAction(AssignAction action) { Actions.Add(action); }