Example #1
0
        public void Rule_WithWhenClause_WhenClauseIsCallable()
        {
            var customer = new Customer ();
            var ruleEngineContext = new RuleEngineContext<Customer> ( customer );
            Predicate<IRuleEngineContext> whenClause = e => string.IsNullOrWhiteSpace ( ( ( RuleEngineContext<Customer> )e ).Subject.FirstName );

            var rule = new Rule ( "Name" ) { WhenClause = whenClause };
            var isNullOrWhiteSpace = rule.WhenClause ( ruleEngineContext );

            Assert.IsTrue ( isNullOrWhiteSpace );
        }
Example #2
0
        public void AddConstraint_WithNotNullContraint_ConstraintIsAdded()
        {
            var rule = PropertyRule.CreatePropertyRule<Customer, string> ( c => c.FirstName, "Rule 1" );
            rule.AddConstraint ( new NotNullConstraint () );

            var customer = new Customer ();
            var context = new RuleEngineContext<Customer> ( customer );

            var whenResult = rule.WhenClause ( context );
            Assert.IsFalse ( whenResult );
        }
Example #3
0
        public void EqualTo_ValueNotEqualToProperty_RuleFails()
        {
            var rule = PropertyRule.CreatePropertyRule<Customer, int> ( c => c.Age, "Rule 1" );
            var ruleBuilder = new PropertyRuleBuilder<RuleEngineContext<Customer>, Customer, int> ( rule );
            ruleBuilder.GreaterThan ( 15 );

            var customer = new Customer { Age = 10 };
            var context = new RuleEngineContext<Customer> ( customer );

            var whenResult = rule.WhenClause ( context );

            Assert.IsFalse ( whenResult );
        }
Example #4
0
        public void EqualTo_ValueEqualToProperty_RulePasses()
        {
            var rule = PropertyRule.CreatePropertyRule<Customer, int> ( c => c.Age, "Rule 1" );
            var ruleBuilder = new PropertyRuleBuilder<RuleEngineContext<Customer>, Customer, int> ( rule );
            ruleBuilder.EqualTo ( 5 );

            var customer = new Customer { Age = 5 };
            var context = new RuleEngineContext<Customer> ( customer );

            var whenResult = rule.WhenClause ( context );

            Assert.IsTrue ( whenResult );
        }
Example #5
0
        public void MaxLength_PropertyLengthIsLessThenMaxLength_RulePasses()
        {
            var rule = PropertyRule.CreatePropertyRule<Customer, string> ( c => c.FirstName, "Rule 1" );
            var ruleBuilder = new PropertyRuleBuilder<RuleEngineContext<Customer>, Customer, string> ( rule );
            ruleBuilder.MaxLength ( 5 );

            var customer = new Customer { FirstName = "Fred" };
            var context = new RuleEngineContext<Customer> ( customer );

            var whenResult = rule.WhenClause ( context );

            Assert.IsTrue ( whenResult );
        }
Example #6
0
        public void MaxLength_PropertyLengthIsGreaterThanMaxLength_RuleFails()
        {
            var rule = PropertyRule.CreatePropertyRule<Customer, string> ( c => c.FirstName, "Rule 1" );
            var ruleBuilder = new PropertyRuleBuilder<RuleEngineContext<Customer>, Customer, string> ( rule );
            ruleBuilder.MaxLength ( 5 );

            var customer = new Customer { FirstName = "123456" };
            var context = new RuleEngineContext<Customer> ( customer );

            var whenResult = rule.WhenClause ( context );

            Assert.IsFalse ( whenResult );
        }
Example #7
0
        public void LessThen_ValueIsGreaterThanProperty_RulePasses()
        {
            var rule = PropertyRule.CreatePropertyRule<Customer, int> ( c => c.Age, "Rule 1" );
            var ruleBuilder = new PropertyRuleBuilder<RuleEngineContext<Customer>, Customer, int> ( rule );
            ruleBuilder.LessThen ( 15 );

            var customer = new Customer { Age = 10 };
            var context = new RuleEngineContext<Customer> ( customer );

            var whenResult = rule.WhenClause ( context );

            Assert.IsTrue ( whenResult );
        }
Example #8
0
        public void InclusiveBetween_PropertyIsLessThenStartValue_RuleFails()
        {
            var rule = PropertyRule.CreatePropertyRule<Customer, int> ( c => c.Age, "Rule 1" );
            var ruleBuilder = new PropertyRuleBuilder<RuleEngineContext<Customer>, Customer, int> ( rule );
            ruleBuilder.InclusiveBetween ( 5, 15 );

            var customer = new Customer { Age = 1 };
            var context = new RuleEngineContext<Customer> ( customer );

            var whenResult = rule.WhenClause ( context );

            Assert.IsFalse ( whenResult );
        }
Example #9
0
        public void InclusiveBetween_PropertyInBetweenValues_RulePasses()
        {
            var rule = PropertyRule.CreatePropertyRule<Customer, int> ( c => c.Age, "Rule 1" );
            var ruleBuilder = new PropertyRuleBuilder<RuleEngineContext<Customer>, Customer, int> ( rule );
            ruleBuilder.InclusiveBetween ( 5, 15 );

            var customer = new Customer { Age = 10 };
            var context = new RuleEngineContext<Customer> ( customer );

            var whenResult = rule.WhenClause ( context );

            Assert.IsTrue ( whenResult );
        }
Example #10
0
        public void MatchesRegex_PropertyMatchesRegex_RulePasses()
        {
            var rule = PropertyRule.CreatePropertyRule<Customer, int> ( c => c.Age, "Rule 1" );
            var ruleBuilder = new PropertyRuleBuilder<RuleEngineContext<Customer>, Customer, int> ( rule );
            ruleBuilder.MatchesRegex ( "5" );

            var customer = new Customer { Age = 5 };
            var context = new RuleEngineContext<Customer> ( customer );

            var whenResult = rule.WhenClause ( context );

            Assert.IsTrue ( whenResult );
        }
        public void Constrain_WithAConstraint_AssignsConstraintToRule()
        {
            var rule = PropertyRule.CreatePropertyRule<Customer, string> ( c => c.FirstName, "Rule1" );
            var ruleBuilder = new PropertyRuleBuilder<RuleEngineContext<Customer>, Customer, string> ( rule );

            ruleBuilder.Constrain ( new NotNullConstraint () );

            var customer = new Customer { Age = 10 };
            var context = new RuleEngineContext<Customer> ( customer );

            var whenResult = rule.WhenClause ( context );

            Assert.IsFalse ( whenResult );
        }
Example #12
0
        public void Then_ProvidingAThenClauseOverrideToTheBuilder_RuleShouldHaveAThenClauseOverride()
        {
            var rule = new Rule ( "Rule1" );
            var ruleBuilder = new RuleBuilder<RuleEngineContext<Customer>, Customer> ( rule );
            ruleBuilder.When ( ( cust, ctxt ) => true ).Then ( ( cust, ctxt ) => cust.Age++ );

            var customer = new Customer { Age = 10 };
            var context = new RuleEngineContext<Customer> ( customer );

            foreach ( var clause in rule.ThenClauses )
            {
                clause ( context );
            }

            Assert.AreEqual ( 11, customer.Age );
        }
Example #13
0
        public void AddConstraint_WithNotNullContraint_ARuleViolationIsAdded()
        {
            var rule = PropertyRule.CreatePropertyRule<Customer, string> ( c => c.FirstName, "Rule 1" );
            rule.AddConstraint ( new NotNullConstraint () );
            rule.AutoValidate = true;

            var customer = new Customer ();
            var context = new RuleEngineContext<Customer> ( customer );

            rule.WhenClause ( context );
            foreach ( var elseThenClause in rule.ElseThenClauses )
            {
                elseThenClause ( context );
            }

            Assert.IsTrue ( context.RuleViolationReporter.Count () == 1, "No Rule Violation was created." );
        }
Example #14
0
        public void Rule_WithThenClauses_ThenClausesAreCallable()
        {
            var customer = new Customer ();
            var ruleEngineContext = new RuleEngineContext<Customer> ( customer );

            var rule = new Rule ( "Name" );

            Action<IRuleEngineContext> thenClause1 = e => ( ( Customer )e.Subject ).Age = 20;
            rule.AddThenClause ( thenClause1 );

            Action<IRuleEngineContext> thenClause2 = e => ( ( Customer )e.Subject ).Age++;
            rule.AddThenClause ( thenClause2 );

            foreach ( var clause in rule.ThenClauses )
            {
                clause ( ruleEngineContext );
            }

            Assert.AreEqual ( 21, customer.Age );
        }
Example #15
0
        public void When_WithAWhenFunction_AssignsWhenFunctionToRule()
        {
            var rule = new Rule ( "Rule1" );
            var ruleBuilder = new RuleBuilder<RuleEngineContext<Customer>, Customer> ( rule );
            ruleBuilder.When ( ( cust, ctxt ) => cust.Age < 20 );

            var customer = new Customer { Age = 10 };
            var context = new RuleEngineContext<Customer> ( customer );

            var lessThan20 = rule.WhenClause ( context );

            Assert.IsTrue ( lessThan20 );
        }
Example #16
0
        public void When_GivenAWhenPredicate_AssignsWhenPredicateToRule()
        {
            var rule = new Rule ( "Rule1" );
            var ruleBuilder = new RuleBuilder<RuleEngineContext<Customer>, Customer> ( rule );
            ruleBuilder.When ( c => c.Age < 20 );

            var customer = new Customer { Age = 10 };
            var context = new RuleEngineContext<Customer> ( customer );

            var lessThan20 = rule.WhenClause ( context );

            Assert.IsTrue ( lessThan20 );
        }