public void CanAddNestedLogicConditions()
 {
     LogicCondition lc1 = new LogicCondition { Operator = "any" };
     LogicCondition lc2 = new LogicCondition { Operator = "all" };
     var ec = new ExpressionCondition { LeftHandSide="Person.Age", Operator="is", RightHandSide=new List<string> { "18" } };
     lc1.AddCondition(ec);
     lc1.AddCondition(lc2);
     Assert.IsTrue(lc1.IsValid(_context));
 }
 public void IsInvalidIfAnyChildIsInvalid()
 {
     LogicCondition lc = new LogicCondition { Operator = "all" };
     var ec1 = new ExpressionCondition { LeftHandSide = "Person.Age", Operator = "is", RightHandSide = new List<string> { "18" } };
     var ec2 = new ExpressionCondition { LeftHandSide = "Whatever", Operator = "is", RightHandSide = new List<string> { "18" } };
     lc.AddCondition(ec1);
     lc.AddCondition(ec2);
     Assert.IsFalse(lc.IsValid(_context));
 }
 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 IsInvalidIfDeeplyNestedChildIsInvalid()
 {
     LogicCondition lc1 = new LogicCondition { Operator = "all" };
     LogicCondition lc2 = new LogicCondition { Operator = "any" };
     LogicCondition lc3 = new LogicCondition { Operator = "any" };
     var ok = new ExpressionCondition { LeftHandSide = "Person.Age", Operator = "is", RightHandSide = new List<string> { "18" } };
     var bad = new ExpressionCondition { LeftHandSide = "Whatever", Operator = "is", RightHandSide = new List<string> { "18" } };
     lc1.AddCondition(ok);
     lc1.AddCondition(lc2);
     lc2.AddCondition(ok);
     lc1.AddCondition(lc3);
     lc3.AddCondition(bad);
     Assert.IsFalse(lc1.IsValid(_context));
 }
        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 ConditionWithInvalidTargetIsInvalid()
 {
     var condition = new ExpressionCondition("Patient.Sex", "is", "Male");
     Assert.IsFalse(condition.IsValid(_context));
 }
 public void ConditionWithInvalidTargetMemberIsInvalid()
 {
     var condition = new ExpressionCondition("Person.Gender", "is", "Male");
     Assert.IsFalse(condition.IsValid(_context));
 }
 public void BooleanIsTrueConditionIsValid()
 {
     var condition = new ExpressionCondition("Person.IsMinor", "is true");
     Assert.IsTrue(condition.IsValid(_context));
 }
 public void BooleanWhateverConditionIsInvalid()
 {
     var condition = new ExpressionCondition("Person.IsMinor", "whatever");
     Assert.IsFalse(condition.IsValid(_context));
 }
 public void NumberRangeConditionWithOneRHSElementIsInvalid()
 {
     var condition = new ExpressionCondition("Person.Age", "is in the range", "18");
     Assert.IsFalse(condition.IsValid(_context));
 }
 public void DateIsNotInTheLastConditionIsValid()
 {
     var condition = new ExpressionCondition("Person.BirthDate", "is not in the last", "2", "months");
     Assert.IsTrue(condition.IsValid(_context));
 }
 public void StringContainsConditionIsValid()
 {
     var condition = new ExpressionCondition("Person.Sex", "contains", "Male");
     Assert.IsTrue(condition.IsValid(_context));
 }
 public void ConditionWithSimpleValueIsValid()
 {
     var condition = new ExpressionCondition("CompanyName", "is", "NextGen");
     Assert.IsTrue(condition.IsValid(_context));
 }
 public void StringConditionWithEmptyRHSIsInvalid()
 {
     var condition = new ExpressionCondition("Person.Sex", "is");
     Assert.IsFalse(condition.IsValid(_context));
 }
 public void StringConditionWithMoreThanOneRHSEntryIsInvalid()
 {
     var condition = new ExpressionCondition("Person.Sex", "is", "Male", "Female");
     Assert.IsFalse(condition.IsValid(_context));
 }
 public void RHSOfNumberConditionMustBeANumber()
 {
     var condition = new ExpressionCondition("Person.Age", "is", "whatever");
     Assert.IsFalse(condition.IsValid(_context));
 }
 public void OtherNumberConditionWithMoreThanOneRHSElementIsInvalid()
 {
     var condition = new ExpressionCondition("Person.Age", "is", "18", "19");
     Assert.IsFalse(condition.IsValid(_context));
 }
 public void NumberWhateverConditionIsInvalid()
 {
     var condition = new ExpressionCondition("Person.Age", "whatever", "18");
     Assert.IsFalse(condition.IsValid(_context));
 }
 public void ConditionWithMethodOnTargetIsValid()
 {
     var condition = new ExpressionCondition("Person.Age", "is",  "18");
     Assert.IsTrue(condition.IsValid(_context));
 }
 public void LeftHandSideWithTooManySegmentsIsInvalid()
 {
     var condition = new ExpressionCondition("Person.Spouse.Employer", "is", "NextGen");
     Assert.IsFalse(condition.IsValid(_context));
 }
 public void ConditionWithPropertyOnTargetIsValid()
 {
     var condition = new ExpressionCondition("Person.Sex", "is", "Male");
     Assert.IsTrue(condition.IsValid(_context));
 }
 public void NumberIsInTheRangeConditionIsValid()
 {
     var condition = new ExpressionCondition("Person.Age", "is in the range", "13", "19");
     Assert.IsTrue(condition.IsValid(_context));
 }
 public void DateIsBeforeConditionIsValid()
 {
     var condition = new ExpressionCondition("Person.BirthDate", "is before", "1/1/2001");
     Assert.IsTrue(condition.IsValid(_context));
 }
 public void NumberIsNotConditionIsValid()
 {
     var condition = new ExpressionCondition("Person.Age", "is not", "18");
     Assert.IsTrue(condition.IsValid(_context));
 }
 public void StringEndsWithConditionIsValid()
 {
     var condition = new ExpressionCondition("Person.Sex", "ends with", "Male");
     Assert.IsTrue(condition.IsValid(_context));
 }
 public void NumberIsGreaterThanConditionIsValid()
 {
     var condition = new ExpressionCondition("Person.Age", "is greater than", "18");
     Assert.IsTrue(condition.IsValid(_context));
 }
 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 StringIsNotConditionIsValid()
 {
     var condition = new ExpressionCondition("Person.Sex", "is not", "Male");
     Assert.IsTrue(condition.IsValid(_context));
 }
 public void StringWhateverConditionIsInvalid()
 {
     var condition = new ExpressionCondition("Person.Sex", "whatever", "Male");
     Assert.IsFalse(condition.IsValid(_context));
 }
        public void DateIsInTheRangeConditionRequiresTwoDates()
        {
            var condition1 = new ExpressionCondition("Person.BirthDate", "is in the range", "1/1/2001");
            Assert.IsFalse(condition1.IsValid(_context));

            var condition2 = new ExpressionCondition("Person.BirthDate", "is in the range", "1/1/2001", "2/29/2001");
            Assert.IsFalse(condition2.IsValid(_context));
        }