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

            ruleBuilder.Constrain ( null );
        }
Example #2
0
        public void Constrain_GivenNullConstraint_ThrowsArgumentException()
        {
            var rule        = PropertyRule.CreatePropertyRule <Customer, string> (c => c.FirstName, "Rule1");
            var ruleBuilder = new PropertyRuleBuilder <RuleEngineContext <Customer>, Customer, string> (rule);

            ruleBuilder.Constrain(null);
        }
        public void WithPrioroty_RulePriorityIsSet()
        {
            var rule = PropertyRule.CreatePropertyRule<Customer, string> ( c => c.FirstName, "Rule1" );
            var ruleBuilder = new PropertyRuleBuilder<RuleEngineContext<Customer>, Customer, string> ( rule );
            ruleBuilder.WithPriority ( 5 );

            Assert.AreEqual ( 5, rule.Priority );
        }
Example #4
0
        public void WithPrioroty_RulePriorityIsSet()
        {
            var rule        = PropertyRule.CreatePropertyRule <Customer, string> (c => c.FirstName, "Rule1");
            var ruleBuilder = new PropertyRuleBuilder <RuleEngineContext <Customer>, Customer, string> (rule);

            ruleBuilder.WithPriority(5);

            Assert.AreEqual(5, rule.Priority);
        }
        public void AddValidationStep()
        {
            var propValidationRule = A.Fake <IPropertyValidationRule <TestDataObject, int> >();
            var propValidationStep = A.Fake <IPropertyValidationStep <TestDataObject, int> >();

            var builder = new PropertyRuleBuilder <TestDataObject, int>(propValidationRule);

            builder.AddValidationStep(propValidationStep);

            A.CallTo(() => propValidationRule.AddValidationStep(propValidationStep)).MustHaveHappenedOnceExactly();
        }
Example #6
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 #7
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 #8
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 #9
0
        public PropertyRuleBuilder <TEntity> WithRule(string rule, string name, string description = "")
        {
            if (string.IsNullOrEmpty(rule))
            {
                throw new ArgumentNullException(rule, string.Format("Rule is provided as Null for entity Type {0} in Rule Engine {1}",
                                                                    _context.RootEntityType, _context.RuleEngineId));
            }

            var ruleBuilder = PropertyRuleBuilder <TEntity> .Create(_context, rule, _ruleparser, _propertyparser, this, name, description);

            _propertyRuleBuilders.Add(ruleBuilder);
            return(ruleBuilder);
        }
Example #10
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 #11
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 #12
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 #13
0
        public void LessThenOrEqualTo_ValueIsEqualToProperty_RulePasses ()
        {
            var rule = PropertyRule.CreatePropertyRule<Customer, int> ( c => c.Age, "Rule 1" );
            var ruleBuilder = new PropertyRuleBuilder<RuleEngineContext<Customer>, Customer, int> ( rule );
            ruleBuilder.LessThenOrEqualTo ( 10 );

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

            var whenResult = rule.WhenClause ( context );

            Assert.IsTrue ( whenResult );
        }
Example #14
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 #15
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 #17
0
        public IStartPropertyRuleBuilder <T, TProperty> RuleFor <TProperty>(Expression <Func <T, TProperty> > propertyExpression)
        {
            Ensure.IsNotNull(propertyExpression, nameof(propertyExpression));
            Ensure.That(propertyExpression.IsPropertyOf(), nameof(propertyExpression),
                        $"{nameof(propertyExpression)} must be a property in class {typeof(T).Name}");

            var rule = new PropertyValidationRule <T, TProperty>(propertyExpression);

            _rules.Add(rule);

            var ruleBuilder = new PropertyRuleBuilder <T, TProperty>(rule);

            return(ruleBuilder);
        }
Example #18
0
        public void MeetsSpecification_PropertyDoesNotMeetSpecification_RuleFails()
        {
            var rule        = PropertyRule.CreatePropertyRule <Customer, int> (c => c.Age, "Rule 1");
            var ruleBuilder = new PropertyRuleBuilder <RuleEngineContext <Customer>, Customer, int> (rule);

            ruleBuilder.MeetsSpecification(new TestSpecification());

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

            var whenResult = rule.WhenClause(context);

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

            ruleBuilder.ExclusiveBetween(5, 15);

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

            var whenResult = rule.WhenClause(context);

            Assert.IsTrue(whenResult);
        }
Example #20
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 #21
0
        public void ExclusiveBetween_PropertyIsGreaterThanEndValue_RuleFails()
        {
            var rule        = PropertyRule.CreatePropertyRule <Customer, int> (c => c.Age, "Rule 1");
            var ruleBuilder = new PropertyRuleBuilder <RuleEngineContext <Customer>, Customer, int> (rule);

            ruleBuilder.ExclusiveBetween(5, 15);

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

            var whenResult = rule.WhenClause(context);

            Assert.IsFalse(whenResult);
        }
Example #22
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 #23
0
        public void MatchesRegex_PropertyDoesNotMatchRegex_RuleFails()
        {
            var rule        = PropertyRule.CreatePropertyRule <Customer, int> (c => c.Age, "Rule 1");
            var ruleBuilder = new PropertyRuleBuilder <RuleEngineContext <Customer>, Customer, int> (rule);

            ruleBuilder.MatchesRegex("6");

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

            var whenResult = rule.WhenClause(context);

            Assert.IsFalse(whenResult);
        }
Example #24
0
        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 #25
0
        public void MinLength_PropertyLengthIsEqualToMaxLength_RulePasses()
        {
            var rule        = PropertyRule.CreatePropertyRule <Customer, string> (c => c.FirstName, "Rule 1");
            var ruleBuilder = new PropertyRuleBuilder <RuleEngineContext <Customer>, Customer, string> (rule);

            ruleBuilder.MinLength(5);

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

            var whenResult = rule.WhenClause(context);

            Assert.IsTrue(whenResult);
        }