Пример #1
0
        public async Task TryBindStrongModel_BinderExists_BinderReturnsIncorrectlyTypedObject_ReturnsTrue()
        {
            // Arrange
            var innerBinder = new Mock <IModelBinder>();

            innerBinder
            .Setup(o => o.BindModelAsync(It.IsAny <ModelBindingContext>()))
            .Returns((ModelBindingContext mbc) =>
            {
                Assert.Equal("someName.key", mbc.ModelName);
                return(Task.FromResult(new ModelBindingResult(null, string.Empty, true)));
            });
            var bindingContext = GetBindingContext(new SimpleHttpValueProvider(), innerBinder.Object);


            var binder = new KeyValuePairModelBinder <int, string>();

            // Act
            var result = await binder.TryBindStrongModel <int>(bindingContext, "key");

            // Assert
            Assert.True(result.IsModelSet);
            Assert.Null(result.Model);
            Assert.Empty(bindingContext.ModelState);
        }
Пример #2
0
        public async Task TryBindStrongModel_InnerBinderReturnsNotNull_ReturnsInnerBinderResult(
            object model,
            bool isModelSet)
        {
            // Arrange
            var innerResult = new ModelBindingResult(model, key: string.Empty, isModelSet: isModelSet);
            var innerBinder = new Mock <IModelBinder>();

            innerBinder
            .Setup(o => o.BindModelAsync(It.IsAny <ModelBindingContext>()))
            .Returns((ModelBindingContext context) =>
            {
                Assert.Equal("someName.key", context.ModelName);
                return(Task.FromResult(innerResult));
            });
            var bindingContext = GetBindingContext(new SimpleHttpValueProvider(), innerBinder.Object);

            var binder = new KeyValuePairModelBinder <int, string>();
            var modelValidationNodeList = new List <ModelValidationNode>();

            // Act
            var result = await binder.TryBindStrongModel <int>(bindingContext, "key", modelValidationNodeList);

            // Assert
            Assert.Same(innerResult, result);
            Assert.Empty(bindingContext.ModelState);
        }
Пример #3
0
    public async Task TryBindStrongModel_InnerBinderReturnsAResult_ReturnsInnerBinderResult(
        object model,
        bool isSuccess)
    {
        // Arrange
        ModelBindingResult innerResult;

        if (isSuccess)
        {
            innerResult = ModelBindingResult.Success(model);
        }
        else
        {
            innerResult = ModelBindingResult.Failed();
        }

        var innerBinder = new StubModelBinder(context =>
        {
            Assert.Equal("someName.Key", context.ModelName);
            return(innerResult);
        });

        var valueProvider = new SimpleValueProvider();

        var bindingContext = GetBindingContext(valueProvider, typeof(KeyValuePair <int, string>));
        var binder         = new KeyValuePairModelBinder <int, string>(innerBinder, innerBinder, NullLoggerFactory.Instance);

        // Act
        var result = await binder.TryBindStrongModel <int>(bindingContext, innerBinder, "Key", "someName.Key");

        // Assert
        Assert.Equal(innerResult, result);
        Assert.Empty(bindingContext.ModelState);
    }
        public async Task TryBindStrongModel_InnerBinderReturnsAResult_ReturnsInnerBinderResult(
            object model,
            bool isSuccess)
        {
            // Arrange
            ModelBindingResult?innerResult;

            if (isSuccess)
            {
                innerResult = ModelBindingResult.Success("somename.key", model);
            }
            else
            {
                innerResult = ModelBindingResult.Failed("somename.key");
            }

            var innerBinder = new StubModelBinder(context =>
            {
                Assert.Equal("someName.key", context.ModelName);
                return(innerResult);
            });
            var bindingContext = GetBindingContext(new SimpleValueProvider(), innerBinder);

            var binder = new KeyValuePairModelBinder <int, string>();

            // Act
            var result = await binder.TryBindStrongModel <int>(bindingContext, "key");

            // Assert
            Assert.Equal(innerResult.Value, result);
            Assert.Empty(bindingContext.ModelState);
        }
Пример #5
0
    public async Task BindModelAsync(ModelBindingContext bindingContext)
    {
        if (bindingContext == null)
        {
            throw new ArgumentNullException(nameof(bindingContext));
        }

        _logger.AttemptingToBindModel(bindingContext);

        var keyModelName = ModelNames.CreatePropertyModelName(bindingContext.ModelName, "Key");
        var keyResult    = await KeyValuePairModelBinder <TKey, TValue> .TryBindStrongModel <TKey?>(bindingContext, _keyBinder, "Key", keyModelName);

        var valueModelName = ModelNames.CreatePropertyModelName(bindingContext.ModelName, "Value");
        var valueResult    = await KeyValuePairModelBinder <TKey, TValue> .TryBindStrongModel <TValue?>(bindingContext, _valueBinder, "Value", valueModelName);

        if (keyResult.IsModelSet && valueResult.IsModelSet)
        {
            var model = new KeyValuePair <TKey?, TValue?>(
                ModelBindingHelper.CastOrDefault <TKey?>(keyResult.Model),
                ModelBindingHelper.CastOrDefault <TValue?>(valueResult.Model));

            bindingContext.Result = ModelBindingResult.Success(model);
            _logger.DoneAttemptingToBindModel(bindingContext);
            return;
        }

        if (!keyResult.IsModelSet && valueResult.IsModelSet)
        {
            bindingContext.ModelState.TryAddModelError(
                keyModelName,
                bindingContext.ModelMetadata.ModelBindingMessageProvider.MissingKeyOrValueAccessor());
            _logger.DoneAttemptingToBindModel(bindingContext);
            return;
        }

        if (keyResult.IsModelSet && !valueResult.IsModelSet)
        {
            bindingContext.ModelState.TryAddModelError(
                valueModelName,
                bindingContext.ModelMetadata.ModelBindingMessageProvider.MissingKeyOrValueAccessor());
            _logger.DoneAttemptingToBindModel(bindingContext);
            return;
        }

        // If we failed to find data for a top-level model, then generate a
        // default 'empty' model and return it.
        if (bindingContext.IsTopLevelObject)
        {
            var model = new KeyValuePair <TKey?, TValue?>();
            bindingContext.Result = ModelBindingResult.Success(model);
        }
        _logger.DoneAttemptingToBindModel(bindingContext);
    }
Пример #6
0
        public async Task TryBindStrongModel_BinderExists_BinderReturnsCorrectlyTypedObject_ReturnsTrue()
        {
            // Arrange
            ModelBindingContext bindingContext = GetBindingContext(new SimpleHttpValueProvider());
            var binder = new KeyValuePairModelBinder <int, string>();

            // Act
            var result = await binder.TryBindStrongModel <int>(bindingContext, "key");

            // Assert
            Assert.True(result.IsModelSet);
            Assert.Equal(42, result.Model);
            Assert.Empty(bindingContext.ModelState);
        }
Пример #7
0
        public async Task TryBindStrongModel_BinderExists_BinderReturnsCorrectlyTypedObject_ReturnsTrue()
        {
            // Arrange
            ModelBindingContext bindingContext = GetBindingContext(new SimpleHttpValueProvider());
            var binder = new KeyValuePairModelBinder<int, string>();

            // Act
            var retVal = await binder.TryBindStrongModel<int>(bindingContext, "key");

            // Assert
            Assert.True(retVal.Success);
            Assert.Equal(42, retVal.Model);
            Assert.Single(bindingContext.ValidationNode.ChildNodes);
            Assert.Empty(bindingContext.ModelState);
        }
        public async Task TryBindStrongModel_InnerBinderReturnsAResult_ReturnsInnerBinderResult(
            object model,
            bool isSuccess)
        {
            // Arrange
            ModelBindingResult innerResult;

            if (isSuccess)
            {
                innerResult = ModelBindingResult.Success("somename.key", model);
            }
            else
            {
                innerResult = ModelBindingResult.Failed("somename.key");
            }

            var innerBinder = new Mock <IModelBinder>();

            innerBinder
            .Setup(o => o.BindModelAsync(It.IsAny <ModelBindingContext>()))
            .Returns((ModelBindingContext context) =>
            {
                Assert.Equal("someName.key", context.ModelName);
                return(Task.FromResult(innerResult));
            });
            var bindingContext = GetBindingContext(new SimpleValueProvider(), innerBinder.Object);

            var binder = new KeyValuePairModelBinder <int, string>();

            // Act
            var result = await binder.TryBindStrongModel <int>(bindingContext, "key");

            // Assert
            Assert.Equal(innerResult, result);
            Assert.Empty(bindingContext.ModelState);
        }
        public async Task TryBindStrongModel_InnerBinderReturnsNotNull_ReturnsInnerBinderResult(
            object model,
            bool isModelSet)
        {
            // Arrange
            var innerResult = new ModelBindingResult(model, key: string.Empty, isModelSet: isModelSet);
            var innerBinder = new Mock<IModelBinder>();
            innerBinder
                .Setup(o => o.BindModelAsync(It.IsAny<ModelBindingContext>()))
                .Returns((ModelBindingContext context) =>
                {
                    Assert.Equal("someName.key", context.ModelName);
                    return Task.FromResult(innerResult);
                });
            var bindingContext = GetBindingContext(new SimpleHttpValueProvider(), innerBinder.Object);

            var binder = new KeyValuePairModelBinder<int, string>();
            var modelValidationNodeList = new List<ModelValidationNode>();

            // Act
            var result = await binder.TryBindStrongModel<int>(bindingContext, "key", modelValidationNodeList);

            // Assert
            Assert.Same(innerResult, result);
            Assert.Empty(bindingContext.ModelState);
        }
Пример #10
0
        public async Task TryBindStrongModel_InnerBinderReturnsAResult_ReturnsInnerBinderResult(
            object model,
            bool isSuccess)
        {
            // Arrange
            ModelBindingResult innerResult;
            if (isSuccess)
            {
                innerResult = ModelBindingResult.Success(model);
            }
            else
            {
                innerResult = ModelBindingResult.Failed();
            }

            var innerBinder = new StubModelBinder(context =>
            {
                Assert.Equal("someName.Key", context.ModelName);
                return innerResult;
            });

            var valueProvider = new SimpleValueProvider();

            var bindingContext = GetBindingContext(valueProvider, typeof(KeyValuePair<int, string>));
            var binder = new KeyValuePairModelBinder<int, string>(innerBinder, innerBinder);

            // Act
            var result = await binder.TryBindStrongModel<int>(bindingContext, innerBinder, "Key", "someName.Key");

            // Assert
            Assert.Equal(innerResult, result);
            Assert.Empty(bindingContext.ModelState);
        }
        public async Task TryBindStrongModel_InnerBinderReturnsAResult_ReturnsInnerBinderResult(
            object model,
            bool isSuccess)
        {
            // Arrange
            ModelBindingResult innerResult;
            if (isSuccess)
            {
                innerResult = ModelBindingResult.Success("somename.key", model);
            }
            else
            {
                innerResult = ModelBindingResult.Failed("somename.key");
            }

            var innerBinder = new Mock<IModelBinder>();
            innerBinder
                .Setup(o => o.BindModelAsync(It.IsAny<ModelBindingContext>()))
                .Returns((ModelBindingContext context) =>
                {
                    Assert.Equal("someName.key", context.ModelName);
                    return Task.FromResult(innerResult);
                });
            var bindingContext = GetBindingContext(new SimpleValueProvider(), innerBinder.Object);

            var binder = new KeyValuePairModelBinder<int, string>();

            // Act
            var result = await binder.TryBindStrongModel<int>(bindingContext, "key");

            // Assert
            Assert.Equal(innerResult, result);
            Assert.Empty(bindingContext.ModelState);
        }
Пример #12
0
        public async Task TryBindStrongModel_BinderExists_BinderReturnsIncorrectlyTypedObject_ReturnsTrue()
        {
            // Arrange
            var innerBinder = new Mock<IModelBinder>();
            innerBinder
                .Setup(o => o.BindModelAsync(It.IsAny<ModelBindingContext>()))
                .Returns((ModelBindingContext mbc) =>
                {
                    Assert.Equal("someName.key", mbc.ModelName);
                    return Task.FromResult(new ModelBindingResult(null, string.Empty, true));
                });
            var bindingContext = GetBindingContext(new SimpleHttpValueProvider(), innerBinder.Object);


            var binder = new KeyValuePairModelBinder<int, string>();
            var modelValidationNodeList = new List<ModelValidationNode>();

            // Act
            var result = await binder.TryBindStrongModel<int>(bindingContext, "key", modelValidationNodeList);

            // Assert
            Assert.True(result.IsModelSet);
            Assert.Null(result.Model);
            Assert.Empty(bindingContext.ModelState);
        }
Пример #13
0
        public async Task TryBindStrongModel_BinderExists_BinderReturnsCorrectlyTypedObject_ReturnsTrue()
        {
            // Arrange
            var bindingContext = GetBindingContext(new SimpleHttpValueProvider());
            var binder = new KeyValuePairModelBinder<int, string>();
            var modelValidationNodeList = new List<ModelValidationNode>();

            // Act
            var result = await binder.TryBindStrongModel<int>(bindingContext, "key", modelValidationNodeList);

            // Assert
            Assert.True(result.IsModelSet);
            Assert.Equal(42, result.Model);
            Assert.Empty(bindingContext.ModelState);
        }
Пример #14
0
        public async Task TryBindStrongModel_BinderExists_BinderReturnsIncorrectlyTypedObject_ReturnsTrue()
        {
            // Arrange
            var innerBinder = new Mock<IModelBinder>();
            innerBinder
                .Setup(o => o.BindModelAsync(It.IsAny<ModelBindingContext>()))
                .Returns((ModelBindingContext mbc) =>
                {
                    Assert.Equal("someName.key", mbc.ModelName);
                    return Task.FromResult(true);
                });
            var bindingContext = GetBindingContext(new SimpleHttpValueProvider(), innerBinder.Object);
            

            var binder = new KeyValuePairModelBinder<int, string>();

            // Act
            var retVal = await binder.TryBindStrongModel<int>(bindingContext, "key");

            // Assert
            Assert.True(retVal.Success);
            Assert.Equal(default(int), retVal.Model);
            Assert.Single(bindingContext.ValidationNode.ChildNodes);
            Assert.Empty(bindingContext.ModelState);
        }