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 bindingMetadataProvider = new DefaultBindingMetadataProvider(); var compositeProvider = new DefaultCompositeMetadataDetailsProvider(new[] { bindingMetadataProvider }); var optionsAccessor = new OptionsAccessor(); optionsAccessor.Value.ModelBindingMessageProvider.AttemptedValueIsInvalidAccessor = (value, name) => $"Hmm, the value '{ value }' is not valid for { name }."; var provider = new DefaultModelMetadataProvider(compositeProvider, optionsAccessor); 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); }
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); }
protected ModelValidationContext GetMockedValidationContextForModel(object model, object container = null) { var actionContext = ValidatorUtils.CreateActionContext(); var options = _provider.GetRequiredService <IOptions <MvcOptions> >(); var provider = new DefaultModelMetadataProvider(_compositeMetadataDetailsProvider, options); var metadata = provider.GetMetadataForProperty(typeof(RequiredModel).GetProperty("Summary"), typeof(RequiredModel)); var context = new ModelValidationContext(actionContext, metadata, provider, container, model); return(context); }
protected ModelValidationContext GetModelValidationContextWithoutContainer(ValidatableSampleModel model) { var options = _provider.GetRequiredService <IOptions <MvcOptions> >(); var actionContext = ValidatorUtils.CreateActionContext(); var provider = new DefaultModelMetadataProvider(_compositeMetadataDetailsProvider, options); var metadata = provider.GetMetadataForProperty( typeof(ValidatableSampleModelContainer), nameof(ValidatableSampleModelContainer.SampleModel)); var context = new ModelValidationContext(actionContext, metadata, provider, null, model); return(context); }
protected ModelExpression MakeExpression <TModel>(TModel viewModel, string propertyName, object propertyContent) { var containerType = viewModel.GetType(); var m3 = ServiceProvider.GetService <ModelExpressionProvider>(); var compositeMetadataDetailsProvider = ServiceProvider.GetService <ICompositeMetadataDetailsProvider>(); var metadataProvider = new DefaultModelMetadataProvider(compositeMetadataDetailsProvider); var containerMetadata = metadataProvider.GetMetadataForType(containerType); var containerExplorer = metadataProvider.GetModelExplorerForType(containerType, viewModel); var propertyMetadata = metadataProvider.GetMetadataForProperty(containerType, propertyName); var modelExplorer = containerExplorer.GetExplorerForExpression(propertyMetadata, propertyContent); return(new ModelExpression(propertyName, modelExplorer)); }
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); }