public void ExecuteRules_WithDisabledRule_DisabledRuleIsNotRun() { var patient = new Patient { Name = new Name () }; var patientRuleCollection = new PatientRuleCollection (); patientRuleCollection.FirstNameCannotBeNull.Disable (); var ruleRun = false; var ruleBuilder = new RuleBuilder<RuleEngineContext<Patient>, Patient> ( patientRuleCollection.FirstNameCannotBeNull as Rule ); ruleBuilder.Then ( p => ruleRun = true ).ElseThen ( p => ruleRun = true ); var ruleEngine = new RuleEngine<Patient> ( patientRuleCollection ); var ruleEngineContext = new RuleEngineContext<Patient> ( patient ); ruleEngineContext.WorkingMemory.AddContextObject ( new Name () ); ruleEngine.ExecuteRules ( ruleEngineContext ); Assert.IsFalse ( ruleRun ); }
public void ThenClause_WithRuleCollection_CollectionRulesAreRun() { var rule = CollectionPropertyRule.CreateCollectionPropertyRule<Patient, IEnumerable<Address>> ( p => p.Addresses, "Rule 1" ); var addressRuleCollection = new AddressRuleCollection (); var ruleCalled = false; addressRuleCollection.NewRule ( () => addressRuleCollection.MyEmptyRule ).When ( c => ruleCalled = true ); rule.WithRuleCollection ( addressRuleCollection ); var patient = new Patient (); patient.Addresses.Add ( new Address ( null, null, null, null, null ) ); var ruleEngineContext = new RuleEngineContext<Patient> ( patient ); foreach ( var thenClause in rule.ThenClauses ) { thenClause ( ruleEngineContext ); } Assert.IsTrue ( ruleCalled ); }
public void ExecuteRules_GivenPatientRuleCollection_AllRulesRun() { var patient = new Patient { Name = new Name () }; var patientRuleCollection = new PatientRuleCollection (); var runRuleCount = 0; foreach ( var patientRule in patientRuleCollection ) { var ruleBuilder = new RuleBuilder<RuleEngineContext<Patient>, Patient> ( patientRule as Rule ); ruleBuilder.Then ( p => runRuleCount++ ).ElseThen ( p => runRuleCount++ ); } var ruleEngine = new RuleEngine<Patient> ( patientRuleCollection ); var ruleEngineContext = new RuleEngineContext<Patient> ( patient ); ruleEngineContext.WorkingMemory.AddContextObject ( new Name () ); ruleEngine.ExecuteRules ( ruleEngineContext ); Assert.AreEqual ( patientRuleCollection.Count (), runRuleCount ); }