예제 #1
0
        public void IsValidWhenAllValidatorsAreValid()
        {
            var validatableObject = new ValidatableTestObject();
            var validator         = PropertyValidator
                                    .For(validatableObject, o => o.SomeStringProperty)
                                    .Required("Error occurred!");
            var anotherValidator = PropertyValidator
                                   .For(validatableObject, o => o.AnotherStringProperty)
                                   .Required("Error occurred!");
            var modelValidator = new ModelValidator(validator, anotherValidator);

            Assert.IsFalse(modelValidator.IsValid);

            validatableObject.SomeStringProperty = "valid";

            Assert.IsFalse(modelValidator.IsValid);

            validatableObject.AnotherStringProperty = "valid";

            Assert.IsTrue(modelValidator.IsValid);

            validatableObject.AnotherStringProperty = "";

            Assert.IsFalse(modelValidator.IsValid);
        }
예제 #2
0
        public void ValidationResultReturnsUnvalidatedIfNoValidators()
        {
            var validatableObject = new ValidatableTestObject();
            var validator         = PropertyValidator.For(validatableObject, o => o.SomeStringProperty);

            var result = validator.ValidationResult;

            Assert.AreEqual(PropertyValidationResult.Unvalidated, result);
        }
예제 #3
0
        public void TryParseDecimal_culture_specific_should_pass()
        {
            PropertyValidator <Row> validator = PropertyValidator <Row> .For(x => x.DecimalValue);

            validator.TryParseDecimal(new CultureInfo("fr-FR"))
            .Validate(new Row()
            {
                DecimalValue = "-1234,55"
            });
            Assert.True(validator.IsValid);
        }
예제 #4
0
        public void TryParseDecimal_negative_value_should_pass()
        {
            PropertyValidator <Row> validator = PropertyValidator <Row> .For(x => x.DecimalValue);

            validator.TryParseDecimal(CultureInfo.InvariantCulture)
            .Validate(new Row()
            {
                DecimalValue = "-1234.55"
            });
            Assert.True(validator.IsValid);
        }
예제 #5
0
        public void TryParseDecimal_should_fail()
        {
            PropertyValidator <Row> validator = PropertyValidator <Row> .For(x => x.DecimalValue);

            validator.TryParseDecimal()
            .Validate(new Row()
            {
                DecimalValue = "a1234"
            });
            Assert.False(validator.IsValid);
        }
예제 #6
0
        public void DoesNotShowErrorWhenUnvalidated()
        {
            var viewModel     = new ValidatableTestObject();
            var testValidator = PropertyValidator.For(viewModel, x => x.SomeStringProperty)
                                .Required("Please enter some text");
            var validationMessage = new ValidationMessage();

            validationMessage.Validator = testValidator;

            Assert.IsFalse(validationMessage.ShowError);
        }
예제 #7
0
        public void RequiredIsUnvalidatedAndNotValidIfPropertyNeverChanges()
        {
            var validatableObject = new ValidatableTestObject();
            var validator         = PropertyValidator
                                    .For(validatableObject, o => o.SomeStringProperty)
                                    .Required("Please provide a value for SomeStringProperty!");

            var result = validator.ValidationResult;

            Assert.IsFalse(result.IsValid);
            Assert.AreEqual(PropertyValidationResult.Unvalidated, result);
        }
        public void TryDateTime_should_fail()
        {
            PropertyValidator <Row> validator = PropertyValidator <Row> .For(x => x.DateTimeValue);

            validator
            .TryParseDateTime("yyyyMMdd")
            .Validate(new Row()
            {
                DateTimeValue = "20201320"
            });
            Assert.False(validator.IsValid);
        }
        public void IsNotNull_should_fail()
        {
            PropertyValidator <Row> validator = PropertyValidator <Row> .For(x => x.Key);

            validator
            .IsNotNull()
            .Validate(new Row()
            {
                Key = null
            });
            Assert.False(validator.IsValid);
        }
        public void IsNotNull_default_message()
        {
            PropertyValidator <Row> validator = PropertyValidator <Row> .For(x => x.Key);

            validator
            .IsNotNull()
            .Validate(new Row()
            {
                Key = null
            });
            Assert.Equal("Field Key : Value is mandatory", validator.ValidationErrors[0].ErrorMessage);
        }
        public void IsNotNull_should_pass()
        {
            PropertyValidator <Row> validator = PropertyValidator <Row> .For(x => x.Key);

            validator
            .IsNotNull()
            .Validate(new Row()
            {
                Key = "hasValue"
            });
            Assert.True(validator.IsValid);
        }
예제 #12
0
        public void TryRegex_should_fail()
        {
            PropertyValidator <Row> validator = PropertyValidator <Row> .For(x => x.Key);

            validator
            .TryRegex("^[a-z0-9\\-]+$")
            .Validate(new Row()
            {
                Key = "key-0123"
            });
            Assert.True(validator.IsValid);
        }
예제 #13
0
        public void IsStringValues_should_fail()
        {
            PropertyValidator <Row> validator = PropertyValidator <Row> .For(x => x.Key);

            validator
            .IsNotNullOrEmpty()
            .IsStringValues(TypesValues)
            .Validate(new Row()
            {
                Key = "B"
            });
            Assert.False(validator.IsValid);
        }
예제 #14
0
        public void RequiredValidatesPropertyNotEmpty()
        {
            var validatableObject = new ValidatableTestObject();
            var validator         = PropertyValidator
                                    .For(validatableObject, o => o.SomeStringProperty)
                                    .Required("Please provide a value for SomeStringProperty!");

            validatableObject.SomeStringProperty = "";

            var result = validator.ValidationResult;

            Assert.IsFalse(result.IsValid);
            Assert.AreEqual("Please provide a value for SomeStringProperty!", result.Message);
        }
예제 #15
0
        public void ValidationResultReturnsSuccessIfValidatorsPass()
        {
            var validatableObject = new ValidatableTestObject();
            // Validator validates that the property is equal to the string "Inigo Montoya".
            var validator = PropertyValidator
                            .For(validatableObject, o => o.SomeStringProperty)
                            .ValidIfTrue(value => value == "Inigo Montoya", "Error occurred!");

            validatableObject.SomeStringProperty = "Inigo Montoya";

            var result = validator.ValidationResult;

            Assert.IsTrue(result.IsValid);
        }
예제 #16
0
        public void ShowsErrorWhenValidationResultIsInvalid()
        {
            var viewModel     = new ValidatableTestObject();
            var testValidator = PropertyValidator.For(viewModel, x => x.SomeStringProperty)
                                .Required("Please enter some text");
            var validationMessage = new ValidationMessage();

            validationMessage.Validator = testValidator;

            viewModel.SomeStringProperty = "valid";
            viewModel.SomeStringProperty = "";

            Assert.AreEqual(ValidationStatus.Invalid, testValidator.ValidationResult.Status);
            Assert.IsTrue(validationMessage.ShowError);
        }
예제 #17
0
        public void ValidationResultReturnsFailureIfAnyValidatorsFail()
        {
            var validatableObject = new ValidatableTestObject();
            var validator         = PropertyValidator
                                    .For(validatableObject, o => o.SomeStringProperty)
                                    .Required("String may not be null or empty")
                                    .ValidIfTrue(value => value == "Inigo Montoya", "Error occurred!")
                                    .ValidIfTrue(value => value == "My name is not Inigo Montoya", "Doh!");

            validatableObject.SomeStringProperty = "My name is not Inigo Montoya";

            var result = validator.ValidationResult;

            Assert.IsFalse(result.IsValid);
            Assert.AreEqual("Error occurred!", result.Message);
        }
예제 #18
0
        public CredentialsViewModel()
        {
            LoginCommand  = new ActionCommand(_ => Result = AuthenticationDialogResult.Ok);
            CancelCommand = new ActionCommand(_ => Result = AuthenticationDialogResult.Cancel);

            LoginValidator = PropertyValidator.For(this, x => x.Login)
                             .Required(Resources.LoginRequired);

            PasswordValidator = PropertyValidator.For(this, x => x.Password)
                                .Required(Resources.PasswordRequired);

            ModelValidator = new ModelValidator(LoginValidator, PasswordValidator);
            ModelValidator.PropertyChanged += (s, e) =>
            {
                if (e.PropertyName == nameof(ModelValidator.IsValid))
                {
                    IsValid = ModelValidator.IsValid;
                }
            };
        }
예제 #19
0
        public CredentialsViewModel(string username)
        {
            LoginCommand          = new RelayCommand(Accept, () => IsValid);
            CancelCommand         = new RelayCommand(Cancel);
            ForgotPasswordCommand = new RelayCommand(() => BrowserHelper.OpenDefaultBrowser(BitbucketResources.PasswordResetUrl));
            SignUpCommand         = new RelayCommand(() => BrowserHelper.OpenDefaultBrowser(BitbucketResources.SignUpLinkUrl));

            LoginValidator    = PropertyValidator.For(this, x => x.Login).Required(BitbucketResources.LoginRequired);
            PasswordValidator = PropertyValidator.For(this, x => x.Password).Required(BitbucketResources.PasswordRequired);

            _modelValidator.Add(LoginValidator);
            _modelValidator.Add(PasswordValidator);
            _modelValidator.IsValidChanged += (s, e) => LoginCommand.RaiseCanExecuteChanged();

            // Set last to allow validator to run
            if (!string.IsNullOrWhiteSpace(username))
            {
                Login = username;
            }
        }
예제 #20
0
        public void ClassValidator_list_oneerror()
        {
            ClassValidator <Row> validator = ClassValidator <Row>
                                             .Init()
                                             .AddProperty(PropertyValidator <Row> .For(x => x.Key).IsNotNull())
                                             .AddProperty(PropertyValidator <Row> .For(x => x.DateTimeValue).IsNotNull()) // error
                                             .ValidateList(
                new List <Row>()
            {
                new Row()
                {
                    Key = "notnull", DateTimeValue = null
                },
                new Row()
                {
                    Key = "notnull", DateTimeValue = null
                }
            }
                );

            Assert.Equal(2, validator.ValidationErrors.Count);
        }
        public void IsNotNull_override_message()
        {
            PropertyValidator <Row> validatorA = PropertyValidator <Row> .For(x => x.Key);

            validatorA
            .IsNotNull().OverrideErrorMessage(m => $"override default message")
            .Validate(new Row()
            {
                Key = null
            });
            Assert.Equal("override default message", validatorA.ValidationErrors[0].ErrorMessage);

            PropertyValidator <Row> validatorB = PropertyValidator <Row> .For(x => x.Key);

            validatorB
            .IsNotNull().OverrideErrorMessage(m => $"override default message", true)
            .Validate(new Row()
            {
                Key = null
            });
            Assert.Equal("Field Key : override default message", validatorB.ValidationErrors[0].ErrorMessage);
        }
        public void EndToEndTestShowsErrorMessageWhenReactiveValidatorIsNotValid()
        {
            var textBox       = new TextBox();
            var viewModel     = new ValidatableTestObject();
            var testValidator = PropertyValidator.For(viewModel, x => x.SomeStringProperty)
                                .Required("Please enter some text");
            var validationMessage = new ValidationMessage();

            BindControlToViewModel(viewModel, nameof(viewModel.SomeStringProperty), textBox, TextBox.TextProperty);

            validationMessage.Validator = testValidator;

            Assert.IsFalse(validationMessage.ShowError);

            textBox.Text = "x";
            Assert.AreEqual("x", viewModel.SomeStringProperty);
            textBox.Text = "";
            Assert.AreEqual("", viewModel.SomeStringProperty);

            Assert.IsFalse(testValidator.ValidationResult.IsValid);
            Assert.IsTrue(validationMessage.ShowError);
        }
예제 #23
0
        public void ValidationResultNotifiesWhenValidationStateChanges()
        {
            var validatableObject = new ValidatableTestObject();
            // Validator validates that the property is equal to the string "Inigo Montoya".
            var validator = PropertyValidator
                            .For(validatableObject, o => o.SomeStringProperty)
                            .ValidIfTrue(value => value == "Inigo Montoya", "Error occurred!");
            PropertyValidationResult validationResult = null;

            validator.PropertyChanged += (s, e) =>
            {
                if (e.PropertyName == nameof(validator.ValidationResult))
                {
                    validationResult = validator.ValidationResult;
                }
            };
            Assert.IsNull(validationResult); // Precondition

            validatableObject.SomeStringProperty = "not empty";

            Assert.AreEqual(validationResult, validator.ValidationResult);
            Assert.IsFalse(validationResult.IsValid);
        }
예제 #24
0
        public void IsStringValues_without_and_with_ignore_case()
        {
            var row = new Row()
            {
                Key = "p"
            };

            PropertyValidator <Row> validatorMustFail = PropertyValidator <Row> .For(x => x.Key);

            validatorMustFail
            .IsNotNullOrEmpty()
            .IsStringValues(TypesValues)
            .Validate(row);
            Assert.False(validatorMustFail.IsValid);

            PropertyValidator <Row> validatorMustSuccess = PropertyValidator <Row> .For(x => x.Key);

            validatorMustSuccess
            .IsNotNullOrEmpty()
            .IsStringValues(TypesValues, StringComparer.CurrentCultureIgnoreCase)
            .Validate(row);
            Assert.True(validatorMustSuccess.IsValid);
        }
예제 #25
0
        public void ValidatorsRunInOrderAndStopWhenInvalid()
        {
            List <int> results           = new List <int>();
            var        validatableObject = new ValidatableTestObject();
            var        validator         = PropertyValidator
                                           .For(validatableObject, o => o.SomeStringProperty)
                                           .ValidIfTrue(value => { results.Add(0); return(true); }, "Error occurred!")
                                           .ValidIfTrue(value => { results.Add(1); return(true); }, "Error occurred!")
                                           .ValidIfTrue(value => { results.Add(2); return(true); }, "Error occurred!")
                                           .ValidIfTrue(value => { results.Add(3); return(false); }, "Error occurred!")
                                           .ValidIfTrue(value => { results.Add(4); return(true); }, "Error occurred!");

            validatableObject.SomeStringProperty = "My name is not Inigo Montoya";

            var result = validator.ValidationResult;

            Assert.IsFalse(result.IsValid);
            Assert.AreEqual("Error occurred!", result.Message);
            Assert.AreEqual(4, results.Count);
            for (int i = 0; i < 4; i++)
            {
                Assert.AreEqual(i, results[i]);
            }
        }
예제 #26
0
        public void IfTest_trials()
        {
            PropertyValidator <Row> validator = PropertyValidator <Row> .For(x => x.DecimalValue);

            validator.If(x => x.Key == "P", p => p.IsNotNull().TryParseDecimal());

            validator.Validate(new Row()
            {
                Key = "Z"
            });
            Assert.True(validator.IsValid);

            validator.Validate(new Row()
            {
                Key = "P"
            });
            Assert.False(validator.IsValid);

            validator.Validate(new Row()
            {
                Key = "P", DecimalValue = "123"
            });
            Assert.True(validator.IsValid);

            validator.Validate(new Row()
            {
                Key = "P", DecimalValue = "123,12"
            });                                                                   // test decimal separator
            Assert.True(validator.IsValid);

            validator.Validate(new Row()
            {
                Key = "Z", DecimalValue = "123,12"
            });
            Assert.True(validator.IsValid);
        }
        public CredentialsViewModel(string username)
        {
            LoginCommand  = new ActionCommand(_ => Result = AuthenticationDialogResult.Ok);
            CancelCommand = new ActionCommand(_ => Result = AuthenticationDialogResult.Cancel);

            LoginValidator = PropertyValidator.For(this, x => x.Login).Required(Resources.LoginRequired);

            PasswordValidator = PropertyValidator.For(this, x => x.Password).Required(Resources.PasswordRequired);

            ModelValidator = new ModelValidator(LoginValidator, PasswordValidator);
            ModelValidator.PropertyChanged += (s, e) =>
            {
                if (e.PropertyName == nameof(ModelValidator.IsValid))
                {
                    IsValid = ModelValidator.IsValid;
                }
            };

            // set last to allow validator to run
            if (!string.IsNullOrWhiteSpace(username))
            {
                Login = username;
            }
        }
예제 #28
0
        public void IsNotNull_should_fail()
        {
            PropertyValidator <Row> validator1 = PropertyValidator <Row> .For(x => x.Key);

            validator1
            .IsNotNull()
            .HasLength(1, 5)
            .Validate(new Row()
            {
                Key = ""
            });
            Assert.False(validator1.IsValid);

            PropertyValidator <Row> validator2 = PropertyValidator <Row> .For(x => x.Key);

            validator2
            .IsNotNull()
            .HasLength(0, 5)
            .Validate(new Row()
            {
                Key = "123456"
            });
            Assert.False(validator2.IsValid);
        }