Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 5
0
        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));
        }
Ejemplo n.º 6
0
        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);
        }