public void CreateBindingDetails_OverrideBehaviorOnBaseClass_OverrideWithRequired_OnClass() { // Arrange var context = new BindingMetadataProviderContext( ModelMetadataIdentity.ForProperty(typeof(string), "Property", typeof(BindRequiredOverridesInheritedBindNever)), new ModelAttributes(new object[0], new object[0], null)); var provider = new DefaultBindingMetadataProvider(); // Act provider.CreateBindingMetadata(context); // Assert Assert.True(context.BindingMetadata.IsBindingAllowed); Assert.True(context.BindingMetadata.IsBindingRequired); }
public void CreateBindingDetails_FindsBindNever_OnContainerClass() { // Arrange var context = new BindingMetadataProviderContext( ModelMetadataIdentity.ForProperty(typeof(string), "Property", typeof(BindNeverOnClass)), new ModelAttributes(new object[0], new object[0], null)); var provider = new DefaultBindingMetadataProvider(); // Act provider.CreateBindingMetadata(context); // Assert Assert.False(context.BindingMetadata.IsBindingAllowed); Assert.False(context.BindingMetadata.IsBindingRequired); }
public void CreateBindingDetails_FindsBindingSource() { // Arrange var attributes = new object[] { new BindingSourceModelBinderAttribute(BindingSource.Body), new BindingSourceModelBinderAttribute(BindingSource.Query), }; var context = new BindingMetadataProviderContext( ModelMetadataIdentity.ForType(typeof(string)), new ModelAttributes(attributes)); var provider = new DefaultBindingMetadataProvider(CreateMessageProvider()); // Act provider.CreateBindingMetadata(context); // Assert Assert.Equal(BindingSource.Body, context.BindingMetadata.BindingSource); }
public void CreateBindingDetails_OverrideBehaviorOnClass_OverrideWithOptional() { // Arrange var propertyAttributes = new object[] { new BindingBehaviorAttribute(BindingBehavior.Optional) }; var context = new BindingMetadataProviderContext( ModelMetadataIdentity.ForProperty(typeof(string), "Property", typeof(BindNeverOnClass)), new ModelAttributes(new object[0], propertyAttributes, null)); var provider = new DefaultBindingMetadataProvider(); // Act provider.CreateBindingMetadata(context); // Assert Assert.True(context.BindingMetadata.IsBindingAllowed); Assert.False(context.BindingMetadata.IsBindingRequired); }
public void CreateBindingDetails_FindsBindRequired_OnParameter() { // Arrange var parameterAttributes = new object[] { new BindRequiredAttribute(), }; var context = new BindingMetadataProviderContext( ModelMetadataIdentity.ForParameter(ParameterInfos.SampleParameterInfo), new ModelAttributes(null, null, parameterAttributes)); var provider = new DefaultBindingMetadataProvider(); // Act provider.CreateBindingMetadata(context); // Assert Assert.True(context.BindingMetadata.IsBindingAllowed); Assert.True(context.BindingMetadata.IsBindingRequired); }
public void CreateBindingDetails_FindsBindingBehaviorOptional_OnProperty() { // Arrange var propertyAttributes = new object[] { new BindingBehaviorAttribute(BindingBehavior.Optional), }; var context = new BindingMetadataProviderContext( ModelMetadataIdentity.ForProperty(typeof(int), "Length", typeof(string)), new ModelAttributes(new object[0], propertyAttributes, null)); var provider = new DefaultBindingMetadataProvider(); // Act provider.CreateBindingMetadata(context); // Assert Assert.True(context.BindingMetadata.IsBindingAllowed); Assert.False(context.BindingMetadata.IsBindingRequired); }
public void CreateBindingDetails_FindsModelName() { // Arrange var attributes = new object[] { new ModelBinderAttribute() { Name = "Product" }, new ModelBinderAttribute() { Name = "Order" }, }; var context = new BindingMetadataProviderContext( ModelMetadataIdentity.ForType(typeof(string)), new ModelAttributes(attributes)); var provider = new DefaultBindingMetadataProvider(CreateMessageProvider()); // Act provider.CreateBindingMetadata(context); // Assert Assert.Equal("Product", context.BindingMetadata.BinderModelName); }
public void CreateBindingDetails_FindsBinderTypeProvider() { // Arrange var attributes = new object[] { new ModelBinderAttribute() { BinderType = typeof(HeaderModelBinder) }, new ModelBinderAttribute() { BinderType = typeof(ArrayModelBinder<string>) }, }; var context = new BindingMetadataProviderContext( ModelMetadataIdentity.ForType(typeof(string)), new ModelAttributes(attributes)); var provider = new DefaultBindingMetadataProvider(CreateMessageProvider()); // Act provider.CreateBindingMetadata(context); // Assert Assert.Equal(typeof(HeaderModelBinder), context.BindingMetadata.BinderType); }
public void CreateBindingDetails_FindsBindRequired_OnProperty() { // Arrange var propertyAttributes = new object[] { new BindRequiredAttribute(), }; var context = new BindingMetadataProviderContext( ModelMetadataIdentity.ForProperty(typeof(int), "Length", typeof(string)), new ModelAttributes(propertyAttributes, typeAttributes: new object[0])); var provider = new DefaultBindingMetadataProvider(CreateMessageProvider()); // Act provider.CreateBindingMetadata(context); // Assert Assert.True(context.BindingMetadata.IsBindingAllowed); Assert.True(context.BindingMetadata.IsBindingRequired); }
public void CreateBindingDetails_OverrideBehaviorOnClass_OverrideWithNever() { // Arrange var propertyAttributes = new object[] { new BindNeverAttribute(), }; var context = new BindingMetadataProviderContext( ModelMetadataIdentity.ForProperty(typeof(string), "Property", typeof(BindRequiredOnClass)), new ModelAttributes(propertyAttributes, typeAttributes: new object[0])); var provider = new DefaultBindingMetadataProvider(CreateMessageProvider()); // Act provider.CreateBindingMetadata(context); // Assert Assert.False(context.BindingMetadata.IsBindingAllowed); Assert.False(context.BindingMetadata.IsBindingRequired); }
public void CreateBindingDetails_BindingBehaviorLeftAlone_ForAttributeOnPropertyType(bool initialValue) { // Arrange var typeAttributes = new object[] { new BindingBehaviorAttribute(BindingBehavior.Required), }; var context = new BindingMetadataProviderContext( ModelMetadataIdentity.ForProperty(typeof(int), "Length", typeof(string)), new ModelAttributes(propertyAttributes: new object[0], typeAttributes: typeAttributes)); // These values shouldn't be changed since this is a Type-Metadata context.BindingMetadata.IsBindingAllowed = initialValue; context.BindingMetadata.IsBindingRequired = initialValue; var provider = new DefaultBindingMetadataProvider(CreateMessageProvider()); // Act provider.CreateBindingMetadata(context); // Assert Assert.Equal(initialValue, context.BindingMetadata.IsBindingAllowed); Assert.Equal(initialValue, context.BindingMetadata.IsBindingRequired); }
public void CreateBindingDetails_OverrideBehaviorOnClass_OverrideWithOptional() { // Arrange var propertyAttributes = new object[] { new BindingBehaviorAttribute(BindingBehavior.Optional) }; var context = new BindingMetadataProviderContext( ModelMetadataIdentity.ForProperty(typeof(string), "Property", typeof(BindNeverOnClass)), new ModelAttributes(propertyAttributes, typeAttributes: new object[0])); var provider = new DefaultBindingMetadataProvider(CreateMessageProvider()); // Act provider.CreateBindingMetadata(context); // Assert Assert.True(context.BindingMetadata.IsBindingAllowed); Assert.False(context.BindingMetadata.IsBindingRequired); }
public void CreateBindingDetails_FindsBindNever_OnContainerClass() { // Arrange var context = new BindingMetadataProviderContext( ModelMetadataIdentity.ForProperty(typeof(string), "Property", typeof(BindNeverOnClass)), new ModelAttributes(propertyAttributes: new object[0], typeAttributes: new object[0])); var provider = new DefaultBindingMetadataProvider(CreateMessageProvider()); // Act provider.CreateBindingMetadata(context); // Assert Assert.False(context.BindingMetadata.IsBindingAllowed); Assert.False(context.BindingMetadata.IsBindingRequired); }
public void CreateBindingDetails_UsesFirstAttribute() { // Arrange var propertyAttributes = new object[] { new BindingBehaviorAttribute(BindingBehavior.Required), new BindNeverAttribute(), }; var context = new BindingMetadataProviderContext( ModelMetadataIdentity.ForProperty(typeof(int), "Length", typeof(string)), new ModelAttributes(propertyAttributes, typeAttributes: new object[0])); var provider = new DefaultBindingMetadataProvider(CreateMessageProvider()); // Act provider.CreateBindingMetadata(context); // Assert Assert.True(context.BindingMetadata.IsBindingAllowed); Assert.True(context.BindingMetadata.IsBindingRequired); }
public void CreateBindingDetails_FindsBindingSource_IfNullFallsBack() { // Arrange var attributes = new object[] { new ModelBinderAttribute(), new BindingSourceModelBinderAttribute(BindingSource.Body), new BindingSourceModelBinderAttribute(BindingSource.Query), }; var context = new BindingMetadataProviderContext( ModelMetadataIdentity.ForType(typeof(string)), new ModelAttributes(attributes)); var provider = new DefaultBindingMetadataProvider(CreateMessageProvider()); // Act provider.CreateBindingMetadata(context); // Assert Assert.Equal(BindingSource.Body, context.BindingMetadata.BindingSource); }
public void CreateBindingDetails_OverrideBehaviorOnBaseClass_OverrideWithRequired_OnClass() { // Arrange var context = new BindingMetadataProviderContext( ModelMetadataIdentity.ForProperty(typeof(string), "Property", typeof(BindRequiredOverridesInheritedBindNever)), new ModelAttributes(propertyAttributes: new object[0], typeAttributes: new object[0])); var provider = new DefaultBindingMetadataProvider(CreateMessageProvider()); // Act provider.CreateBindingMetadata(context); // Assert Assert.True(context.BindingMetadata.IsBindingAllowed); Assert.True(context.BindingMetadata.IsBindingRequired); }
public void ModelStateDictionary_AddsCustomErrorMessage_WhenModelStateSet() { // Arrange var expected = "Hmm, the value 'some value' is not valid for Length."; var dictionary = new ModelStateDictionary(); dictionary.SetModelValue("key", new string[] { "some value" }, "some value"); var messageProvider = new ModelBindingMessageProvider { MissingBindRequiredValueAccessor = name => "Unexpected MissingBindRequiredValueAccessor use", MissingKeyOrValueAccessor = () => "Unexpected MissingKeyOrValueAccessor use", ValueMustNotBeNullAccessor = value => "Unexpected ValueMustNotBeNullAccessor use", AttemptedValueIsInvalidAccessor = (value, name) => $"Hmm, the value '{ value }' is not valid for { name }.", UnknownValueIsInvalidAccessor = name => "Unexpected InvalidValueWithUnknownAttemptedValueAccessor use", ValueIsInvalidAccessor = value => "Unexpected InvalidValueWithUnknownModelErrorAccessor use", ValueMustBeANumberAccessor = name => "Unexpected ValueMustBeANumberAccessor use", }; var bindingMetadataProvider = new DefaultBindingMetadataProvider(messageProvider); var compositeProvider = new DefaultCompositeMetadataDetailsProvider(new[] { bindingMetadataProvider }); var provider = new DefaultModelMetadataProvider(compositeProvider); var metadata = provider.GetMetadataForProperty(typeof(string), nameof(string.Length)); // Act dictionary.TryAddModelError("key", new FormatException(), metadata); // Assert var entry = Assert.Single(dictionary); Assert.Equal("key", entry.Key); var error = Assert.Single(entry.Value.Errors); Assert.Equal(expected, error.ErrorMessage); }