public void AdapterFactory_RegistersAdapters_ForDataTypeAttributes(ValidationAttribute attribute, string expectedRuleName) { // Arrange var adapters = new DataAnnotationsModelValidatorProvider().AttributeFactories; var adapterFactory = adapters.Single(kvp => kvp.Key == attribute.GetType()).Value; // Act var adapter = adapterFactory(attribute); // Assert var dataTypeAdapter = Assert.IsType<DataTypeAttributeAdapter>(adapter); Assert.Equal(expectedRuleName, dataTypeAdapter.RuleName); }
public async Task TryUpdateModel_ReturnsFalse_IfModelValidationFails() { // Arrange var binders = new IModelBinder[] { new TypeConverterModelBinder(), new ComplexModelDtoModelBinder(), new MutableObjectModelBinder() }; var validator = new DataAnnotationsModelValidatorProvider(); var model = new MyModel(); var modelStateDictionary = new ModelStateDictionary(); var values = new Dictionary<string, object> { { "", null } }; var valueProvider = new DictionaryBasedValueProvider(values); // Act var result = await ModelBindingHelper.TryUpdateModelAsync( model, "", Mock.Of<HttpContext>(), modelStateDictionary, new DataAnnotationsModelMetadataProvider(), GetCompositeBinder(binders), valueProvider, new[] { validator }); // Assert Assert.False(result); Assert.Equal("The MyProperty field is required.", modelStateDictionary["MyProperty"].Errors[0].ErrorMessage); }
public void GetValidators_ReturnsValidatorForIValidatableObject() { // Arrange var provider = new DataAnnotationsModelValidatorProvider(); var mockValidatable = Mock.Of<IValidatableObject>(); var metadata = _metadataProvider.GetMetadataForType(() => null, mockValidatable.GetType()); // Act var validators = provider.GetValidators(metadata); // Assert var validator = Assert.Single(validators); Assert.IsType<ValidatableObjectAdapter>(validator); }
public void GetValidators_DoesNotAddRequiredAttribute_ForNonNullableValueTypes_IfAttributeIsSpecifiedExplicitly() { // Arrange var provider = new DataAnnotationsModelValidatorProvider(); var metadata = _metadataProvider.GetMetadataForProperty(() => null, typeof(DummyRequiredAttributeHelperClass), "WithAttribute"); // Act var validators = provider.GetValidators(metadata); // Assert var validator = Assert.Single(validators); var adapter = Assert.IsType<RequiredAttributeAdapter>(validator); Assert.Equal("Custom Required Message", adapter.Attribute.ErrorMessage); }
public async Task TryUpdateModel_ReturnsTrue_IfModelBindsAndValidatesSuccessfully() { // Arrange var binders = new IModelBinder[] { new TypeConverterModelBinder(), new ComplexModelDtoModelBinder(), new MutableObjectModelBinder() }; var validator = new DataAnnotationsModelValidatorProvider(); var model = new MyModel { MyProperty = "Old-Value" }; var modelStateDictionary = new ModelStateDictionary(); var values = new Dictionary<string, object> { { "", null }, { "MyProperty", "MyPropertyValue" } }; var valueProvider = new DictionaryBasedValueProvider(values); // Act var result = await ModelBindingHelper.TryUpdateModelAsync( model, "", Mock.Of<HttpContext>(), modelStateDictionary, new DataAnnotationsModelMetadataProvider(), GetCompositeBinder(binders), valueProvider, new[] { validator }); // Assert Assert.True(result); Assert.Equal("MyPropertyValue", model.MyProperty); }
public void AdapterFactory_RegistersAdapters_ForDataAnnotationAttributes(ValidationAttribute attribute, Type expectedAdapterType) { // Arrange var adapters = new DataAnnotationsModelValidatorProvider().AttributeFactories; var adapterFactory = adapters.Single(kvp => kvp.Key == attribute.GetType()).Value; // Act var adapter = adapterFactory(attribute); // Assert Assert.IsType(expectedAdapterType, adapter); }
public void DoesNotReadPropertyValue() { // Arrange var provider = new DataAnnotationsModelValidatorProvider(); var model = new ObservableModel(); var metadata = _metadataProvider.GetMetadataForProperty(() => model.TheProperty, typeof(ObservableModel), "TheProperty"); var context = new ModelValidationContext(null, null, null, metadata, null); // Act var validators = provider.GetValidators(metadata).ToArray(); var results = validators.SelectMany(o => o.Validate(context)).ToArray(); // Assert Assert.Empty(validators); Assert.False(model.PropertyWasRead()); }
public void IValidatableObjectGetsAValidator() { // Arrange var provider = new DataAnnotationsModelValidatorProvider(); var mockValidatable = new Mock<IValidatableObject>(); var metadata = _metadataProvider.GetMetadataForType(() => null, mockValidatable.Object.GetType()); // Act var validators = provider.GetValidators(metadata); // Assert Assert.Single(validators); }
public void UnknownValidationAttributeGetsDefaultAdapter() { // Arrange var provider = new DataAnnotationsModelValidatorProvider(); var metadata = _metadataProvider.GetMetadataForType(() => null, typeof(DummyClassWithDummyValidationAttribute)); // Act IEnumerable<IModelValidator> validators = provider.GetValidators(metadata); // Assert var validator = validators.Single(); Assert.IsType<DataAnnotationsModelValidator>(validator); }