예제 #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);
        }
예제 #2
0
        /// <inheritdoc/>
        public void WithRuleCollection <T> (IRuleCollection <T> ruleCollection, IRuleSelector ruleSelector = null)
        {
            _ruleSelector = ruleSelector;
            var ruleEngine = new RuleEngine <T> (ruleCollection);

            _executeRules = ctx => ruleEngine.ExecuteRules(ctx);
        }
예제 #3
0
        public void ExecuteRuleSetRules_GivenRuleSet_OnlyRulesInRuleSetAreRun()
        {
            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, new SelectAllRulesInRuleSetSelector(patientRuleCollection.PatientNameRuleSet));

            ruleEngineContext.WorkingMemory.AddContextObject(new Name());

            ruleEngine.ExecuteRules(ruleEngineContext);

            Assert.AreEqual(patientRuleCollection.PatientNameRuleSet.Count(), runRuleCount);
        }
예제 #4
0
        public void Should_Apply_all_the_Rule_and_execute()
        {
            SpecificationScanner.ScanSpecificationInAssembly <CustomerSpecification>();
            IRuleEngine ruleEngine = new RuleEngine();

            ruleEngine.ExecuteRules <Customer>(new Customer {
                PurchasedAmount = 100001
            }).customerType.Should().Be(CustomerType.Premium);
        }
예제 #5
0
        /// <inheritdoc/>
        public override bool IsCompliant(object propertyValue, IRuleEngineContext ruleEngineContext)
        {
            var propertyRuleEngineContext = new RuleEngineContext <TProperty> (
                ( TProperty )propertyValue, ruleEngineContext.RuleViolationReporter, _ruleSelector, ruleEngineContext.NameProvider, ruleEngineContext);

            propertyRuleEngineContext.WorkingMemory.AddContextObject(ruleEngineContext.Subject);
            var ruleEngine = new RuleEngine <TProperty> (_ruleCollection);
            var result     = ruleEngine.ExecuteRules(propertyRuleEngineContext);

            return(!result.HasRuleViolation);
        }
        public void ExecuteRules_Duplicate_HasRuleViolations()
        {
            var payorCoverageTypeMock = new Mock <PayorCoverageCacheType>();

            payorCoverageTypeMock.SetupGet(pct => pct.WellKnownName).Returns("Test");

            var payorCoverageCache = new PayorCoverageCache(
                new Mock <Patient>().Object,
                new Mock <PayorCache>().Object,
                new DateRange(DateTime.Now, null),
                "12345",
                new PayorSubscriberCache(
                    new Address(
                        "Test",
                        null,
                        "City",
                        new Mock <CountyArea>().Object,
                        new Mock <StateProvince>().Object,
                        new Mock <Country>().Object,
                        new PostalCode("12345")),
                    null,
                    new Mock <AdministrativeGender>().Object,
                    new PersonName(string.Empty, "Fred", null, "Savage", null),
                    new Mock <PayorSubscriberRelationshipCacheType>().Object),
                payorCoverageTypeMock.Object);

            var repositoryMock = new Mock <IPayorCoverageCacheRepository>();

            repositoryMock.Setup(
                rep => rep.AnyPayorCoverageTypeInEffectiveDateRange(It.IsAny <long>(), It.IsAny <long>(), It.IsAny <PayorCoverageCacheType>(), It.IsAny <DateRange>())).Returns(
                true);
            var ruleCollection = new PayorCoverageCacheRuleCollection(repositoryMock.Object);
            var ruleEngine     = new RuleEngine <PayorCoverageCache>(ruleCollection);

            var ruleContext = new RuleEngineContext <PayorCoverageCache>(payorCoverageCache);

            ruleContext.WorkingMemory.AddContextObject(payorCoverageCache.PayorCoverageCacheType);
            ruleContext.WorkingMemory.AddContextObject(payorCoverageCache.EffectiveDateRange);

            var results = ruleEngine.ExecuteRules(ruleContext);

            Assert.IsTrue(results.HasRuleViolation);
        }
        public void ExecuteRules_Duplicate_HasRuleViolations()
        {
            var payorCoverageTypeMock = new Mock<PayorCoverageCacheType>();
            payorCoverageTypeMock.SetupGet(pct => pct.WellKnownName).Returns("Test");

            var payorCoverageCache = new PayorCoverageCache(
                new Mock<Patient>().Object,
                new Mock<PayorCache>().Object,
                new DateRange(DateTime.Now, null),
                "12345",
                new PayorSubscriberCache(
                    new Address(
                        "Test",
                        null,
                        "City",
                        new Mock<CountyArea>().Object,
                        new Mock<StateProvince>().Object,
                        new Mock<Country>().Object,
                        new PostalCode("12345")),
                    null,
                    new Mock<AdministrativeGender>().Object,
                    new PersonName(string.Empty, "Fred", null, "Savage", null),
                    new Mock<PayorSubscriberRelationshipCacheType>().Object),
                payorCoverageTypeMock.Object);

            var repositoryMock = new Mock<IPayorCoverageCacheRepository>();
            repositoryMock.Setup(
                rep => rep.AnyPayorCoverageTypeInEffectiveDateRange(It.IsAny<long>(), It.IsAny<long>(), It.IsAny<PayorCoverageCacheType>(), It.IsAny<DateRange>())).Returns(
                    true);
            var ruleCollection = new PayorCoverageCacheRuleCollection(repositoryMock.Object);
            var ruleEngine = new RuleEngine<PayorCoverageCache>(ruleCollection);

            var ruleContext = new RuleEngineContext<PayorCoverageCache>(payorCoverageCache);
            ruleContext.WorkingMemory.AddContextObject(payorCoverageCache.PayorCoverageCacheType);
            ruleContext.WorkingMemory.AddContextObject(payorCoverageCache.EffectiveDateRange);

            var results = ruleEngine.ExecuteRules(ruleContext);

            Assert.IsTrue(results.HasRuleViolation);
        }
예제 #8
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 );
        }
예제 #9
0
        private bool CheckSkip(TestAssessmentRuleCollection assessmentRuleCollection, IItemSkippingRule rule, ItemInstance itemInstance)
        {
            var ruleEngine = new RuleEngine <AssessmentInstance>(assessmentRuleCollection, new RuleProcessor());

            var assessmentInstance = Substitute.For <AssessmentInstance>();

            var ruleEngineContext = new RuleEngineContext <AssessmentInstance>(
                assessmentInstance,
                new SingleRuleSelector(rule));

            var skippingContext = new SkippingContext();

            ruleEngineContext
            .WorkingMemory
            .AddContextObject(itemInstance, itemInstance.ItemDefinitionCode);
            ruleEngineContext.WorkingMemory.AddContextObject(skippingContext);

            ruleEngine.ExecuteRules(ruleEngineContext);


            return(skippingContext.SkippedItemDefinitions.Any( ));
        }
예제 #10
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 );
        }
예제 #11
0
 public void Should_Apply_all_the_Rule_and_execute()
 {
     SpecificationScanner.ScanSpecificationInAssembly<CustomerSpecification>();
     IRuleEngine ruleEngine = new RuleEngine();
     ruleEngine.ExecuteRules<Customer>(new Customer { PurchasedAmount = 100001 }).customerType.Should().Be(CustomerType.Premium);
 }