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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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_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_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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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_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);
        }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
0
        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);
        }
Ejemplo n.º 15
0
        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);
        }