public void ClientRulesWithCompareAttribute_ErrorMessageUsesDisplayName() { // Arrange var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = metadataProvider.GetMetadataForProperty(typeof(PropertyDisplayNameModel), "MyProperty"); var attribute = new CompareAttribute("OtherProperty"); var adapter = new CompareAttributeAdapter(attribute, stringLocalizer: null); var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, metadataProvider, requestServices); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); // Mono issue - https://github.com/aspnet/External/issues/19 Assert.Equal( PlatformNormalizer.NormalizeContent( "'MyPropertyDisplayName' and 'OtherPropertyDisplayName' do not match."), rule.ErrorMessage); }
public void GetClientValidationRules_ReturnsValidationParameters() { // Arrange var provider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), "Length"); var attribute = new RangeAttribute(typeof(decimal), "0", "100"); attribute.ErrorMessage = "The field Length must be between {1} and {2}."; var expectedProperties = new object[] { "Length", 0m, 100m }; var expectedMessage = "The field Length must be between 0 and 100."; var stringLocalizer = new Mock<IStringLocalizer>(); stringLocalizer.Setup(s => s[attribute.ErrorMessage, expectedProperties]) .Returns(new LocalizedString(attribute.ErrorMessage, expectedMessage)); var adapter = new RangeAttributeAdapter(attribute, stringLocalizer: stringLocalizer.Object); var actionContext = new ActionContext(); var context = new ClientModelValidationContext(actionContext, metadata, provider); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("range", rule.ValidationType); Assert.Equal(2, rule.ValidationParameters.Count); Assert.Equal(0m, rule.ValidationParameters["min"]); Assert.Equal(100m, rule.ValidationParameters["max"]); Assert.Equal(expectedMessage, rule.ErrorMessage); }
public void GetClientValidationRules_ReturnsValidationParameters_Localize() { // Arrange var provider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), "Length"); var attribute = new RequiredAttribute(); var expectedProperties = new object[] { "Length" }; var message = "This paramter is required."; var expectedMessage = "FR This parameter is required."; attribute.ErrorMessage = message; var stringLocalizer = new Mock<IStringLocalizer>(); stringLocalizer.Setup(s => s[attribute.ErrorMessage, expectedProperties]) .Returns(new LocalizedString(attribute.ErrorMessage, expectedMessage)); var adapter = new RequiredAttributeAdapter(attribute, stringLocalizer: stringLocalizer.Object); var actionContext = new ActionContext(); var context = new ClientModelValidationContext(actionContext, metadata, provider); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("required", rule.ValidationType); Assert.Empty(rule.ValidationParameters); Assert.Equal(expectedMessage, rule.ErrorMessage); }
public void ClientRulesWithMinLengthAttribute_Localize() { // Arrange var provider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), "Length"); var attribute = new MinLengthAttribute(6); attribute.ErrorMessage = "Property must be at least '{1}' characters long."; var expectedProperties = new object[] { "Length", 6 }; var expectedMessage = "Property must be at least '6' characters long."; var stringLocalizer = new Mock<IStringLocalizer>(); stringLocalizer.Setup(s => s[attribute.ErrorMessage, expectedProperties]) .Returns(new LocalizedString(attribute.ErrorMessage, expectedMessage)); var adapter = new MinLengthAttributeAdapter(attribute, stringLocalizer: stringLocalizer.Object); var actionContext = new ActionContext(); var context = new ClientModelValidationContext(actionContext, metadata, provider); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("minlength", rule.ValidationType); Assert.Equal(1, rule.ValidationParameters.Count); Assert.Equal(6, rule.ValidationParameters["min"]); Assert.Equal(attribute.FormatErrorMessage("Length"), rule.ErrorMessage); }
public void ClientRulesWithMaxLengthAttribute_StringLocalizer_ReturnsLocalizedErrorString() { // Arrange var provider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), "Length"); var errorKey = metadata.GetDisplayName(); var attribute = new MaxLengthAttribute(10); attribute.ErrorMessage = errorKey; var localizedString = new LocalizedString(errorKey, "Longueur est invalide"); var stringLocalizer = new Mock<IStringLocalizer>(); stringLocalizer.Setup(s => s[errorKey]).Returns(localizedString); var adapter = new MaxLengthAttributeAdapter(attribute, stringLocalizer.Object); var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, provider, requestServices); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("maxlength", rule.ValidationType); Assert.Equal(1, rule.ValidationParameters.Count); Assert.Equal(10, rule.ValidationParameters["max"]); Assert.Equal("Longueur est invalide", rule.ErrorMessage); }
public void GetClientValidationRules_WithMaxLength_ReturnsValidationParameters_Localize() { // Arrange var provider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), "Length"); var attribute = new StringLengthAttribute(8); attribute.ErrorMessage = "Property must not be longer than '{1}' characters."; var expectedMessage = "Property must not be longer than '8' characters."; var stringLocalizer = new Mock<IStringLocalizer>(); var expectedProperties = new object[] { "Length", 0, 8 }; stringLocalizer.Setup(s => s[attribute.ErrorMessage, expectedProperties]) .Returns(new LocalizedString(attribute.ErrorMessage, expectedMessage)); var adapter = new StringLengthAttributeAdapter(attribute, stringLocalizer: stringLocalizer.Object); var actionContext = new ActionContext(); var context = new ClientModelValidationContext(actionContext, metadata, provider); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("length", rule.ValidationType); Assert.Equal(1, rule.ValidationParameters.Count); Assert.Equal(8, rule.ValidationParameters["max"]); Assert.Equal(expectedMessage, rule.ErrorMessage); }
public void ClientRulesWithCompareAttribute_ErrorMessageUsesDisplayName() { // Arrange var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = metadataProvider.GetMetadataForProperty(typeof(PropertyDisplayNameModel), "MyProperty"); var attribute = new CompareAttribute("OtherProperty"); attribute.ErrorMessage = "CompareAttributeErrorMessage"; var stringLocalizer = new Mock<IStringLocalizer>(); var expectedProperties = new object[] { "MyPropertyDisplayName", "OtherPropertyDisplayName" }; var expectedMessage = "'MyPropertyDisplayName' and 'OtherPropertyDisplayName' do not match."; stringLocalizer.Setup(s => s[attribute.ErrorMessage, expectedProperties]) .Returns(new LocalizedString(attribute.ErrorMessage, expectedMessage)); var adapter = new CompareAttributeAdapter(attribute, stringLocalizer: stringLocalizer.Object); var actionContext = new ActionContext(); var context = new ClientModelValidationContext(actionContext, metadata, metadataProvider); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); // Mono issue - https://github.com/aspnet/External/issues/19 Assert.Equal(expectedMessage, rule.ErrorMessage); }
/// <inheritdoc /> public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ClientModelValidationContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } return new[] { new ModelClientValidationNumericRule(GetErrorMessage(context.ModelMetadata)) }; }
public void ClientRulesWithCompareAttribute_ErrorMessageUsesPropertyName() { // Arrange var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = metadataProvider.GetMetadataForProperty(typeof(PropertyNameModel), "MyProperty"); var attribute = new CompareAttribute("OtherProperty"); var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, metadataProvider, requestServices); var adapter = new CompareAttributeAdapter(attribute); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("'MyProperty' and 'OtherProperty' do not match.", rule.ErrorMessage); }
public void ClientRulesWithCorrectValidationTypeAndErrorMessage() { // Arrange var provider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = provider.GetMetadataForProperty(typeof(TypeWithNumericProperty), "Id"); var adapter = new NumericClientModelValidator(); var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, provider, requestServices); var expectedMessage = "The field DisplayId must be a number."; // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("number", rule.ValidationType); Assert.Equal(expectedMessage, rule.ErrorMessage); }
public void ClientRulesWithCompareAttribute_ErrorMessageUsesOverride() { // Arrange var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = metadataProvider.GetMetadataForProperty( typeof(PropertyNameModel), "MyProperty"); var attribute = new CompareAttribute("OtherProperty") { ErrorMessage = "Hello '{0}', goodbye '{1}'." }; var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, metadataProvider, requestServices); var adapter = new CompareAttributeAdapter(attribute, stringLocalizer: null); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("Hello 'MyProperty', goodbye 'OtherProperty'.", rule.ErrorMessage); }
public void GetClientValidationRules_ReturnsEmptyRuleSet() { // Arrange var attribute = new FileExtensionsAttribute(); var validator = new DataAnnotationsModelValidator <FileExtensionsAttribute>(attribute); var metadata = _metadataProvider.GetMetadataForProperty( containerType: typeof(string), propertyName: nameof(string.Length)); var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, _metadataProvider, requestServices); // Act var results = validator.GetClientValidationRules(context); // Assert Assert.Empty(results); }
public void ClientRulesWithMaxLengthAttribute() { // Arrange var provider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), "Length"); var attribute = new MaxLengthAttribute(10); var adapter = new MaxLengthAttributeAdapter(attribute, stringLocalizer: null); var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, provider, requestServices); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("maxlength", rule.ValidationType); Assert.Equal(1, rule.ValidationParameters.Count); Assert.Equal(10, rule.ValidationParameters["max"]); Assert.Equal(attribute.FormatErrorMessage("Length"), rule.ErrorMessage); }
private string GetOtherPropertyDisplayName(ClientModelValidationContext context) { // The System.ComponentModel.DataAnnotations.CompareAttribute doesn't populate the // OtherPropertyDisplayName until after IsValid() is called. Therefore, by the time we get // the error message for client validation, the display name is not populated and won't be used. var metadata = context.ModelMetadata; var otherPropertyDisplayName = OtherPropertyDisplayName; if (otherPropertyDisplayName == null && metadata.ContainerType != null) { var otherProperty = context.MetadataProvider.GetMetadataForProperty( metadata.ContainerType, OtherProperty); if (otherProperty != null) { return(otherProperty.GetDisplayName()); } } return(OtherProperty); }
public void GetClientValidationRules_ReturnsValidationParameters() { // Arrange var expected = ValidationAttributeUtil.GetRequiredErrorMessage("Length"); var provider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), "Length"); var attribute = new RequiredAttribute(); var adapter = new RequiredAttributeAdapter(attribute); var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, provider, requestServices); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("required", rule.ValidationType); Assert.Empty(rule.ValidationParameters); Assert.Equal(expected, rule.ErrorMessage); }
public void GetClientValidationRules_ReturnsValidationParameters() { // Arrange var provider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), "Length"); var attribute = new RangeAttribute(typeof(decimal), "0", "100"); var adapter = new RangeAttributeAdapter(attribute); var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, provider, requestServices); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("range", rule.ValidationType); Assert.Equal(2, rule.ValidationParameters.Count); Assert.Equal(0m, rule.ValidationParameters["min"]); Assert.Equal(100m, rule.ValidationParameters["max"]); Assert.Equal(@"The field Length must be between 0 and 100.", rule.ErrorMessage); }
public void GetClientValidationRules_WithMaxLength_ReturnsValidationParameters() { // Arrange var provider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), "Length"); var attribute = new StringLengthAttribute(8); var adapter = new StringLengthAttributeAdapter(attribute, stringLocalizer: null); var actionContext = new ActionContext(); var context = new ClientModelValidationContext(actionContext, metadata, provider); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("length", rule.ValidationType); Assert.Equal(1, rule.ValidationParameters.Count); Assert.Equal(8, rule.ValidationParameters["max"]); Assert.Equal(attribute.FormatErrorMessage("Length"), rule.ErrorMessage); }
public void ClientRulesWithCompareAttribute_ErrorMessageUsesPropertyName() { // Arrange var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = metadataProvider.GetMetadataForProperty(typeof(PropertyNameModel), "MyProperty"); var attribute = new CompareAttribute("OtherProperty"); var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, metadataProvider, requestServices); var adapter = new CompareAttributeAdapter(attribute, stringLocalizer: null); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); // Mono issue - https://github.com/aspnet/External/issues/19 Assert.Equal( PlatformNormalizer.NormalizeContent("'MyProperty' and 'OtherProperty' do not match."), rule.ErrorMessage); }
public void ClientRulesWithMaxLengthAttribute() { // Arrange var provider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), "Length"); var attribute = new MaxLengthAttribute(10); var adapter = new MaxLengthAttributeAdapter(attribute); var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, provider, requestServices); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("maxlength", rule.ValidationType); Assert.Equal(1, rule.ValidationParameters.Count); Assert.Equal(10, rule.ValidationParameters["max"]); Assert.Equal(attribute.FormatErrorMessage("Length"), rule.ErrorMessage); }
public void ClientRulesWithCompareAttribute_ErrorMessageUsesOverride() { // Arrange var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = metadataProvider.GetMetadataForProperty(typeof(PropertyNameModel), "MyProperty"); var attribute = new CompareAttribute("OtherProperty") { ErrorMessage = "Hello '{0}', goodbye '{1}'." }; var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, metadataProvider, requestServices); var adapter = new CompareAttributeAdapter(attribute, stringLocalizer: null); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("Hello 'MyProperty', goodbye 'OtherProperty'.", rule.ErrorMessage); }
public void ClientRulesWithCompareAttribute_ErrorMessageUsesResourceOverride() { // Arrange var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = metadataProvider.GetMetadataForProperty(typeof(PropertyNameModel), "MyProperty"); var attribute = new CompareAttribute("OtherProperty") { ErrorMessageResourceName = "CompareAttributeTestResource", ErrorMessageResourceType = typeof(DataAnnotations.Test.Resources), }; var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, metadataProvider, requestServices); var adapter = new CompareAttributeAdapter(attribute, stringLocalizer: null); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("Comparing MyProperty to OtherProperty.", rule.ErrorMessage); }
public void ClientRulesWithMinLengthAttributeAndCustomMessage() { // Arrange var propertyName = "Length"; var message = "Array must have at least {1} items."; var provider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), propertyName); var attribute = new MinLengthAttribute(2) { ErrorMessage = message }; var adapter = new MinLengthAttributeAdapter(attribute); var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, provider, requestServices); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("minlength", rule.ValidationType); Assert.Equal(1, rule.ValidationParameters.Count); Assert.Equal(2, rule.ValidationParameters["min"]); Assert.Equal("Array must have at least 2 items.", rule.ErrorMessage); }
public void GetClientValidationRules_WithIClientModelValidator_CallsAttribute() { // Arrange var attribute = new TestableAttribute(); var validator = new DataAnnotationsModelValidator<TestableAttribute>(attribute); var metadata = _metadataProvider.GetMetadataForProperty( containerType: typeof(string), propertyName: nameof(string.Length)); var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, _metadataProvider, requestServices); // Act var results = validator.GetClientValidationRules(context); // Assert var rule = Assert.Single(results); Assert.Equal("an error", rule.ErrorMessage); Assert.Empty(rule.ValidationParameters); Assert.Equal("testable", rule.ValidationType); }
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ClientModelValidationContext context) { return new[] { new ModelClientValidationRule(validationType: "testable", errorMessage: "an error") }; }
public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ClientModelValidationContext context) { return(new[] { new ModelClientValidationRule(validationType: "testable", errorMessage: "an error") }); }
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ClientModelValidationContext context) { yield return new ModelClientValidationRule("productnamevalidation", ErrorMessage); }
/// <inheritdoc /> public abstract IEnumerable <ModelClientValidationRule> GetClientValidationRules( ClientModelValidationContext context);
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ClientModelValidationContext context) { return Enumerable.Empty<ModelClientValidationRule>(); }
/// <inheritdoc /> public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ClientModelValidationContext context) { return(new[] { new ModelClientValidationNumericRule(GetErrorMessage(context.ModelMetadata)) }); }
public void ClientRulesWithCompareAttribute_ErrorMessageUsesResourceOverride() { // Arrange var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = metadataProvider.GetMetadataForProperty(typeof(PropertyNameModel), "MyProperty"); var attribute = new CompareAttribute("OtherProperty") { ErrorMessageResourceName = "CompareAttributeTestResource", ErrorMessageResourceType = typeof(DataAnnotations.Test.Resources), }; var adapter = new CompareAttributeAdapter(attribute, stringLocalizer: null); var actionContext = new ActionContext(); var context = new ClientModelValidationContext(actionContext, metadata, metadataProvider); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("Comparing MyProperty to OtherProperty.", rule.ErrorMessage); }
public IEnumerable <ModelClientValidationRule> GetClientValidationRules(ClientModelValidationContext context) { return(Enumerable.Empty <ModelClientValidationRule>()); }
/// <inheritdoc /> /// <exception cref="InvalidOperationException"> /// Thrown if unable to generate a target URL for a validation request. /// </exception> public virtual IEnumerable<ModelClientValidationRule> GetClientValidationRules( ClientModelValidationContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } var metadata = context.ModelMetadata; var rule = new ModelClientValidationRemoteRule( FormatErrorMessage(metadata.GetDisplayName()), GetUrl(context), HttpMethod, FormatAdditionalFieldsForClientValidation(metadata.PropertyName)); return new[] { rule }; }
/// <summary> /// Returns the URL where the client should send a validation request. /// </summary> /// <param name="context">The <see cref="ClientModelValidationContext"/> used to generate the URL.</param> /// <returns>The URL where the client should send a validation request.</returns> protected virtual string GetUrl(ClientModelValidationContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } var services = context.ActionContext.HttpContext.RequestServices; var factory = services.GetRequiredService<IUrlHelperFactory>(); var urlHelper = factory.GetUrlHelper(context.ActionContext); var url = urlHelper.RouteUrl(new UrlRouteContext() { RouteName = this.RouteName, Values = RouteData, }); if (url == null) { throw new InvalidOperationException(Resources.RemoteAttribute_NoUrlFound); } return url; }
/// <inheritdoc /> public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ClientModelValidationContext context) { return new[] { new ModelClientValidationNumericRule(GetErrorMessage(context.ModelMetadata)) }; }
public void ClientRulesWithMaxLengthAttributeAndCustomMessage() { // Arrange var propertyName = "Length"; var message = "{0} must be at most {1}"; var provider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = provider.GetMetadataForProperty(typeof(string), propertyName); var attribute = new MaxLengthAttribute(5) { ErrorMessage = message }; var adapter = new MaxLengthAttributeAdapter(attribute, stringLocalizer: null); var actionContext = new ActionContext(); var context = new ClientModelValidationContext(actionContext, metadata, provider); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("maxlength", rule.ValidationType); Assert.Equal(1, rule.ValidationParameters.Count); Assert.Equal(5, rule.ValidationParameters["max"]); Assert.Equal("Length must be at most 5", rule.ErrorMessage); }
GetClientValidationRules(ClientModelValidationContext context) { yield return new ModelClientValidationRule("classicmovie", "Classic movies must have a release year earlier than " + this._year); }
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ClientModelValidationContext context) { throw new NotImplementedException(); }
public void ClientRulesWithCompareAttribute_ErrorMessageUsesResourceOverride() { if (TestPlatformHelper.IsMono) { // ValidationAttribute in Mono does not read non-public resx properties. return; } // Arrange var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); var metadata = metadataProvider.GetMetadataForProperty(typeof(PropertyNameModel), "MyProperty"); var attribute = new CompareAttribute("OtherProperty") { ErrorMessageResourceName = "CompareAttributeTestResource", ErrorMessageResourceType = typeof(Extensions.Test.Resources), }; var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, metadataProvider, requestServices); var adapter = new CompareAttributeAdapter(attribute); // Act var rules = adapter.GetClientValidationRules(context); // Assert var rule = Assert.Single(rules); Assert.Equal("Comparing MyProperty to OtherProperty.", rule.ErrorMessage); }
public void GetClientValidationRules_ReturnsEmptyRuleSet() { // Arrange var attribute = new FileExtensionsAttribute(); var validator = new DataAnnotationsModelValidator<FileExtensionsAttribute>(attribute); var metadata = _metadataProvider.GetMetadataForProperty( containerType: typeof(string), propertyName: nameof(string.Length)); var serviceCollection = new ServiceCollection(); var requestServices = serviceCollection.BuildServiceProvider(); var context = new ClientModelValidationContext(metadata, _metadataProvider, requestServices); // Act var results = validator.GetClientValidationRules(context); // Assert Assert.Empty(results); }