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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }