示例#1
0
        public void Ruleset_cascades_to_child_validator()
        {
            var addressValidator = new InlineValidator <Address>();

            addressValidator.RuleSet("Test", () => {
                addressValidator.RuleFor(x => x.Line1).NotNull();
            });

            var validator = new TestValidator();

            validator.RuleSet("Test", () => {
                validator.RuleFor(x => x.Address).SetValidator(addressValidator);
            });

            var person = new Person {
                Address = new Address()
            };

            var result = validator.Validate(new ValidationContext <Person>(person, new PropertyChain(), new RulesetValidatorSelector("Test")));

            result.Errors.Count.ShouldEqual(1);
            AssertExecuted(result, "Test");
        }
        public void Throws_exception_with_a_ruleset_async()
        {
            var validator = new TestValidator {
                v => v.RuleFor(x => x.Surname).NotNull()
            };

            const string ruleSetName = "blah";

            validator.RuleSet(ruleSetName, () => {
                validator.RuleFor(x => x.Forename).NotNull();
            });

            typeof(ValidationException).ShouldBeThrownBy(() => {
                try
                {
                    validator.ValidateAndThrowAsync(new Person(), ruleSetName).Wait();
                }
                catch (AggregateException agrEx)
                {
                    throw agrEx.InnerException;
                }
            });
        }
示例#3
0
        public void Ruleset_cascades_to_child_collection_validator()
        {
            var orderValidator = new InlineValidator <Order>();

            orderValidator.RuleSet("Test", () => {
                orderValidator.RuleFor(x => x.ProductName).NotNull();
            });

            var validator = new TestValidator();

            validator.RuleSet("Test", () => {
                validator.RuleFor(x => x.Orders).SetCollectionValidator(orderValidator);
            });

            var person = new Person {
                Orders = { new Order(), new Order() }
            };

            var result = validator.Validate(new ValidationContext <Person>(person, new PropertyChain(), new RulesetValidatorSelector("Test")));


            result.Errors.Count.ShouldEqual(2);             //one for each order
        }
        public async Task TestAsyncWithDependentRules_AsyncEntry()
        {
            var validator = new TestValidator();

            validator.RuleFor(o => o)
            .MustAsync(async(p, ct) => await
#if NET35
                       TaskEx
#else
                       Task
#endif
                       .FromResult(p.Forename != null))
            .DependentRules(() => {
                validator.RuleFor(o => o.Address).NotNull();
                validator.RuleFor(o => o.Age).MustAsync(async(p, token) => await
#if NET35
                                                        TaskEx
#else
                                                        Task
#endif
                                                        .FromResult(p > 10));
            });

            var result = await validator.ValidateAsync(new Person());

            Assert.Equal(1, result.Errors.Count);
            Assert.True(result.Errors.Any(x => x.PropertyName == ""));

            result = await validator.ValidateAsync(new Person()
            {
                Forename = "Foo"
            });

            Assert.Equal(2, result.Errors.Count);
            Assert.True(result.Errors.Count(x => x.PropertyName == "Address") == 1, "Address");
            Assert.True(result.Errors.Count(x => x.PropertyName == "Age") == 1, "Age");
        }
示例#5
0
        public void Nested_dependent_rules_inside_ruleset_no_result_when_second_level_fails()
        {
            var validator = new TestValidator();

            validator.RuleSet("MyRuleSet", () =>
            {
                validator.RuleFor(x => x.Surname).NotNull()
                .DependentRules(() =>
                {
                    validator.RuleFor(x => x.Forename).NotNull()
                    .DependentRules(() =>
                    {
                        validator.RuleFor(x => x.Address).NotNull();
                    });
                });
            });

            var results = validator.Validate(new Person {
                Surname = "bar", Forename = null
            }, ruleSet: "MyRuleSet");

            results.Errors.Count.ShouldEqual(1);
            results.Errors[0].PropertyName.ShouldEqual("Forename");
        }
        public void Correctly_assigns_default_localized_error_message()
        {
            var originalCulture = Thread.CurrentThread.CurrentUICulture;

            try {
                var validator = new TestValidator(v => v.RuleFor(x => x.Surname).NotEmpty());

                foreach (var culture in new[] { "en", "de", "fr", "es", "de", "it", "nl", "pl", "pt", "ru", "sv", "ar" })
                {
                    Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
                    var message      = ValidatorOptions.LanguageManager.GetStringForValidator <NotEmptyValidator>();
                    var errorMessage = new MessageFormatter().AppendPropertyName("Surname").BuildMessage(message);
                    Debug.WriteLine(errorMessage);
                    var result = validator.Validate(new Person {
                        Surname = null
                    });
                    result.Errors.Single().ErrorMessage.ShouldEqual(errorMessage);
                }
            }
            finally {
                // Always reset the culture.
                Thread.CurrentThread.CurrentUICulture = originalCulture;
            }
        }
示例#7
0
        public void Nested_dependent_rules_inside_ruleset_inside_method()
        {
            var validator = new TestValidator();

            validator.RuleSet("MyRuleSet", () =>
            {
                validator.RuleFor(x => x.Surname).NotNull()
                .DependentRules(() =>
                {
                    validator.RuleFor(x => x.Forename).NotNull()
                    .DependentRules(() =>
                    {
                        BaseValidation(validator);
                    });
                });
            });

            var results = validator.Validate(new Person {
                Surname = "foo", Forename = "foo"
            }, ruleSet: "MyRuleSet");

            results.Errors.Count.ShouldEqual(1);
            results.Errors.Single().PropertyName.ShouldEqual("Address");
        }
 public AbstractValidatorTester()
 {
     CultureScope.SetDefaultCulture();
     validator = new TestValidator();
     testValidatorWithPreValidate = new TestValidatorWithPreValidate();
 }
        public void Scale_and_precision_should_work()
        {
            var validator = new TestValidator(v => v.RuleFor(x => x.Discount).SetValidator(new ScalePrecisionValidator(2, 4)));

            var result = validator.Validate(new Person {
                Discount = 123.456778m
            });

            Assert.False(result.IsValid);

            result = validator.Validate(new Person {
                Discount = 12.34M
            });
            Assert.True(result.IsValid);

            result = validator.Validate(new Person {
                Discount = 12.3414M
            });
            result.IsValid.ShouldBeFalse();

            result = validator.Validate(new Person {
                Discount = 1.344M
            });
            result.IsValid.ShouldBeFalse();

            result = validator.Validate(new Person {
                Discount = 156.3M
            });
            result.IsValid.ShouldBeTrue();

            result = validator.Validate(new Person {
                Discount = 1565.0M
            });                                                                       // fail as it counts zeros
            result.IsValid.ShouldBeFalse();

            validator = new TestValidator(v =>
                                          v.RuleFor(x => x.Discount)
                                          .SetValidator(new ScalePrecisionValidator(2, 4)
            {
                IgnoreTrailingZeros = true
            }));

            result = validator.Validate(new Person {
                Discount = 1565.0M
            });                                                                       // ignores zeros now
            result.IsValid.ShouldBeTrue();

            result = validator.Validate(new Person {
                Discount = 15655.0M
            });
            result.IsValid.ShouldBeFalse();

            result = validator.Validate(new Person {
                Discount = 155.0000000000000000000000000M
            });
            result.IsValid.ShouldBeTrue();

            result = validator.Validate(new Person {
                Discount = 155.0000000000000000000000001M
            });
            result.IsValid.ShouldBeFalse();

            result = validator.Validate(new Person {
                Discount = 00000000000000000000155.0000000000000000000000000M
            });
            result.IsValid.ShouldBeTrue();
        }
示例#10
0
 public ValidatorDescriptorTester()
 {
     CultureScope.SetDefaultCulture();
     validator = new TestValidator();
 }
 public LessThanOrEqualToValidatorTester()
 {
     CultureScope.SetDefaultCulture();
     validator = new TestValidator(v => v.RuleFor(x => x.Id).LessThanOrEqualTo(value));
 }
示例#12
0
        public void Scale_and_precision_should_work()
        {
            var validator = new TestValidator(v => v.RuleFor(x => x.Discount).ScalePrecision(2, 4));

            var result = validator.Validate(new Person {
                Discount = 123.456778m
            });

            result.IsValid.ShouldBeFalse();
            result.Errors[0].ErrorMessage.ShouldEqual("'Discount' must not be more than 4 digits in total, with allowance for 2 decimals. 3 digits and 6 decimals were found.");

            result = validator.Validate(new Person {
                Discount = 12.34M
            });
            result.IsValid.ShouldBeTrue();

            result = validator.Validate(new Person {
                Discount = 12.3414M
            });
            result.IsValid.ShouldBeFalse();
            result.Errors[0].ErrorMessage.ShouldEqual("'Discount' must not be more than 4 digits in total, with allowance for 2 decimals. 2 digits and 4 decimals were found.");

            result = validator.Validate(new Person {
                Discount = 1.344M
            });
            result.IsValid.ShouldBeFalse();
            result.Errors[0].ErrorMessage.ShouldEqual("'Discount' must not be more than 4 digits in total, with allowance for 2 decimals. 1 digits and 3 decimals were found.");

            result = validator.Validate(new Person {
                Discount = 156.3M
            });
            result.IsValid.ShouldBeTrue();

            result = validator.Validate(new Person {
                Discount = 1565.0M
            });                                                                       // fail as it counts zeros
            result.IsValid.ShouldBeFalse();
            result.Errors[0].ErrorMessage.ShouldEqual("'Discount' must not be more than 4 digits in total, with allowance for 2 decimals. 4 digits and 1 decimals were found.");

            validator = new TestValidator(v => v.RuleFor(x => x.Discount).ScalePrecision(2, 4, true));

            result = validator.Validate(new Person {
                Discount = 1565.0M
            });                                                                       // ignores zeros now
            result.IsValid.ShouldBeTrue();

            result = validator.Validate(new Person {
                Discount = 15655.0M
            });
            result.IsValid.ShouldBeFalse();
            result.Errors[0].ErrorMessage.ShouldEqual("'Discount' must not be more than 4 digits in total, with allowance for 2 decimals. 5 digits and 0 decimals were found.");

            result = validator.Validate(new Person {
                Discount = 155.0000000000000000000000000M
            });
            result.IsValid.ShouldBeTrue();

            result = validator.Validate(new Person {
                Discount = 155.0000000000000000000000001M
            });
            result.IsValid.ShouldBeFalse();
            result.Errors[0].ErrorMessage.ShouldEqual("'Discount' must not be more than 4 digits in total, with allowance for 2 decimals. 3 digits and 25 decimals were found.");

            result = validator.Validate(new Person {
                Discount = 00000000000000000000155.0000000000000000000000000M
            });
            result.IsValid.ShouldBeTrue();
        }
示例#13
0
 public UserStateTester()
 {
     validator = new TestValidator();
 }
示例#14
0
 public CustomMessageFormatTester()
 {
     validator = new TestValidator();
     CultureScope.SetDefaultCulture();
 }
 public void Setup()
 {
     validator = new TestValidator();
 }
 public CustomMessageFormatTester()
 {
     validator = new TestValidator();
 }
示例#17
0
 public UserSeverityTester()
 {
     validator = new TestValidator();
 }
示例#18
0
 public void Setup()
 {
     ValidatorOptions.CascadeMode = CascadeMode.Continue;
     validator = new TestValidator();
 }
 public CascadingFailuresTester()
 {
     ValidatorOptions.CascadeMode = CascadeMode.Continue;
     validator = new TestValidator();
 }
 public AbstractValidatorTester()
 {
     Thread.CurrentThread.CurrentCulture   = new CultureInfo("en-US");
     Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
     validator = new TestValidator();
 }
示例#21
0
 public ValidatorTesterTester()
 {
     validator = new TestValidator();
     validator.RuleFor(x => x.Forename).NotNull();
 }
 public ChainingValidatorsTester()
 {
     validator = new TestValidator();
 }
 public void Setup()
 {
     validator = new TestValidator(v => v.RuleFor(x => x.Id).LessThanOrEqualTo(value));
     Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
 }
 public void Setup()
 {
     Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us");
     validator = new TestValidator();
 }
 public CustomValidatorTester()
 {
     validator = new TestValidator();
 }
 public GreaterThanValidatorTester()
 {
     CultureScope.SetDefaultCulture();
     validator = new TestValidator(v => v.RuleFor(x => x.Id).GreaterThan(value));
 }
示例#27
0
 public CascadingFailuresTester()
 {
     SetBothGlobalCascadeModes(CascadeMode.Continue);
     _validator = new TestValidator();
 }
示例#28
0
 public OnFailureTests()
 {
     _validator = new TestValidator();
 }
 public CustomFailureActionTester()
 {
     validator = new TestValidator();
 }
 public CascadeModePropertiesTesterLegacy()
 {
     SetBothGlobalCascadeModes(CascadeMode.Continue);
     _validator = new TestValidator();
 }