Example #1
0
        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 );
        }
Example #3
0
        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 );
        }