public void RepeaterHideRuleReferenceRootControl()
        {
            ITruthCondition condition = new HideTruthCondition { RuleType = "HIDE" };
            TruthConditionList subRuleList = new TruthConditionList();
            CompareDefinition compareDefinition = new CompareDefinition { CompareTo = ComparisonType.Value, Field = "Checkbox", FieldScope = FieldScope.Unknown, Operator = Operator.Equals, Value = "checked" };
            subRuleList.Add(new CompareTruthCondition { RuleType = "EVAL", Value = compareDefinition });
            condition.Value = subRuleList;

            ControlList controlList = new ControlList { new CheckboxControl { Name = "Checkbox" } };
            RepeaterControl repeater = new RepeaterControl { Name = "Parent" };
            repeater.AddChild(new ComboControl { Name = "Child", VisibilityRule = condition });
            controlList.Add(repeater);

            ApplicationData applicationData = new ApplicationData { { "Checkbox", "checked" } };
            Dictionary<string, object>[] repeaterValue = new Dictionary<string, object>[1];
            repeaterValue[0] = new Dictionary<string, object>();
            repeaterValue[0]["Child"] = string.Empty;
            applicationData.Add("Parent", repeaterValue);

            ITruthConditionEvaluator<ITruthCondition> evaluator = this.EvaluatorRegister.GetEvaluatorFor<HideTruthCondition>();
            bool result = evaluator.Evaluate(condition, controlList, applicationData, null, this.EvaluatorRegister, "Parent[0]");
            Assert.IsTrue(result);

            applicationData["Checkbox"] = string.Empty;
            result = evaluator.Evaluate(condition, controlList, applicationData, null, this.EvaluatorRegister, "Parent[0]");
            Assert.IsFalse(result);
        }
 public void SerializeCompareValueString()
 {
     IfTruthCondition rootCondition = new IfTruthCondition();
     TruthConditionList conditionList = new TruthConditionList();
     CompareTruthCondition compareCondition = new CompareTruthCondition();
     conditionList.Add(compareCondition);
     rootCondition.Value = conditionList;
     CompareDefinition compareDefinition = new CompareDefinition();
     compareCondition.Value = compareDefinition;
     compareDefinition.Value = "test";
     string serialized = JsonConvert.SerializeObject(rootCondition);
     Assert.IsTrue(serialized.Contains("\"Value\":\"test\""));
 }
 public void SerializeCompareValueArray()
 {
     IfTruthCondition rootCondition = new IfTruthCondition();
     TruthConditionList conditionList = new TruthConditionList();
     CompareTruthCondition compareCondition = new CompareTruthCondition();
     conditionList.Add(compareCondition);
     rootCondition.Value = conditionList;
     CompareDefinition compareDefinition = new CompareDefinition();
     compareCondition.Value = compareDefinition;
     compareDefinition.Value = new[] { "test1", "test2" };
     string serialized = JsonConvert.SerializeObject(rootCondition);
     Assert.IsTrue(serialized.Contains("\"Value\":[\"test1\",\"test2\"]"));
 }
            public void TestInitialize()
            {
                ControlList list = new ControlList
                                   {
                                       new TextControl
                                       {
                                           Id = 1,
                                           Name = "textbox1"
                                       },
                                       new TextControl
                                       {
                                           Id = 2,
                                           Name = "textbox2"
                                       }
                                   };

                TruthConditionList hideRuleValue = new TruthConditionList
                                                   {
                                                       new CompareTruthCondition
                                                       {
                                                           Value = new CompareDefinition
                                                                   {
                                                                       CompareTo = ComparisonType.Value,
                                                                       Field = "textbox1",
                                                                       Operator = Operator.Equals,
                                                                       Value = string.Empty
                                                                   }
                                                       }
                                                   };
                list[1].VisibilityRule = new HideTruthCondition { Value = hideRuleValue };

                TruthConditionList pageValidators = new TruthConditionList();
                TruthConditionList pageValidatorValue = new TruthConditionList
                                                        {
                                                            new CompareTruthCondition
                                                            {
                                                                Value = new CompareDefinition
                                                                        {
                                                                            CompareTo = ComparisonType.Value,
                                                                            Field = "textbox2",
                                                                            Operator = Operator.Equals,
                                                                            Value = string.Empty
                                                                        }
                                                            }
                                                        };
                pageValidators.Add(new ValidateTruthCondition { Error = new ValidationError { Message = "test", Position = "2" }, Value = pageValidatorValue });

                this.validator = new ApplicationValidator(list, pageRules: pageValidators, validatorList: this.validatorList);
            }
 /// <summary>
 /// Creates a <see cref="Microsoft.Practices.EnterpriseLibrary.Validation.Validator"/> that will
 /// validate <paramref name="pageRules"/>.
 /// </summary>
 /// <param name="pageRules">The list of page rules to create a validator for.</param>
 /// <param name="evaluatorFactory">A <see cref="TruthConditionEvaluatorFactory "/>.</param>
 /// <returns>
 /// A <see cref="Microsoft.Practices.EnterpriseLibrary.Validation.Validator"/> that will
 /// validate <paramref name="pageRules"/>.
 /// </returns>
 public Validator CreatePageValidator(TruthConditionList pageRules, TruthConditionEvaluatorFactory evaluatorFactory)
 {
     List<Validator> validatorsList = pageRules.OfType<ValidateTruthCondition>().Select(validationRule => new ITruthConditionValidator(validationRule, this.allControls, evaluatorFactory)).Cast<Validator>().ToList();
     return new EntLib.AndCompositeValidator(validatorsList.ToArray());
 }
        /// <summary>
        /// Validates an application.
        /// </summary>
        /// <param name="application">The application to validate.</param>
        /// <param name="pagesToValidate">The pagesToValidate to validate.</param>
        /// <param name="controls">A list of all controls.</param>
        /// <param name="controlsAccess">The control access list for the current user.</param>
        /// <param name="subpageControlId">The id of the control acting as the current subpage. If <see langword="null" />, then all controls are validated.</param>
        /// <param name="product">The product object.</param>
        /// <returns>
        /// The <see cref="ValidationResults" />.
        /// </returns>
        private ValidationResults ValidateApplication(Application application, PageList pagesToValidate, ControlList controls, List<ControlAccess> controlsAccess, int? subpageControlId = null, ProductDefinition product = null)
        {
            List<ControlWithOptions> controlsWithOptions = controls.FindAllRecursive<ControlWithOptions>();

            if (controlsWithOptions.Any())
            {
                this.RegisterOptionControls(application.FormOrganisationId, true, controlsWithOptions, application.ApplicationData);
            }

            var controlList = pagesToValidate.AllControls;
            var ruleList = pagesToValidate.AllRules;

            if (subpageControlId != null)
            {
                var subpageControl = controlList.FindRecursive<GroupControl>(x => x.Id == subpageControlId);
                if (subpageControl != null)
                {
                    controlList = new ControlList { subpageControl };

                    TruthConditionList validRules = new TruthConditionList();
                    validRules.AddRange(ruleList.Where(rule => controlList.FindRecursive(x => x.Id.ToString().Equals(((ValidateTruthCondition)rule).Error.Position)) != null));

                    ruleList = validRules;
                }
            }

            ServiceEndpointList endpointList = pagesToValidate.AllExternalRuleHandlers.Count > 0 ?
                     this.DataAccess.GetServiceEndpointList() :
                     new ServiceEndpointList();

            RegexValidatorList regexValidators = this.DataAccess.GetValidatorList();

            if (product != null)
            {
                this.FillControlReferences(pagesToValidate, product.FormDefinition.Pages.AllControls);
                foreach (var referencedControls in pagesToValidate.Select(p => p.ReferencedControls))
                {
                    foreach (var control in referencedControls)
                    {
                        var exists = controls.FindRecursive(control.Name) != null;
                        if (exists)
                        {
                            continue;
                        }

                        controls.AddRange(referencedControls);
                    }
                }
            }

            ApplicationValidator validator = new ApplicationValidator(controls, controlList, controlsAccess, ruleList, pagesToValidate.AllExternalRuleHandlers, endpointList, this.endpointCommunicator, regexValidators);
            return validator.Validate(application);
        }