Ejemplo n.º 1
0
        public void AddItemDefinition_Valid_ElseThenClauseUnSkipsItem()
        {
            var rule = new ItemSkippingRule <object>("1", "Rule");

            var itemDefinition = new ItemDefinition(new CodedConcept(new CodeSystem("1", "1", "Test"), "1", "Test"), ItemType.Question, null)
            {
                ItemMetadata = new ItemMetadata
                {
                    MetadataItems = new List <IMetadataItem>
                    {
                        new RequiredForCompletenessMetadataItem("Report")
                    }
                }
            };

            rule.AddItemDefinitionToSkip(itemDefinition);

            var itemInstance = new ItemInstance("1", "Test", true);

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

            assessmentInstance.AssessmentName.Returns("Test");

            var skippingContext = new SkippingContext();

            var context = new RuleEngineContext <AssessmentInstance>(assessmentInstance);

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

            rule.ElseThenClauses.First().Invoke(context);

            CollectionAssert.Contains(skippingContext.UnSkippedItemDefinitions, itemDefinition);
        }
Ejemplo n.º 2
0
        private void Apply(ItemUpdatedEvent itemUpdatedEvent)
        {
            var itemInstance = ItemInstances.FirstOrDefault(ii => ii.ItemDefinitionCode == itemUpdatedEvent.ItemDefinitionCode);
            var isNull       = itemUpdatedEvent.Value == null || string.IsNullOrEmpty(itemUpdatedEvent.Value.ToString());

            if (itemInstance != null && isNull)
            {
                _itemInstances.Remove(itemInstance);
            }

            if (itemInstance == null)
            {
                itemInstance = new ItemInstance(itemUpdatedEvent.ItemDefinitionCode, itemUpdatedEvent.Value, itemUpdatedEvent.IsRequired);
                if (!isNull)
                {
                    _itemInstances.Add(itemInstance);
                }
            }
            else
            {
                itemInstance.Apply(itemUpdatedEvent);
            }

            var skippingContext = new SkippingContext();

            if (_cachedRuleEngineExecutor == null)
            {
                var assessmentRuleCollectionFactory = new AssessmentRuleCollectionFactory();
                _cachedRuleEngineExecutor = new RuleEngineExecutor <AssessmentInstance> (
                    this,
                    assessmentRuleCollectionFactory.CreateRuleCollection(this.AssessmentName));
            }
            _cachedRuleEngineExecutor
            .ForRuleSet("ItemUpdatedRuleSet" + itemInstance.ItemDefinitionCode)
            .WithContext(itemInstance, itemInstance.ItemDefinitionCode)
            .WithContext(skippingContext)
            .Execute();

            skippingContext.SkippedItemDefinitions.ForEach(
                item =>
            {
                if (item.GetIsRequired() && !_skippedItemDefinitions.Contains(item))
                {
                    _skippedItemDefinitions.Add(item);
                }
                if (ItemInstances.Any(i => i.ItemDefinitionCode == item.CodedConcept.Code))
                {
                    UpdateItem(item, null);
                }
            });
            skippingContext.UnSkippedItemDefinitions.ForEach(item => _skippedItemDefinitions.Remove(item));
        }
Ejemplo n.º 3
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( ));
        }