public void RegisterValidatableObjectAdapterGuardClauses() { // Attribute type cannot be null Assert.ThrowsArgumentNull( () => DataAnnotationsModelValidatorProvider.RegisterValidatableObjectAdapter(null, typeof(MyValidatableAdapter)), "modelType"); // Adapter type cannot be null Assert.ThrowsArgumentNull( () => DataAnnotationsModelValidatorProvider.RegisterValidatableObjectAdapter(typeof(MyValidatableClass), null), "adapterType"); // Validation attribute must derive from ValidationAttribute Assert.Throws <ArgumentException>( () => DataAnnotationsModelValidatorProvider.RegisterValidatableObjectAdapter(typeof(object), typeof(MyValidatableAdapter)), "The type System.Object must derive from System.ComponentModel.DataAnnotations.IValidatableObject\r\nParameter name: modelType"); // Adapter must derive from ModelValidator Assert.Throws <ArgumentException>( () => DataAnnotationsModelValidatorProvider.RegisterValidatableObjectAdapter(typeof(MyValidatableClass), typeof(object)), "The type System.Object must derive from System.Web.Mvc.ModelValidator\r\nParameter name: adapterType"); // Adapter must have the expected constructor Assert.Throws <ArgumentException>( () => DataAnnotationsModelValidatorProvider.RegisterValidatableObjectAdapter(typeof(MyValidatableClass), typeof(MyValidatableAdapterBadCtor)), "The type System.Web.Mvc.Test.DataAnnotationsModelValidatorProviderTest+MyValidatableAdapterBadCtor must have a public constructor which accepts two parameters of types System.Web.Mvc.ModelMetadata and System.Web.Mvc.ControllerContext.\r\nParameter name: adapterType"); }
public void RegisterValidatableObjectAdapter() { var oldFactories = DataAnnotationsModelValidatorProvider.ValidatableFactories; try { // Arrange DataAnnotationsModelValidatorProvider.ValidatableFactories = new Dictionary <Type, DataAnnotationsValidatableObjectAdapterFactory>(); IValidatableObject validatable = new Mock <IValidatableObject>().Object; // Act DataAnnotationsModelValidatorProvider.RegisterValidatableObjectAdapter(validatable.GetType(), typeof(MyValidatableAdapter)); // Assert var type = DataAnnotationsModelValidatorProvider.ValidatableFactories.Keys.Single(); Assert.Equal(validatable.GetType(), type); var factory = DataAnnotationsModelValidatorProvider.ValidatableFactories.Values.Single(); var metadata = ModelMetadataProviders.Current.GetMetadataForType(() => null, typeof(object)); var context = new ControllerContext(); var validator = factory(metadata, context); Assert.IsType <MyValidatableAdapter>(validator); } finally { DataAnnotationsModelValidatorProvider.ValidatableFactories = oldFactories; } }