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 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 ); }
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(); }
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 ); }
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 ); }
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 ); }
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); }
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 ); }
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 ); }
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 ); }
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 ); }
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 ); }
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 ); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }