Hi,
I want to validate field according to configurable flag, which describes if field is optional or required. If field is required, then it shouldn't be null or empty. Also this field provides additional rules. Let's take a look into sample.
Class which we want to validate:
publicclass ValidatableItem {publicstring ValidatableProperty { get; set; } }
Configuration class:
publicclass ValidationConfiguration {publicbool RequiredField { get; set; } }
Validator:
publicclass SampleValidator : AbstractValidator<ValidatableItem> {public SampleValidator(ValidationConfiguration configuration) { RuleFor(x => x.ValidatableProperty).Cascade(CascadeMode.StopOnFirstFailure) .NotNull().When(item => configuration.RequiredField) .NotEmpty().When(item => configuration.RequiredField) .Length(5, 10).When(item => !string.IsNullOrWhiteSpace(item.ValidatableProperty)); } }
The rule above states that:
- if field is not required and is empty, then we don't care about its length and validation should be passed;
- if field is required and empty, then NotNull() or NotEmpty() will result a validation error;
- if field is not empty, then length will be validated;
But when i try to validate an empty field which is required, i get validation passed. Following NUnit test fails:
[TestFixture]publicclass SampleValidatorTests { [Test]publicvoid test() {var configuration = new ValidationConfiguration { RequiredField = true };var item = new ValidatableItem { ValidatableProperty = string.Empty };var validator = new SampleValidator(configuration);var validationResult = validator.Validate(item); Assert.That(!validationResult.IsValid); } }
What I'm doing wrong?