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); }
/// <inheritdoc/> public void WithRuleCollection <T> (IRuleCollection <T> ruleCollection, IRuleSelector ruleSelector = null) { _ruleSelector = ruleSelector; var ruleEngine = new RuleEngine <T> (ruleCollection); _executeRules = ctx => ruleEngine.ExecuteRules(ctx); }
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); }
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); }
/// <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); }
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 ); }
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( )); }
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 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); }