Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

885 lines
32 KiB
C#

// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
using System.Collections.Specialized;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Moq;
using Xunit;
using Assert = Microsoft.TestCommon.AssertEx;
namespace System.Web.WebPages.Validation.Test
{
public class ValidatorTest
{
[Fact]
public void RequiredValidatorValidatesIfStringIsNull()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var requiredValidator = Validator.Required();
var validationContext = GetValidationContext(GetContext(), "foo");
// Act
var result = requiredValidator.Validate(validationContext);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("This field is required.", result.ErrorMessage);
Assert.Equal("foo", result.MemberNames.Single());
}
[Fact]
public void RequiredValidatorValidatesIfStringIsEmpty()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var requiredValidator = Validator.Required();
var validationContext = GetValidationContext(GetContext(new { foo = "" }), "foo");
// Act
var result = requiredValidator.Validate(validationContext);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("This field is required.", result.ErrorMessage);
Assert.Equal("foo", result.MemberNames.Single());
}
[Fact]
public void RequiredValidatorReturnsCustomErrorMessagesIfSpecified()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var requiredValidator = Validator.Required("There is no string");
var httpContext = GetContext(new { foo = "" });
var validationContext = GetValidationContext(httpContext, "foo");
// Act
var result = requiredValidator.Validate(validationContext);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("There is no string", result.ErrorMessage);
Assert.Equal("foo", result.MemberNames.Single());
}
[Fact]
public void RequiredValidatorReturnsSuccessIfNoFieldIsNotNullOrEmpty()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var requiredValidator = Validator.Required("foo");
var validationContext = GetValidationContext(GetContext(new { foo = "some value" }), "foo");
// Act
var result = requiredValidator.Validate(validationContext);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void GetClientValidationRulesForRequiredValidatorWithDefaultErrorMessage()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var requiredValidator = Validator.Required();
// Act
var result = requiredValidator.ClientValidationRule;
// Assert
Assert.Equal("required", result.ValidationType);
Assert.Equal("This field is required.", result.ErrorMessage);
Assert.False(result.ValidationParameters.Any());
}
[Fact]
public void GetClientValidationRulesForRequiredValidatorWithCustomErrorMessage()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var requiredValidator = Validator.Required("custom message");
// Act
var result = requiredValidator.ClientValidationRule;
// Assert
Assert.Equal("required", result.ValidationType);
Assert.Equal("custom message", result.ErrorMessage);
Assert.False(result.ValidationParameters.Any());
}
[Fact]
public void RangeValidatorReturnsSuccessIfValueIsInRange()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var rangeValidator = Validator.Range(10, 12);
var validationContext = GetValidationContext(GetContext(new { foo = 11 }), "foo");
// Act
var result = rangeValidator.Validate(validationContext);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void RangeValidatorReturnsDefaultErrorMessageIfValueIsNotInRange()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var rangeValidator = Validator.Range(10, 12);
var validationContext = GetValidationContext(GetContext(new { foo = 7 }), "foo");
// Act
var result = rangeValidator.Validate(validationContext);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Value must be an integer between 10 and 12.", result.ErrorMessage);
Assert.Equal("foo", result.MemberNames.Single());
}
[Fact]
public void RangeValidatorReturnsDefaultErrorMessageIfValueIsNotInRangeForFloatingPointValues()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var rangeValidator = Validator.Range(10.8, 12.2);
var validationContext = GetValidationContext(GetContext(new { foo = 7 }), "foo");
// Act
var result = rangeValidator.Validate(validationContext);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Value must be a decimal between 10.8 and 12.2.", result.ErrorMessage);
Assert.Equal("foo", result.MemberNames.Single());
}
[Fact]
public void RangeValidatorReturnsCustomErrorMessageIfSpecified()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var rangeValidator = Validator.Range(10, 12, "Custom error message");
var validationContext = GetValidationContext(GetContext(new { foo = 13 }), "foo");
// Act
var result = rangeValidator.Validate(validationContext);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Custom error message", result.ErrorMessage);
Assert.Equal("foo", result.MemberNames.Single());
}
[Fact]
public void RangeValidatorFormatsCustomErrorMessage()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var rangeValidator = Validator.Range(10, 12, "Valid range: {0}-{1}");
var validationContext = GetValidationContext(GetContext(new { foo = 13 }), "foo");
// Act
var result = rangeValidator.Validate(validationContext);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Valid range: 10-12", result.ErrorMessage);
Assert.Equal("foo", result.MemberNames.Single());
}
[Fact]
public void GetClientValidationRulesForRangeValidatorWithDefaultErrorMessage()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var rangeValidator = Validator.Range(10, 12);
// Act
var result = rangeValidator.ClientValidationRule;
// Assert
Assert.Equal("range", result.ValidationType);
Assert.Equal("Value must be an integer between 10 and 12.", result.ErrorMessage);
Assert.Equal(10, result.ValidationParameters["min"]);
Assert.Equal(12, result.ValidationParameters["max"]);
}
[Fact]
public void GetClientValidationRulesForRangeValidatorWithCustomErrorMessage()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var rangeValidator = Validator.Range(10, 11, "Range: {0}-{1}");
// Act
var result = rangeValidator.ClientValidationRule;
// Assert
Assert.Equal("range", result.ValidationType);
Assert.Equal("Range: 10-11", result.ErrorMessage);
Assert.Equal(10, result.ValidationParameters["min"]);
Assert.Equal(11, result.ValidationParameters["max"]);
}
[Fact]
public void StringLengthValidatorReturnsSuccessIfStringLengthIsSmallerThanMaxValue()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.StringLength(10);
var validationContext = GetValidationContext(GetContext(new { baz = "hello" }), "baz");
// Act
var result = validator.Validate(validationContext);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void StringLengthValidatorReturnsSuccessIfStringLengthIsRangeOfMinAndMaxValue()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.StringLength(10, minLength: 6);
var validationContext = GetValidationContext(GetContext(new { bar = "woof woof" }), "bar");
// Act
var result = validator.Validate(validationContext);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void StringLengthValidatorReturnsFailureIfStringLengthIsLongerThanMaxValue()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.StringLength(4);
var validationContext = GetValidationContext(GetContext(new { baz = "woof woof" }), "baz");
// Act
var result = validator.Validate(validationContext);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Max length: 4.", result.ErrorMessage);
Assert.Equal("baz", result.MemberNames.Single());
}
[Fact]
public void StringLengthValidatorReturnsCustomErrorMessageIfStringLengthIsLongerThanMaxValue()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.StringLength(4, errorMessage: "String must be at least {0} characters long.");
var validationContext = GetValidationContext(GetContext(new { baz = "woof woof" }), "baz");
// Act
var result = validator.Validate(validationContext);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("String must be at least 4 characters long.", result.ErrorMessage);
Assert.Equal("baz", result.MemberNames.Single());
}
[Fact]
public void StringLengthValidatorReturnsFailureIfStringLengthIsNotInRange()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.StringLength(6, 4);
var validationContext = GetValidationContext(GetContext(new { baz = "woof woof" }), "baz");
// Act
var result = validator.Validate(validationContext);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("String must be between 4 and 6 characters.", result.ErrorMessage);
Assert.Equal("baz", result.MemberNames.Single());
}
[Fact]
public void StringLengthValidatorReturnsCustomErrorMessageIfStringLengthIsNotInRange()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.StringLength(6, 4, "Range {0} - {1}");
var validationContext = GetValidationContext(GetContext(new { baz = "woof woof" }), "baz");
// Act
var result = validator.Validate(validationContext);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Range 4 - 6", result.ErrorMessage);
Assert.Equal("baz", result.MemberNames.Single());
}
[Fact]
public void GetClientValidationRulesForStringLengthValidatorWithDefaultErrorMessage()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.StringLength(6, 4);
// Act
var result = validator.ClientValidationRule;
// Assert
Assert.Equal(result.ValidationType, "length");
Assert.Equal(result.ErrorMessage, "String must be between 4 and 6 characters.");
Assert.Equal(result.ValidationParameters["min"], 4);
Assert.Equal(result.ValidationParameters["max"], 6);
}
[Fact]
public void GetClientValidationRulesForStringLengthValidatorWithCustomErrorMessage()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.StringLength(6, errorMessage: "Must be at least 6 letters.");
// Act
var result = validator.ClientValidationRule;
// Assert
Assert.Equal(result.ValidationType, "length");
Assert.Equal(result.ErrorMessage, "Must be at least 6 letters.");
Assert.Equal(result.ValidationParameters["max"], 6);
}
[Fact]
public void RegexThrowsIfPatternIsNullOrEmpty()
{
// Act and Assert
Assert.ThrowsArgumentNullOrEmptyString(() => Validator.Regex(null), "pattern");
Assert.ThrowsArgumentNullOrEmptyString(() => Validator.Regex(String.Empty), "pattern");
}
[Fact]
public void RegexReturnsSuccessIfValueMatches()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Regex("^a+b+c$");
var context = GetValidationContext(GetContext(new { foo = "aaabbc" }), "foo");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void RegexReturnsDefaultErrorMessageIfValidationFails()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Regex("^a+b+c$");
var context = GetValidationContext(GetContext(new { foo = "aaXabbc" }), "foo");
// Act
var result = validator.Validate(context);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Value is invalid.", result.ErrorMessage);
Assert.Equal("foo", result.MemberNames.Single());
}
[Fact]
public void RegexReturnsCustomErrorMessageIfValidationFails()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Regex("^a+b+c$");
var context = GetValidationContext(GetContext(new { foo = "aaXabbc" }), "foo");
// Act
var result = validator.Validate(context);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Value is invalid.", result.ErrorMessage);
Assert.Equal("foo", result.MemberNames.Single());
}
[Fact]
public void IntegerReturnsSuccessIfValueIsNull()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Integer();
var context = GetValidationContext(GetContext(new { Name = "Not-Age" }), "age");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void IntegerReturnsSuccessIfValueIsEmpty()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Integer();
var context = GetValidationContext(GetContext(new { Age = "" }), "age");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void IntegerReturnsSuccessIfValueIsValidInteger()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Integer();
var context = GetValidationContext(GetContext(new { Age = "10" }), "age");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void IntegerReturnsSuccessIfValueIsNegativeInteger()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Integer();
var context = GetValidationContext(GetContext(new { Age = "-42" }), "age");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void IntegerReturnsSuccessIfValueIsZero()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Integer();
var context = GetValidationContext(GetContext(new { Age = 0 }), "age");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void IntegerReturnsErrorMessageIfValueIsFloatingPointValue()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Integer();
var context = GetValidationContext(GetContext(new { Age = 1.3 }), "age");
// Act
var result = validator.Validate(context);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Input format is invalid.", result.ErrorMessage);
Assert.Equal("age", result.MemberNames.Single());
}
[Fact]
public void IntegerReturnsErrorMessageIfValueIsNotAnInteger()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Integer();
var context = GetValidationContext(GetContext(new { Age = "2008-04-01" }), "age");
// Act
var result = validator.Validate(context);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Input format is invalid.", result.ErrorMessage);
Assert.Equal("age", result.MemberNames.Single());
}
[Fact]
public void FloatReturnsSuccessIfValueIsNull()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Float();
var context = GetValidationContext(GetContext(new { }), "Price");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void FloatReturnsSuccessIfValueIsEmptyString()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Float();
var context = GetValidationContext(GetContext(new { Price = "" }), "Price");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void FloatReturnsSuccessIfValueIsValidFloatString()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Float();
var context = GetValidationContext(GetContext(new { Price = Single.MaxValue.ToString() }), "Price");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void FloatReturnsSuccessIfValueIsValidInteger()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Float();
var context = GetValidationContext(GetContext(new { Price = "1" }), "Price");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void FloatReturnsErrorIfValueIsNotAValidFloat()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Float();
var context = GetValidationContext(GetContext(new { Price = "Free!!!" }), "Price");
// Act
var result = validator.Validate(context);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Input format is invalid.", result.ErrorMessage);
Assert.Equal("Price", result.MemberNames.Single());
}
[Fact]
public void DateTimeReturnsSuccessIfValueIsNull()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.DateTime();
var context = GetValidationContext(GetContext(new { }), "dateOfBirth");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void DateTimeReturnsSuccessIfValueIsEmpty()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.DateTime();
var context = GetValidationContext(GetContext(new { dateOfBirth = "" }), "dateOfBirth");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void DateTimeReturnsSuccessIfValueIsValidDateTime()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.DateTime();
var context = GetValidationContext(GetContext(new { dateOfBirth = DateTime.Now.ToString() }), "dateOfBirth");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void DateTimeReturnsErrorIfValueIsInvalidDateTime()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.DateTime();
var context = GetValidationContext(GetContext(new { dateOfBirth = "23.28" }), "dateOfBirth");
// Act
var result = validator.Validate(context);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Input format is invalid.", result.ErrorMessage);
Assert.Equal("dateOfBirth", result.MemberNames.Single());
}
[Fact]
public void UrlReturnsSuccessIfInputIsNull()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Url();
var context = GetValidationContext(GetContext(new { }), "blogUrl");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void UrlReturnsSuccessIfInputIsEmptyString()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Url();
var context = GetValidationContext(GetContext(new { blogUrl = "" }), "blogUrl");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void UrlReturnsSuccessIfInputIsValidUrl()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Url();
var context = GetValidationContext(GetContext(new { blogUrl = "http://www.microsoft.com?query-param=query-param-value&some-val="true"" }), "blogUrl");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void UrlReturnsErrorMessageIfInputIsPhysicalPath()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Url();
var context = GetValidationContext(GetContext(new { blogUrl = @"x:\some-path\foo.txt" }), "blogUrl");
// Act
var result = validator.Validate(context);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Input format is invalid.", result.ErrorMessage);
Assert.Equal("blogUrl", result.MemberNames.Single());
}
[Fact]
public void UrlReturnsErrorMessageIfInputIsNetworkPath()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Url();
var context = GetValidationContext(GetContext(new { blogUrl = @"\\network-share\some-path\" }), "blogUrl");
// Act
var result = validator.Validate(context);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Input format is invalid.", result.ErrorMessage);
Assert.Equal("blogUrl", result.MemberNames.Single());
}
[Fact]
public void UrlReturnsErrorMessageIfInputIsNotAnUrl()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Url();
var context = GetValidationContext(GetContext(new { blogUrl = 65 }), "blogUrl");
// Act
var result = validator.Validate(context);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Input format is invalid.", result.ErrorMessage);
Assert.Equal("blogUrl", result.MemberNames.Single());
}
[Fact]
public void EqualsToValidatorThrowsIfFieldIsNullOrEmpty()
{
// Act and Assert
Assert.ThrowsArgumentNullOrEmptyString(() => Validator.EqualsTo(null), "otherFieldName");
}
[Fact]
public void EqualsToValidatorReturnsFalseIfEitherFieldIsEmpty()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.EqualsTo("password");
var context = GetValidationContext(GetContext(new { password = "", confirmPassword = "abcd" }), "confirmPassword");
// Act
var result = validator.Validate(context);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Values do not match.", result.ErrorMessage);
Assert.Equal("confirmPassword", result.MemberNames.Single());
context = GetValidationContext(GetContext(new { password = "abcd", confirmPassword = "" }), "confirmPassword");
// Act
result = validator.Validate(context);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Values do not match.", result.ErrorMessage);
Assert.Equal("confirmPassword", result.MemberNames.Single());
}
[Fact]
public void EqualsToValidatorReturnsFalseIfValuesDoNotMatch()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.EqualsTo("password");
var context = GetValidationContext(GetContext(new { password = "password2", confirmPassword = "abcd" }), "confirmPassword");
// Act
var result = validator.Validate(context);
// Assert
Assert.NotEqual(ValidationResult.Success, result);
Assert.Equal("Values do not match.", result.ErrorMessage);
Assert.Equal("confirmPassword", result.MemberNames.Single());
}
[Fact]
public void EqualsToValidatorReturnsTrueIfValuesMatch()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.EqualsTo("password");
var context = GetValidationContext(GetContext(new { password = "abcd", confirmPassword = "abcd" }), "confirmPassword");
// Act
var result = validator.Validate(context);
// Assert
Assert.Equal(ValidationResult.Success, result);
}
[Fact]
public void GetClientValidationRulesForRegex()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Regex("^a+b+c$");
// Act
var result = validator.ClientValidationRule;
// Assert
Assert.Equal("regex", result.ValidationType);
Assert.Equal("Value is invalid.", result.ErrorMessage);
Assert.Equal("^a+b+c$", result.ValidationParameters["pattern"]);
}
[Fact]
public void GetClientValidationRulesForRegexWithCustomErrorMessage()
{
// Arrange
RequestFieldValidatorBase.IgnoreUseUnvalidatedValues = true;
var validator = Validator.Regex("^a+b+c$", "Example aaabbc");
// Act
var result = validator.ClientValidationRule;
// Assert
Assert.Equal("regex", result.ValidationType);
Assert.Equal("Example aaabbc", result.ErrorMessage);
Assert.Equal("^a+b+c$", result.ValidationParameters["pattern"]);
}
private static HttpContextBase GetContext(object formValues = null)
{
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
var nameValueCollection = new NameValueCollection();
if (formValues != null)
{
foreach (var prop in formValues.GetType().GetProperties())
{
nameValueCollection.Add(prop.Name, prop.GetValue(formValues, null).ToString());
}
}
request.SetupGet(c => c.Form).Returns(nameValueCollection);
context.SetupGet(c => c.Request).Returns(request.Object);
return context.Object;
}
private static ValidationContext GetValidationContext(HttpContextBase httpContext, string memberName)
{
return new ValidationContext(httpContext, null, null) { MemberName = memberName };
}
}
}