public void CalculateAllowEmptyBody_EmptyBodyBehaviorIsAllow()
    {
        // Act
        var allowEmpty = BodyModelBinderProvider.CalculateAllowEmptyBody(EmptyBodyBehavior.Allow, options: new MvcOptions());

        // Assert
        Assert.True(allowEmpty);
    }
    public void CalculateAllowEmptyBody_EmptyBodyBehaviorIsDefaultValue_DefaultsToFalseWhenOptionsIsUnavailable()
    {
        // Act
        var allowEmpty = BodyModelBinderProvider.CalculateAllowEmptyBody(EmptyBodyBehavior.Default, options: null);

        // Assert
        Assert.False(allowEmpty);
    }
    public void CalculateAllowEmptyBody_EmptyBodyBehaviorIsDefaultValue_UsesMvcOptions()
    {
        // Arrange
        var options = new MvcOptions {
            AllowEmptyInputInBodyModelBinding = true
        };

        // Act
        var allowEmpty = BodyModelBinderProvider.CalculateAllowEmptyBody(EmptyBodyBehavior.Default, options);

        // Assert
        Assert.True(allowEmpty);
    }
    public void CalculateAllowEmptyBody_EmptyBodyBehaviorIsDisallowed()
    {
        // Arrange
        // MvcOptions.AllowEmptyInputInBodyModelBinding should be ignored if EmptyBodyBehavior disallows it
        var options = new MvcOptions {
            AllowEmptyInputInBodyModelBinding = true
        };

        // Act
        var allowEmpty = BodyModelBinderProvider.CalculateAllowEmptyBody(EmptyBodyBehavior.Disallow, options);

        // Assert
        Assert.False(allowEmpty);
    }
    public void GetBinder_DoesNotThrowNullReferenceException()
    {
        // Arrange
        var context = new TestModelBinderProviderContext(typeof(Person));

        context.BindingInfo.BindingSource = BindingSource.Body;
        var formatter     = new TestInputFormatter();
        var formatterList = new List <IInputFormatter> {
            formatter
        };
        var provider = new BodyModelBinderProvider(formatterList, new TestHttpRequestStreamReaderFactory());

        // Act & Assert (does not throw)
        provider.GetBinder(context);
    }
 public BodyAndRouteModelBinderProvider(BodyModelBinderProvider bodyModelBinderProvider,
                                        ComplexObjectModelBinderProvider complexTypeModelBinderProvider)
 {
     _bodyModelBinderProvider        = bodyModelBinderProvider ?? throw new ArgumentNullException(nameof(bodyModelBinderProvider));
     _complexTypeModelBinderProvider = complexTypeModelBinderProvider ?? throw new ArgumentNullException(nameof(complexTypeModelBinderProvider));
 }
Ejemplo n.º 7
0
        public async Task MultipleActionParameter_ValidModelState(List <ParameterDescriptor> parameters)
        {
            // Since validation attribute is only present on the FromBody model's property(TransferInfo's AccountId),
            // validation should not trigger for the parameter which is bound from Uri.

            // Arrange
            var actionDescriptor = new ControllerActionDescriptor()
            {
                BoundProperties = new List <ParameterDescriptor>(),
                Parameters      = parameters
            };
            var modelMetadataProvider = new EmptyModelMetadataProvider();
            var modelBinderProvider   = new BodyModelBinderProvider(new[] { Mock.Of <IInputFormatter>() }, Mock.Of <IHttpRequestStreamReaderFactory>());
            var factory         = TestModelBinderFactory.CreateDefault(modelBinderProvider);
            var parameterBinder = new Mock <ParameterBinder>(
                new EmptyModelMetadataProvider(),
                factory,
                CreateMockValidator());

            parameterBinder.Setup(p => p.BindModelAsync(
                                      It.IsAny <ActionContext>(),
                                      It.IsAny <IModelBinder>(),
                                      It.IsAny <IValueProvider>(),
                                      It.IsAny <ParameterDescriptor>(),
                                      It.IsAny <ModelMetadata>(),
                                      null))
            .Returns((ActionContext context, IModelBinder modelBinder, IValueProvider valueProvider, ParameterDescriptor descriptor, ModelMetadata metadata, object v) =>
            {
                ModelBindingResult result;
                if (descriptor.Name == "accountId")
                {
                    result = ModelBindingResult.Success(10);
                }
                else if (descriptor.Name == "transferInfo")
                {
                    result = ModelBindingResult.Success(new TransferInfo
                    {
                        AccountId = 40,
                        Amount    = 250.0
                    });
                }
                else
                {
                    result = ModelBindingResult.Failed();
                }

                return(Task.FromResult(result));
            });

            var controllerContext = new ControllerContext
            {
                ActionDescriptor = actionDescriptor,
            };

            var arguments  = new Dictionary <string, object>(StringComparer.Ordinal);
            var modelState = controllerContext.ModelState;

            // Act
            var binderDelegate = ControllerBinderDelegateProvider.CreateBinderDelegate(
                parameterBinder.Object,
                factory,
                TestModelMetadataProvider.CreateDefaultProvider(),
                actionDescriptor);

            await binderDelegate(controllerContext, new TestController(), arguments);

            // Assert
            Assert.True(modelState.IsValid);
            Assert.True(arguments.TryGetValue("accountId", out var value));
            var accountId = Assert.IsType <int>(value);

            Assert.Equal(10, accountId);
            Assert.True(arguments.TryGetValue("transferInfo", out value));
            var transferInfo = Assert.IsType <TransferInfo>(value);

            Assert.NotNull(transferInfo);
            Assert.Equal(40, transferInfo.AccountId);
            Assert.Equal(250.0, transferInfo.Amount);
        }
 public BodyOrDefaultModelBinderProvider(BodyModelBinderProvider bodyModelBinderProvider, ComplexTypeModelBinderProvider complexTypeModelBinderProvider)
 {
     _bodyModelBinderProvider        = bodyModelBinderProvider;
     _complexTypeModelBinderProvider = complexTypeModelBinderProvider;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="BodyAndRouteModelBinderProvider"/> class.
 /// </summary>
 /// <param name="bodyModelBinderProvider">The body model binder provider.</param>
 /// <param name="complexTypeModelBinderProvider">The complex type model binder provider.</param>
 public BodyAndRouteModelBinderProvider(BodyModelBinderProvider bodyModelBinderProvider, ComplexTypeModelBinderProvider complexTypeModelBinderProvider)
 {
     _bodyModelBinderProvider        = bodyModelBinderProvider;
     _complexTypeModelBinderProvider = complexTypeModelBinderProvider;
 }
Ejemplo n.º 10
0
 public NtBodyModelBinderProvider(IList <IInputFormatter> formatters, IHttpRequestStreamReaderFactory readerFactory)
 {
     this.formatters    = formatters;
     this.readerFactory = readerFactory;
     defaultProvider    = new BodyModelBinderProvider(formatters, readerFactory);
 }