public async Task BindParameter_WithEmptyData_AndPerTypeMessage_AddsGivenMessage(Type parameterType) { // Arrange var metadataProvider = new TestModelMetadataProvider(); metadataProvider .ForType(parameterType) .BindingDetails((Action <ModelBinding.Metadata.BindingMetadata>)(binding => { // A real details provider could customize message based on BindingMetadataProviderContext. binding.ModelBindingMessageProvider.ValueMustNotBeNullAccessor = value => $"Hurts when '{ value }' is provided."; })); var argumentBinder = new DefaultControllerActionArgumentBinder( metadataProvider, ModelBindingTestHelper.GetObjectValidator()); var parameter = new ParameterDescriptor { Name = "Parameter1", BindingInfo = new BindingInfo(), ParameterType = parameterType }; var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => { request.QueryString = QueryString.Create("Parameter1", string.Empty); }); var modelState = new ModelStateDictionary(); // Act var modelBindingResult = await argumentBinder.BindModelAsync(parameter, modelState, operationContext); // Assert // ModelBindingResult Assert.False(modelBindingResult.IsModelSet); // Model Assert.Null(modelBindingResult.Model); // ModelState Assert.False(modelState.IsValid); var key = Assert.Single(modelState.Keys); Assert.Equal("Parameter1", key); Assert.Equal(string.Empty, modelState[key].AttemptedValue); Assert.Equal(string.Empty, modelState[key].RawValue); var error = Assert.Single(modelState[key].Errors); Assert.Equal("Hurts when '' is provided.", error.ErrorMessage, StringComparer.Ordinal); Assert.Null(error.Exception); }
private bool TryValidateModel( object model, string prefix, OperationBindingContext operationContext) { var controller = new TestController(); controller.ControllerContext = new ControllerContext(operationContext.ActionContext); controller.ObjectValidator = ModelBindingTestHelper.GetObjectValidator(operationContext.MetadataProvider); controller.MetadataProvider = operationContext.MetadataProvider; controller.ControllerContext.ValidatorProviders = new[] { operationContext.ValidatorProvider }.ToList(); return(controller.TryValidateModel(model, prefix)); }
public async Task KeyValuePairModelBinder_SimpleTypes_WithNoValue_AndCustomizedMessage_AddsGivenMessage() { // Arrange var metadataProvider = new TestModelMetadataProvider(); metadataProvider .ForType(typeof(KeyValuePair <string, int>)) .BindingDetails((System.Action <ModelBinding.Metadata.BindingMetadata>)(binding => { // A real details provider could customize message based on BindingMetadataProviderContext. binding.ModelBindingMessageProvider.MissingKeyOrValueAccessor = () => $"Hurts when nothing is provided."; })); var argumentBinder = new DefaultControllerActionArgumentBinder( metadataProvider, ModelBindingTestHelper.GetObjectValidator()); var parameter = new ParameterDescriptor { Name = "parameter", ParameterType = typeof(KeyValuePair <string, int>) }; var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => { request.QueryString = new QueryString("?parameter.Key=10"); }); var modelState = new ModelStateDictionary(); // Act var modelBindingResult = await argumentBinder.BindModelAsync(parameter, modelState, operationContext); // Assert Assert.False(modelBindingResult.IsModelSet); Assert.Equal(2, modelState.Count); Assert.False(modelState.IsValid); Assert.Equal(1, modelState.ErrorCount); var entry = Assert.Single(modelState, kvp => kvp.Key == "parameter.Key").Value; Assert.Empty(entry.Errors); Assert.Equal("10", entry.AttemptedValue); Assert.Equal("10", entry.RawValue); entry = Assert.Single(modelState, kvp => kvp.Key == "parameter.Value").Value; var error = Assert.Single(entry.Errors); Assert.Null(error.Exception); Assert.Equal("Hurts when nothing is provided.", error.ErrorMessage); }
private Task <bool> TryUpdateModel( object model, string prefix, OperationBindingContext operationContext) { return(ModelBindingHelper.TryUpdateModelAsync( model, model.GetType(), prefix, operationContext.ActionContext, operationContext.MetadataProvider, operationContext.ModelBinder, operationContext.ValueProvider, operationContext.InputFormatters, ModelBindingTestHelper.GetObjectValidator(operationContext.MetadataProvider), operationContext.ValidatorProvider)); }