public void RegisterProviderPutsNewProviderAtEndOfListWhenDA35ProviderNotPresent() { var oldProviders = ModelValidatorProviders.Providers.ToList(); var oldProvider = oldProviders.Single(p => p is DataAnnotationsModelValidatorProvider); try { // Arrange ModelValidatorProviders.Providers.Remove(oldProvider); int oldCount = ModelValidatorProviders.Providers.Count; // Act DataAnnotations4ModelValidatorProvider.RegisterProvider(); // Assert Assert.AreEqual(oldCount + 1, ModelValidatorProviders.Providers.Count); Assert.IsTrue(ModelValidatorProviders.Providers[oldCount] is DataAnnotations4ModelValidatorProvider); } finally { ModelValidatorProviders.Providers.Clear(); foreach (ModelValidatorProvider p in oldProviders) { ModelValidatorProviders.Providers.Add(p); } } }
public void RegisterAdapterGuardClauses() { // Attribute type cannot be null ExceptionHelper.ExpectArgumentNullException( () => DataAnnotations4ModelValidatorProvider.RegisterAdapter(null, typeof(MyValidationAttributeAdapter)), "attributeType"); // Adapter type cannot be null ExceptionHelper.ExpectArgumentNullException( () => DataAnnotations4ModelValidatorProvider.RegisterAdapter(typeof(MyValidationAttribute), null), "adapterType"); // Validation attribute must derive from ValidationAttribute ExceptionHelper.ExpectArgumentException( () => DataAnnotations4ModelValidatorProvider.RegisterAdapter(typeof(object), typeof(MyValidationAttributeAdapter)), "The type System.Object must derive from System.ComponentModel.DataAnnotations.ValidationAttribute.\r\nParameter name: attributeType"); // Adapter must derive from ModelValidator ExceptionHelper.ExpectArgumentException( () => DataAnnotations4ModelValidatorProvider.RegisterAdapter(typeof(MyValidationAttribute), typeof(object)), "The type System.Object must derive from System.Web.Mvc.ModelValidator.\r\nParameter name: adapterType"); // Adapter must have the expected constructor ExceptionHelper.ExpectArgumentException( () => DataAnnotations4ModelValidatorProvider.RegisterAdapter(typeof(MyValidationAttribute), typeof(MyValidationAttributeAdapterBadCtor)), "The type Microsoft.Web.Mvc.AspNet4.Test.DataAnnotations4ModelValidatorProviderTest+MyValidationAttributeAdapterBadCtor must have a public constructor which accepts three parameters of types System.Web.Mvc.ModelMetadata, System.Web.Mvc.ControllerContext, and Microsoft.Web.Mvc.AspNet4.Test.DataAnnotations4ModelValidatorProviderTest+MyValidationAttribute.\r\nParameter name: adapterType"); }
public void RegisterDefaultValidatableObjectAdapterFactoryGuardClauses() { // Factory cannot be null ExceptionHelper.ExpectArgumentNullException( () => DataAnnotations4ModelValidatorProvider.RegisterDefaultValidatableObjectAdapterFactory(null), "factory"); }
public void RegisterAdapter() { var oldFactories = DataAnnotations4ModelValidatorProvider.AttributeFactories; try { // Arrange DataAnnotations4ModelValidatorProvider.AttributeFactories = new Dictionary <Type, DataAnnotationsModelValidationFactory>(); // Act DataAnnotations4ModelValidatorProvider.RegisterAdapter(typeof(MyValidationAttribute), typeof(MyValidationAttributeAdapter)); // Assert var type = DataAnnotations4ModelValidatorProvider.AttributeFactories.Keys.Single(); Assert.AreEqual(typeof(MyValidationAttribute), type); var factory = DataAnnotations4ModelValidatorProvider.AttributeFactories.Values.Single(); var metadata = ModelMetadataProviders.Current.GetMetadataForType(() => null, typeof(object)); var context = new ControllerContext(); var attribute = new MyValidationAttribute(); var validator = factory(metadata, context, attribute); Assert.AreEqual(typeof(MyValidationAttributeAdapter), validator.GetType()); } finally { DataAnnotations4ModelValidatorProvider.AttributeFactories = oldFactories; } }
public void ReferenceTypesDontGetImplicitRequiredAttribute() { // Arrange var provider = new DataAnnotations4ModelValidatorProvider(); var context = new ControllerContext(); var metadata = ModelMetadataProviders.Current.GetMetadataForType(() => null, typeof(string)); // Act IEnumerable <ModelValidator> validators = provider.GetValidators(metadata, context); // Assert Assert.AreEqual(0, validators.Count()); }
public void IValidatableObjectGetsAValidator() { // Arrange var provider = new DataAnnotations4ModelValidatorProvider(); var mockValidatable = new Mock <IValidatableObject>(); var context = new ControllerContext(); var metadata = ModelMetadataProviders.Current.GetMetadataForType(() => null, mockValidatable.Object.GetType()); // Act IEnumerable <ModelValidator> validators = provider.GetValidators(metadata, context); // Assert Assert.AreEqual(1, validators.Count()); }
public void NonNullableValueTypeDoesntGetImplicitRequiredAttributeWhenFlagIsOff() { // Arrange var provider = new DataAnnotations4ModelValidatorProvider { AddImpliedRequiredAttributes = false }; var context = new ControllerContext(); var metadata = ModelMetadataProviders.Current.GetMetadataForProperty(() => null, typeof(DummyRequiredAttributeHelperClass), "WithoutAttribute"); // Act IEnumerable <ModelValidator> validators = provider.GetValidators(metadata, context); // Assert Assert.AreEqual(0, validators.Count()); }
public void UnknownValidationAttributeGetsDefaultAdapter() { // Arrange var provider = new DataAnnotations4ModelValidatorProvider(); var context = new ControllerContext(); var metadata = ModelMetadataProviders.Current.GetMetadataForType(() => null, typeof(DummyClassWithDummyValidationAttribute)); // Act IEnumerable <ModelValidator> validators = provider.GetValidators(metadata, context); // Assert var validator = validators.Single(); Assert.AreEqual(typeof(DataAnnotations4ModelValidator), validator.GetType()); }
public void NonNullableValueTypesGetImplicitRequiredAttribute() { // Arrange var provider = new DataAnnotations4ModelValidatorProvider(); var context = new ControllerContext(); var metadata = ModelMetadataProviders.Current.GetMetadataForProperty(() => null, typeof(DummyRequiredAttributeHelperClass), "WithoutAttribute"); // Act IEnumerable <ModelValidator> validators = provider.GetValidators(metadata, context); // Assert ModelValidator validator = validators.Single(); ModelClientValidationRule rule = validator.GetClientValidationRules().Single(); Assert.AreEqual(typeof(ModelClientValidationRequiredRule), rule.GetType()); }
public void RegisterDefaultValidatableObjectAdapterGuardClauses() { // Adapter type cannot be null ExceptionHelper.ExpectArgumentNullException( () => DataAnnotations4ModelValidatorProvider.RegisterDefaultValidatableObjectAdapter(null), "adapterType"); // Adapter must derive from ModelValidator ExceptionHelper.ExpectArgumentException( () => DataAnnotations4ModelValidatorProvider.RegisterDefaultValidatableObjectAdapter(typeof(object)), "The type System.Object must derive from System.Web.Mvc.ModelValidator.\r\nParameter name: adapterType"); // Adapter must have the expected constructor ExceptionHelper.ExpectArgumentException( () => DataAnnotations4ModelValidatorProvider.RegisterDefaultValidatableObjectAdapter(typeof(MyValidatableAdapterBadCtor)), "The type Microsoft.Web.Mvc.AspNet4.Test.DataAnnotations4ModelValidatorProviderTest+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 RegisterValidatableObjectAdapterFactoryGuardClauses() { DataAnnotations4ValidatableObjectAdapterFactory factory = (metadata, context) => null; // Attribute type cannot be null ExceptionHelper.ExpectArgumentNullException( () => DataAnnotations4ModelValidatorProvider.RegisterValidatableObjectAdapterFactory(null, factory), "modelType"); // Factory cannot be null ExceptionHelper.ExpectArgumentNullException( () => DataAnnotations4ModelValidatorProvider.RegisterValidatableObjectAdapterFactory(typeof(MyValidatableClass), null), "factory"); // Validation attribute must derive from ValidationAttribute ExceptionHelper.ExpectArgumentException( () => DataAnnotations4ModelValidatorProvider.RegisterValidatableObjectAdapterFactory(typeof(object), factory), "The type System.Object must derive from System.ComponentModel.DataAnnotations.IValidatableObject.\r\nParameter name: modelType"); }
public void RegisterDefaultValidatableObjectAdapter() { var oldFactory = DataAnnotations4ModelValidatorProvider.DefaultValidatableFactory; try { // Arrange var metadata = ModelMetadataProviders.Current.GetMetadataForType(() => null, typeof(MyValidatableClass)); var context = new ControllerContext(); DataAnnotations4ModelValidatorProvider.RegisterDefaultValidatableObjectAdapter(typeof(MyValidatableAdapter)); // Act var result = new DataAnnotations4ModelValidatorProvider().GetValidators(metadata, context).Single(); // Assert Assert.AreEqual(typeof(MyValidatableAdapter), result.GetType()); } finally { DataAnnotations4ModelValidatorProvider.DefaultValidatableFactory = oldFactory; } }
public void RegisterValidatableObjectAdapterFactory() { var oldFactories = DataAnnotations4ModelValidatorProvider.ValidatableFactories; try { // Arrange DataAnnotations4ModelValidatorProvider.ValidatableFactories = new Dictionary <Type, DataAnnotations4ValidatableObjectAdapterFactory>(); DataAnnotations4ValidatableObjectAdapterFactory factory = delegate { return(null); }; // Act DataAnnotations4ModelValidatorProvider.RegisterValidatableObjectAdapterFactory(typeof(MyValidatableClass), factory); // Assert var type = DataAnnotations4ModelValidatorProvider.ValidatableFactories.Keys.Single(); Assert.AreEqual(typeof(MyValidatableClass), type); Assert.AreSame(factory, DataAnnotations4ModelValidatorProvider.ValidatableFactories.Values.Single()); } finally { DataAnnotations4ModelValidatorProvider.ValidatableFactories = oldFactories; } }
public void RegisterDefaultValidatableObjectAdapterFactory() { var oldFactory = DataAnnotations4ModelValidatorProvider.DefaultValidatableFactory; try { // Arrange var metadata = ModelMetadataProviders.Current.GetMetadataForType(() => null, typeof(MyValidatableClass)); var context = new ControllerContext(); ModelValidator validator = new Mock <ModelValidator>(metadata, context).Object; DataAnnotations4ValidatableObjectAdapterFactory factory = delegate { return(validator); }; DataAnnotations4ModelValidatorProvider.RegisterDefaultValidatableObjectAdapterFactory(factory); // Act var result = new DataAnnotations4ModelValidatorProvider().GetValidators(metadata, context).Single(); // Assert Assert.AreSame(validator, result); } finally { DataAnnotations4ModelValidatorProvider.DefaultValidatableFactory = oldFactory; } }
public void RegisterProviderRemovesExistingDA35ProviderAndRegistersItself() { var oldProviders = ModelValidatorProviders.Providers.ToList(); var oldProvider = oldProviders.Single(p => p is DataAnnotationsModelValidatorProvider); int oldProviderIndex = oldProviders.IndexOf(oldProvider); try { // Act DataAnnotations4ModelValidatorProvider.RegisterProvider(); // Assert Assert.AreEqual(oldProviders.Count, ModelValidatorProviders.Providers.Count); Assert.IsTrue(ModelValidatorProviders.Providers[oldProviderIndex] is DataAnnotations4ModelValidatorProvider); } finally { ModelValidatorProviders.Providers.Clear(); foreach (ModelValidatorProvider p in oldProviders) { ModelValidatorProviders.Providers.Add(p); } } }