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 ); }
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 ); }
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 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 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 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 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 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 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 ); }
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." ); }
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 ); }
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 ); }
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 ); }