/// <summary>
        /// Validates this instance.
        /// </summary>
        /// <param name="ruleSet">The rule set.</param>
        /// <param name="behavior">The behavior.</param>
        /// <returns>
        ///   <c>True</c> if this instance is valid; otherwise <c>false</c>.
        /// </returns>
        public virtual Boolean Validate(String ruleSet, ValidationBehavior behavior)
        {
            if (this.ValidationService.IsValidationSuspended)
            {
                return(this.ValidationService.IsValid);
            }

            var wasValid = this.IsValid;

            this.ValidationService.ValidateRuleSet(ruleSet);
            this.OnValidated();

            if (behavior == ValidationBehavior.TriggerValidationErrorsOnFailure && !this.ValidationService.IsValid)
            {
                this.TriggerValidation();
            }

            if (this.IsValid != wasValid)
            {
                this.OnPropertyChanged(() => this.IsValid);
#if FX45
                this.OnPropertyChanged(() => this.HasErrors);
#endif
            }

            return(this.ValidationService.IsValid);
        }
Пример #2
0
        private static void ProcessError(ValidationBehavior validationBehavior, string errorMessage, ValidationResults log)
        {
            ValidatorResources.Culture = LocalizationManager.GetCurrentCulture();

            switch (validationBehavior)
            {
            case ValidationBehavior.Enforce:
                // throw an exception
                log.AddResult(new ValidationResult(true, errorMessage));
                throw new InvalidPackageException(errorMessage);

            case ValidationBehavior.LogError:
                // log an error
                log.AddResult(new ValidationResult(true, errorMessage));
                break;

            case ValidationBehavior.LogWarning:
                // log a warning
                log.AddResult(new ValidationResult(false, errorMessage));
                break;

            case ValidationBehavior.None:
                // do nothing
                break;
            }
        }
Пример #3
0
        public async Task Handle_Failure_Should_ReturnUnit_Detail_NoValidatorsForTheRequest()
        {
            IPipelineBehavior <TestCommand, Unit> validationPipeline = new ValidationBehavior <TestCommand, Unit>(
                new List <IValidator <TestCommand> >());

            var testCommand = new TestCommand();
            var testHandler = new TestCommandHandler();

            var unit = await validationPipeline.Handle(testCommand,
Пример #4
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="scormRequirementValidation">How to validate SCORM requirement violations.</param>
 /// <param name="scormRecommendationValidation">How to validate SCORM recommendation violations.</param>
 /// <param name="mlcRequirementValidation">How to validate MLC requirement violations.</param>
 /// <param name="lrmRequirementValidation">How to validate LRM requirement violations.</param>
 public PackageValidatorSettings(ValidationBehavior scormRequirementValidation,
                                 ValidationBehavior scormRecommendationValidation,
                                 ValidationBehavior mlcRequirementValidation,
                                 ValidationBehavior lrmRequirementValidation)
 {
     m_mlcRequirementValidation      = mlcRequirementValidation;
     m_scormRecommendationValidation = scormRecommendationValidation;
     m_scormRequirementValidation    = scormRequirementValidation;
     m_lrmRequirementValidation      = lrmRequirementValidation;
 }
Пример #5
0
 /// <summary>
 /// Returns true if the behavior is LogError or LogWarning.
 /// </summary>
 /// <param name="behavior"></param>
 /// <returns></returns>
 private static bool RequiresLog(ValidationBehavior behavior)
 {
     if (behavior == ValidationBehavior.LogError || behavior == ValidationBehavior.LogWarning)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Пример #6
0
        public void element_for_member_with_no_error_renders_with_no_class()
        {
            var target = new ValidationBehavior(() => stateDictionary);

            expression = x => x.Price;
            var textbox = new TextBox(expression.GetNameFor(), null, new List <IBehaviorMarker> {
                target
            });
            var element = textbox.ToString().ShouldHaveHtmlNode("Price");

            element.ShouldNotHaveAttribute(HtmlAttribute.Class);
        }
Пример #7
0
        public async Task ShouldNotRaiseValidationException()
        {
            var validator = new List <IValidator <CreateCalendarCommand> >
            {
                new CreateCalendarCommandValidator(),
            };

            var requestLogger = new ValidationBehavior <CreateCalendarCommand, long>(validator);

            await requestLogger.Handle(new CreateCalendarCommand { Title = "Test" }, new CancellationToken(), () => {
                return(Task.FromResult(1L));
            });
        }
Пример #8
0
        public void element_for_member_with_error_renders_with_default_error_class()
        {
            stateDictionary.AddModelError("Price", "Something bad happened");
            var target = new ValidationBehavior(() => stateDictionary);

            expression = x => x.Price;
            var textbox = new TextBox(expression.GetNameFor(), null, new List <IBehaviorMarker> {
                target
            });
            var element = textbox.ToString().ShouldHaveHtmlNode("Price");

            element.ShouldHaveAttribute(HtmlAttribute.Class).WithValue("input-validation-error");
        }
Пример #9
0
        public void when_handling_checkbox_does_not_fall_back_to_default_behavior()
        {
            stateDictionary.AddModelError("Done", "Foo");
            stateDictionary["Done"].Value = new ValueProviderResult(new[] { "false", "false" }, "false", CultureInfo.CurrentCulture);
            var target = new ValidationBehavior(() => stateDictionary);

            expression = x => x.Done;
            var checkbox = new CheckBox(expression.GetNameFor(), expression.GetMemberExpression(), new List <IBehaviorMarker> {
                target
            });
            var element = checkbox.ToString().ShouldHaveHtmlNode("Done");

            element.ShouldHaveAttribute("value").WithValue("true");
        }
        /// <summary>
        /// Validates the given property.
        /// </summary>
        /// <param name="propertyName">Name of the property.</param>
        /// <param name="behavior">The behavior.</param>
        /// <returns>
        /// The first validation error, if any; Otherwise <c>null</c>.
        /// </returns>
        protected virtual String ValidateProperty(String propertyName, ValidationBehavior behavior)
        {
            String error = null;

            if (this.ValidationService.IsValidationSuspended)
            {
                return(error);
            }

            using (this.validationState.BeginPropertyValidation(propertyName))
            {
                var wasValid = this.IsValid;

                var beforeDetectedProblems = this.ValidationService.ValidationErrors
                                             .Where(ve => ve.Key == propertyName)
                                             .SelectMany(ve => ve.DetectedProblems)
                                             .OrderBy(dp => dp)
                                             .ToArray();

                error = this.ValidationService.Validate(propertyName);

                var afterDetectedProblems = this.ValidationService.ValidationErrors
                                            .Where(ve => ve.Key == propertyName)
                                            .SelectMany(ve => ve.DetectedProblems)
                                            .OrderBy(dp => dp)
                                            .ToArray();

                var validationStatusChanged = !beforeDetectedProblems.SequenceEqual(afterDetectedProblems);
                if (validationStatusChanged && behavior == ValidationBehavior.TriggerValidationErrorsOnFailure)
                {
                    this.OnPropertyChanged(propertyName);

#if FX45
                    this.OnErrorsChanged(propertyName);
#endif
                }

                if (this.IsValid != wasValid)
                {
                    this.OnPropertyChanged(() => this.IsValid);
#if FX45
                    this.OnPropertyChanged(() => this.HasErrors);
#endif
                }
            }

            this.OnValidated();

            return(error);
        }
Пример #11
0
        public void element_with_error_renders_with_attempted_value()
        {
            stateDictionary.AddModelError("Price", "Something bad happened");
            stateDictionary["Price"].Value = new ValueProviderResult("bad value", "bad value", CultureInfo.CurrentCulture);
            var target = new ValidationBehavior(() => stateDictionary);

            expression = x => x.Price;
            var textbox = new TextBox(expression.GetNameFor(), expression.GetMemberExpression(),
                                      new List <IBehaviorMarker> {
                target
            });
            var element = textbox.ToString().ShouldHaveHtmlNode("Price");

            element.ShouldHaveAttribute(HtmlAttribute.Value).WithValue("bad value");
        }
        public void element_for_member_with_error_renders_with_specified_error_class_and_specified_other_class()
        {
            stateDictionary.AddModelError("Price", "Something bad happened");
            target     = new ValidationBehavior(() => stateDictionary, "my-error-class");
            expression = x => x.Price;
            var textbox = new TextBox(expression.GetNameFor(), null, new List <IBehaviorMarker> {
                target
            })
                          .Class("another-class");
            var element = textbox.ToString().ShouldHaveHtmlNode("Price");

            element.ShouldHaveAttribute(HtmlAttribute.Class).Value
            .ShouldContain("another-class")
            .ShouldContain("my-error-class");
        }
        public Task DoesValidationBehaviorWorksCorrectlyWhenValidatorDoesNotPass()
        {
            var validators = new IValidator <SampleRequest>[] { new SampleValidator(), };
            var behavior   = new ValidationBehavior <SampleRequest, SampleResponse>(validators);
            var request    = new SampleRequest
            {
                IsWorking = true
            };

            Action a = () => behavior.Handle(request, CancellationToken.None, null).GetAwaiter().GetResult();

            a.Should()
            .Throw <ValidationException>();

            return(Task.CompletedTask);
        }
Пример #14
0
        public void does_not_restore_value_for_password_field()
        {
            stateDictionary.Add("Password", new ModelState()
            {
                Value = new ValueProviderResult("foo", "foo", CultureInfo.CurrentCulture)
            });

            var target = new ValidationBehavior(() => stateDictionary);

            expression = x => x.Password;
            var passwordField = new Password(expression.GetNameFor(), expression.GetMemberExpression(), new List <IBehaviorMarker> {
                target
            });
            var element = passwordField.ToString().ShouldHaveHtmlNode("Password");

            element.ShouldHaveAttribute(HtmlAttribute.Value).WithValue("");
        }
Пример #15
0
        public void does_not_add_css_class_when_retrieving_value_from_modelstate_with_no_error()
        {
            stateDictionary.Add("Price", new ModelState()
            {
                Value = new ValueProviderResult("foo", "foo", CultureInfo.CurrentCulture)
            });

            var target = new ValidationBehavior(() => stateDictionary);

            expression = x => x.Price;
            var textbox = new TextBox(expression.GetNameFor(), null, new List <IBehaviorMarker> {
                target
            });
            var element = textbox.ToString().ShouldHaveHtmlNode("Price");

            element.ShouldHaveAttribute(HtmlAttribute.Value).WithValue("foo");
            element.ShouldNotHaveAttribute(HtmlAttribute.Class);
        }
        public Task DoesValidationBehaviorWorksCorrectlyWhenAllValidatorsPass()
        {
            var validators = new IValidator <SampleRequest>[] { new SampleValidator() };
            var behavior   = new ValidationBehavior <SampleRequest, SampleResponse>(validators);
            var request    = new SampleRequest
            {
                Version   = "v2.0",
                IsWorking = true
            };

            Action a = () => behavior.Handle(request, CancellationToken.None,
                                             () => Task.FromResult(new SampleResponse {
                HasWorked = true
            })).GetAwaiter().GetResult();

            a.Should().NotThrow();
            return(Task.CompletedTask);
        }
Пример #17
0
        public Task ShouldRaiseValidationException()
        {
            var validator = new List <IValidator <CreateCalendarCommand> >
            {
                new CreateCalendarCommandValidator(),
            };

            var requestLogger = new ValidationBehavior <CreateCalendarCommand, long>(validator);

            Assert.CatchAsync <Application.Common.Exceptions.ValidationException>(async() => {
                await requestLogger.Handle(new CreateCalendarCommand {
                }, new CancellationToken(), () => {
                    return(Task.FromResult(1L));
                });
            });

            return(Task.CompletedTask);
        }
Пример #18
0
        public void restore_checked_from_radio_set()
        {
            stateDictionary.Add("Selection", new ModelState {
                Value = new ValueProviderResult((int)FakeEnum.Two, "2", CultureInfo.CurrentCulture)
            });
            var target = new ValidationBehavior(() => stateDictionary);

            expression = x => x.Selection;

            var html = new RadioSet(expression.GetNameFor(), expression.GetMemberExpression(), new List <IBehaviorMarker> {
                target
            }).Options <FakeEnum>().ToString();
            var element = html.ShouldHaveHtmlNode("Selection");
            var options = element.ShouldHaveChildNodesCount(8);


            RadioSetTests.VerifyOption("Selection", (int)FakeEnum.Zero, FakeEnum.Zero, options[0], options[1], false);
            RadioSetTests.VerifyOption("Selection", (int)FakeEnum.One, FakeEnum.One, options[2], options[3], false);
            RadioSetTests.VerifyOption("Selection", (int)FakeEnum.Two, FakeEnum.Two, options[4], options[5], true);
            RadioSetTests.VerifyOption("Selection", (int)FakeEnum.Three, FakeEnum.Three, options[6], options[7], false);
        }
 public void Remove(ValidationBehavior validationBehavior)
 {
     _validationBehaviors.Remove(validationBehavior);
 }
 public void Add(ValidationBehavior validationBehavior)
 {
     _validationBehaviors.Add(validationBehavior);
 }
Пример #21
0
 public void SetUp()
 {
     _validator = new ValidationBehavior <Application.Websites.Queries.GetWebsites.GetWebsites, OperationResult <List <WebsiteOutputModel> > >(new GetWebsitesValidator());
 }
 /// <summary>
 /// Validates this instance.
 /// </summary>
 /// <param name="behavior">The behavior.</param>
 /// <returns>
 ///   <c>True</c> if this instance is valid; otherwise <c>false</c>.
 /// </returns>
 public Boolean Validate(ValidationBehavior behavior)
 {
     return(this.Validate(null, behavior));
 }
Пример #23
0
 public void SetUp()
 {
     _validator = new ValidationBehavior <Application.Websites.Commands.CreateWebsite.CreateWebsite, OperationResult <WebsiteOutputModel> >(new CreateWebsiteValidator());
 }
 public void SetUp()
 {
     stateDictionary = new ModelStateDictionary();
     expression      = null;
     target          = new ValidationBehavior(() => stateDictionary);
 }
Пример #25
0
        public ValidationBehaviorTests()
        {
            _validator = Substitute.For <IValidator <PayLoadCreateCommand> >();

            _sut = new ValidationBehavior <PayLoadCreateCommand, bool>(_validator);
        }
Пример #26
0
 public String Test_ValidateProperty(String propertyName, ValidationBehavior behavior)
 {
     return(this.ValidateProperty(propertyName, behavior));
 }
Пример #27
0
        /// <summary>
        /// Returns an <Typ>XPathNavigator</Typ> that points to the &lt;manifest&gt; node of the package manifest.
        /// </summary>
        /// <exception cref="InvalidPackageException">The imsmanifest.xml file is missing from the package, or the
        /// &lt;manifest&gt; is missing from the imsmanifest.xml file.</exception>
        internal void CreateManifestNavigator(ValidationBehavior lrmValidation, bool fixLrmViolations,
            out ValidationResults log, out XPathNavigator manifest)
        {
            Stream stream;
            log = null;
            manifest = null;

            // Get Index.xml -- see if it's Class Server package.  This is an optimization since the imsmanifest.xml
            // stream can be gotten directly.
            if (FileExists("Index.xml"))
            {
                using (stream = GetFileStream("Index.xml"))
                {
                    // Allow this conversion to occur again if this method is called, but cache
                    // the result for use by the GetFileStream("imsmanifest.xml") method.
                    m_result = ManifestConverter.ConvertFromIndexXml(stream, GetFilePaths(), fixLrmViolations, lrmValidation);
                }
                log = m_result.Log;
                manifest = m_result.Manifest;
            }
            else
            {
                // If it was not a Class Server package, then see if it's a SCORM package
                try
                {
                    stream = GetFileStream("imsmanifest.xml");
                }
                catch (FileNotFoundException)
                {
                    throw new InvalidPackageException(Resources.ImsManifestXmlMissing);
                }
                catch (DirectoryNotFoundException)
                {
                    throw new InvalidPackageException(Resources.ImsManifestXmlMissing);
                }
                using (stream)
                {
                    try
                    {
                        XPathDocument doc = new XPathDocument(stream);
                        XPathNavigator nav = doc.CreateNavigator();
                        // move to the first manifest node. First try SCORM 2004
                        XPathExpression expr = Helper.CreateExpressionV1p3(nav, Helper.Strings.Imscp + ":" + Helper.Strings.Manifest);
                        manifest = nav.SelectSingleNode(expr);
                        if (manifest == null)
                        {
                            // Didn't find a SCORM 2004 manifest node.  Try SCORM 1.2.
                            expr = Helper.CreateExpressionV1p2(nav, Helper.Strings.Imscp + ":" + Helper.Strings.Manifest);
                            manifest = nav.SelectSingleNode(expr);
                            if (manifest == null)
                            {
                                throw new InvalidPackageException(String.Format(CultureInfo.CurrentCulture, ValidatorResources.RequiredElementMissing, Helper.Strings.Manifest, ValidatorResources.ManifestNodeMissing));
                            }
                        }
                    }
                    catch (XmlException e)
                    {
                        throw new InvalidPackageException(ValidatorResources.BadXmlInManifest, e);
                    }
                }
            }
        }
        /// <summary>
        /// Determines whether the specified Object is equal to the current Object.
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public override bool Equals(object obj)
        {
            if (obj == null)
            {
                return(false);
            }
            if (Object.ReferenceEquals(this, obj))
            {
                return(true);
            }
            if (this.GetType() != obj.GetType())
            {
                return(false);
            }


            var other = (VLLibraryQuestion)obj;

            //reference types
            if (!Object.Equals(ValidationField1, other.ValidationField1))
            {
                return(false);
            }
            if (!Object.Equals(ValidationField2, other.ValidationField2))
            {
                return(false);
            }
            if (!Object.Equals(ValidationField3, other.ValidationField3))
            {
                return(false);
            }
            if (!Object.Equals(RegularExpression, other.RegularExpression))
            {
                return(false);
            }
            if (!Object.Equals(QuestionText, other.QuestionText))
            {
                return(false);
            }
            if (!Object.Equals(Description, other.Description))
            {
                return(false);
            }
            if (!Object.Equals(HelpText, other.HelpText))
            {
                return(false);
            }
            if (!Object.Equals(FrontLabelText, other.FrontLabelText))
            {
                return(false);
            }
            if (!Object.Equals(AfterLabelText, other.AfterLabelText))
            {
                return(false);
            }
            if (!Object.Equals(InsideText, other.InsideText))
            {
                return(false);
            }
            if (!Object.Equals(RequiredMessage, other.RequiredMessage))
            {
                return(false);
            }
            if (!Object.Equals(ValidationMessage, other.ValidationMessage))
            {
                return(false);
            }
            if (!Object.Equals(OtherFieldLabel, other.OtherFieldLabel))
            {
                return(false);
            }
            //value types
            if (!QuestionId.Equals(other.QuestionId))
            {
                return(false);
            }
            if (!m_category.Equals(other.m_category))
            {
                return(false);
            }
            if (!QuestionType.Equals(other.QuestionType))
            {
                return(false);
            }
            if (!IsRequired.Equals(other.IsRequired))
            {
                return(false);
            }
            if (!RequiredBehavior.Equals(other.RequiredBehavior))
            {
                return(false);
            }
            if (!RequiredMinLimit.Equals(other.RequiredMinLimit))
            {
                return(false);
            }
            if (!RequiredMaxLimit.Equals(other.RequiredMaxLimit))
            {
                return(false);
            }
            if (!AttributeFlags.Equals(other.AttributeFlags))
            {
                return(false);
            }
            if (!ValidationBehavior.Equals(other.ValidationBehavior))
            {
                return(false);
            }
            if (!RandomBehavior.Equals(other.RandomBehavior))
            {
                return(false);
            }
            if (!OtherFieldType.Equals(other.OtherFieldType))
            {
                return(false);
            }
            if (!OtherFieldRows.Equals(other.OtherFieldRows))
            {
                return(false);
            }
            if (!OtherFieldChars.Equals(other.OtherFieldChars))
            {
                return(false);
            }
            if (!OptionsSequence.Equals(other.OptionsSequence))
            {
                return(false);
            }
            if (!ColumnsSequence.Equals(other.ColumnsSequence))
            {
                return(false);
            }
            if (!RangeStart.Equals(other.RangeStart))
            {
                return(false);
            }
            if (!RangeEnd.Equals(other.RangeEnd))
            {
                return(false);
            }

            return(true);
        }