public async Task BindModel_CallsBindAsync_OnProvidedModelBinder() { // Arrange var bindingContext = GetBindingContext(typeof(Person), binderType: typeof(TrueModelBinder)); var model = new Person(); var serviceProvider = new ServiceCollection() .AddSingleton(typeof(IModelBinder)) .BuildServiceProvider(); bindingContext.OperationBindingContext.HttpContext.RequestServices = serviceProvider; var binder = new BinderTypeBasedModelBinder(); // Act var binderResult = await binder.BindModelAsync(bindingContext); // Assert var p = (Person)binderResult.Model; Assert.Equal(model.Age, p.Age); Assert.Equal(model.Name, p.Name); Assert.NotNull(binderResult.ValidationNode); Assert.Equal(bindingContext.ModelName, binderResult.ValidationNode.Key); Assert.Same(binderResult.Model, binderResult.ValidationNode.Model); }
public async Task BindModel_CallsBindAsync_OnProvidedModelBinderProvider() { // Arrange var bindingContext = GetBindingContext(typeof(Person)); bindingContext.ModelMetadata.BinderType = typeof(ModelBinderProvider); var model = new Person(); var innerModelBinder = new TrueModelBinder(model); var provider = new ModelBinderProvider(innerModelBinder); var mockITypeActivator = new Mock <ITypeActivator>(); mockITypeActivator .Setup(o => o.CreateInstance(It.IsAny <IServiceProvider>(), typeof(ModelBinderProvider))) .Returns(provider); var binder = new BinderTypeBasedModelBinder(mockITypeActivator.Object); // Act var binderResult = await binder.BindModelAsync(bindingContext); // Assert Assert.True(binderResult); Assert.Same(model, bindingContext.Model); }
public async Task BindModel_ReturnsNoResult_IfNoBinderTypeIsSet() { // Arrange var bindingContext = GetBindingContext(typeof(Person)); var binder = new BinderTypeBasedModelBinder(); // Act var binderResult = await binder.BindModelAsync(bindingContext); // Assert Assert.Equal(ModelBindingResult.NoResult, binderResult); }
public async Task BindModel_ReturnsTrueEvenIfSelectedBinderReturnsFalse() { // Arrange var bindingContext = GetBindingContext(typeof(Person), binderType: typeof(FalseModelBinder)); var binder = new BinderTypeBasedModelBinder(); // Act var binderResult = await binder.BindModelAsync(bindingContext); // Assert Assert.NotNull(binderResult); }
public async Task BindModel_ReturnsFalseIfNoBinderTypeIsSet() { // Arrange var bindingContext = GetBindingContext(typeof(Person)); var binder = new BinderTypeBasedModelBinder(Mock.Of <ITypeActivator>()); // Act var binderResult = await binder.BindModelAsync(bindingContext); // Assert Assert.False(binderResult); }
public async Task BindModel_ReturnsFailedResult_EvenIfSelectedBinderReturnsNull() { // Arrange var bindingContext = GetBindingContext(typeof(Person), binderType: typeof(NullModelBinder)); var binder = new BinderTypeBasedModelBinder(); // Act var binderResult = await binder.BindModelAsync(bindingContext); // Assert Assert.NotEqual(ModelBindingResult.NoResult, binderResult); Assert.False(binderResult.IsModelSet); }
public async Task BindModel_ForNonModelBinder_Throws() { // Arrange var bindingContext = GetBindingContext(typeof(Person), binderType: typeof(Person)); var binder = new BinderTypeBasedModelBinder(); var expected = $"The type '{typeof(Person).FullName}' must implement " + $"'{typeof(IModelBinder).FullName}' to be used as a model binder."; // Act var ex = await Assert.ThrowsAsync <InvalidOperationException>( () => binder.BindModelAsync(bindingContext)); // Assert Assert.Equal(expected, ex.Message); }
public async Task BindModel_ForNonModelBinder_Throws() { // Arrange var bindingContext = GetBindingContext(typeof(Person), binderType: typeof(Person)); var binder = new BinderTypeBasedModelBinder(); var expected = $"The type '{typeof(Person).FullName}' must implement " + $"'{typeof(IModelBinder).FullName}' to be used as a model binder."; // Act var ex = await Assert.ThrowsAsync<InvalidOperationException>( () => binder.BindModelAsync(bindingContext)); // Assert Assert.Equal(expected, ex.Message); }
public async Task BindModel_ForNonModelBinderAndModelBinderProviderTypes_Throws() { // Arrange var bindingContext = GetBindingContext(typeof(Person), binderType: typeof(Person)); var binder = new BinderTypeBasedModelBinder(); var expected = "The type '" + typeof(Person).FullName + "' must implement either " + "'Microsoft.AspNet.Mvc.ModelBinding.IModelBinder' or " + "'Microsoft.AspNet.Mvc.ModelBinding.IModelBinderProvider' to be used as a model binder."; // Act var ex = await Assert.ThrowsAsync <InvalidOperationException>( () => binder.BindModelAsync(bindingContext)); // Assert Assert.Equal(expected, ex.Message); }
public async Task BindModel_ForNonModelBinderAndModelBinderProviderTypes_Throws() { // Arrange var bindingContext = GetBindingContext(typeof(Person)); bindingContext.ModelMetadata.BinderType = typeof(string); var binder = new BinderTypeBasedModelBinder(Mock.Of <ITypeActivator>()); var expected = "The type 'System.String' must implement either " + "'Microsoft.AspNet.Mvc.ModelBinding.IModelBinder' or " + "'Microsoft.AspNet.Mvc.ModelBinding.IModelBinderProvider' to be used as a model binder."; // Act var ex = await Assert.ThrowsAsync <InvalidOperationException>( () => binder.BindModelAsync(bindingContext)); // Assert Assert.Equal(expected, ex.Message); }
public async Task BindModel_ReturnsTrueEvenIfSelectedBinderReturnsFalse() { // Arrange var bindingContext = GetBindingContext(typeof(Person)); bindingContext.ModelMetadata.BinderType = typeof(FalseModelBinder); var innerModelBinder = new FalseModelBinder(); var mockITypeActivator = new Mock <ITypeActivator>(); mockITypeActivator .Setup(o => o.CreateInstance(It.IsAny <IServiceProvider>(), typeof(FalseModelBinder))) .Returns(innerModelBinder); var binder = new BinderTypeBasedModelBinder(mockITypeActivator.Object); // Act var binderResult = await binder.BindModelAsync(bindingContext); // Assert Assert.True(binderResult); }
public async Task BindModel_ForNonModelBinderAndModelBinderProviderTypes_Throws() { // Arrange var bindingContext = GetBindingContext(typeof(Person), binderType: typeof(Person)); var binder = new BinderTypeBasedModelBinder(); var expected = "The type '" + typeof(Person).FullName + "' must implement either " + "'Microsoft.AspNet.Mvc.ModelBinding.IModelBinder' or " + "'Microsoft.AspNet.Mvc.ModelBinding.IModelBinderProvider' to be used as a model binder."; // Act var ex = await Assert.ThrowsAsync<InvalidOperationException>( () => binder.BindModelAsync(bindingContext)); // Assert Assert.Equal(expected, ex.Message); }