public void ClientRulesWithCompareAttribute_ErrorMessageUsesResourceOverride() { if (TestPlatformHelper.IsMono) { // ValidationAttribute in Mono does not read non-public resx properties. return; } // Arrange var metadataProvider = new DataAnnotationsModelMetadataProvider(); var metadata = metadataProvider.GetMetadataForProperty(() => null, typeof(PropertyNameModel), "MyProperty"); var attribute = new CompareAttribute("OtherProperty") { ErrorMessageResourceName = "CompareAttributeTestResource", ErrorMessageResourceType = typeof(Test.Resources), }; var context = new ClientModelValidationContext(metadata, metadataProvider); 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 ClientRulesWithCompareAttribute_ErrorMessageUsesPropertyName() { // Arrange var metadataProvider = new DataAnnotationsModelMetadataProvider(); var metadata = metadataProvider.GetMetadataForProperty(() => null, typeof(PropertyNameModel), "MyProperty"); var attribute = new CompareAttribute("OtherProperty"); var context = new ClientModelValidationContext(metadata, metadataProvider); 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); }
/// <summary> /// Creates an <see cref="IAttributeAdapter"/> for the given attribute. /// </summary> /// <param name="attribute">The attribute to create an adapter for.</param> /// <param name="stringLocalizer">The localizer to provide to the adapter.</param> /// <returns>An <see cref="IAttributeAdapter"/> for the given attribute.</returns> public IAttributeAdapter GetAttributeAdapter(ValidationAttribute attribute, IStringLocalizer stringLocalizer) { if (attribute == null) { throw new ArgumentNullException(nameof(attribute)); } IAttributeAdapter adapter; var type = attribute.GetType(); if (type == typeof(RegularExpressionAttribute)) { adapter = new RegularExpressionAttributeAdapter((RegularExpressionAttribute)attribute, stringLocalizer); } else if (type == typeof(MaxLengthAttribute)) { adapter = new MaxLengthAttributeAdapter((MaxLengthAttribute)attribute, stringLocalizer); } else if (type == typeof(RequiredAttribute)) { adapter = new RequiredAttributeAdapter((RequiredAttribute)attribute, stringLocalizer); } else if (type == typeof(CompareAttribute)) { adapter = new CompareAttributeAdapter((CompareAttribute)attribute, stringLocalizer); } else if (type == typeof(MinLengthAttribute)) { adapter = new MinLengthAttributeAdapter((MinLengthAttribute)attribute, stringLocalizer); } else if (type == typeof(CreditCardAttribute)) { adapter = new DataTypeAttributeAdapter((DataTypeAttribute)attribute, "creditcard", stringLocalizer); } else if (type == typeof(StringLengthAttribute)) { adapter = new StringLengthAttributeAdapter((StringLengthAttribute)attribute, stringLocalizer); } else if (type == typeof(RangeAttribute)) { adapter = new RangeAttributeAdapter((RangeAttribute)attribute, stringLocalizer); } else if (type == typeof(EmailAddressAttribute)) { adapter = new DataTypeAttributeAdapter((DataTypeAttribute)attribute, "email", stringLocalizer); } else if (type == typeof(PhoneAttribute)) { adapter = new DataTypeAttributeAdapter((DataTypeAttribute)attribute, "phone", stringLocalizer); } else if (type == typeof(UrlAttribute)) { adapter = new DataTypeAttributeAdapter((DataTypeAttribute)attribute, "url", stringLocalizer); } else { adapter = null; } return(adapter); }