예제 #1
0
        public async Task BindModel_Error_FormatExceptionsTurnedIntoStringsInModelState()
        {
            // Arrange
            var message = "The parameter conversion from type 'System.String' to type 'System.Int32' failed." +
                          " See the inner exception for more information.";
            var bindingContext = GetBindingContext(typeof(int));

            bindingContext.ValueProvider = new SimpleHttpValueProvider
            {
                { "theModelName", "not an integer" }
            };

            var binder = new TypeConverterModelBinder();

            // Act
            var retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.True(retVal);
            Assert.Null(bindingContext.Model);
            Assert.False(bindingContext.ModelState.IsValid);
            var error = Assert.Single(bindingContext.ModelState["theModelName"].Errors);

            Assert.Equal(message, error.ErrorMessage);
        }
예제 #2
0
        public async Task BindModel_ReturnsNotNull_IfTypeCanBeConverted(Type destinationType)
        {
            if (TestPlatformHelper.IsMono &&
                destinationType == typeof(DateTimeOffset))
            {
                // DateTimeOffset doesn't have a TypeConverter in Mono
                return;
            }

            // Arrange
            var bindingContext = GetBindingContext(destinationType);

            bindingContext.ValueProvider = new SimpleHttpValueProvider
            {
                { "theModelName", "some-value" }
            };

            var binder = new TypeConverterModelBinder();

            // Act
            var retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.NotNull(retVal);
        }
예제 #3
0
        public async Task BindModel_NullValueProviderResult_ReturnsNull()
        {
            // Arrange
            var bindingContext = GetBindingContext(typeof(int));
            var binder         = new TypeConverterModelBinder();

            // Act
            var retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.Null(retVal);
            Assert.Empty(bindingContext.ModelState);
        }
예제 #4
0
        public async Task BindModel_NullValueProviderResult_ReturnsFalse()
        {
            // Arrange
            ModelBindingContext bindingContext = GetBindingContext(typeof(int));

            TypeConverterModelBinder binder = new TypeConverterModelBinder();

            // Act
            bool retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.False(retVal, "BindModel should have returned null.");
            Assert.Empty(bindingContext.ModelState);
        }
예제 #5
0
        public async Task BindModelAsync_ValidDate_Bound()
        {
            var context = GetBindingContext(typeof(Date?));

            context.ValueProvider = new SimpleValueProvider {
                { TheModelName, "2017-06-11" }
            };

            var binder = new TypeConverterModelBinder();

            await binder.BindModelAsync(context);

            Assert.AreEqual(ModelValidationState.Unvalidated, context.ModelState.ValidationState);
            Assert.AreEqual(new Date(2017, 06, 11), context.Result.Model);
        }
예제 #6
0
        public async Task BindModelAsync_StringEmptyToNullable_Bound()
        {
            var context = GetBindingContext(typeof(Date?));

            context.ValueProvider = new SimpleValueProvider {
                { TheModelName, "" }
            };

            var binder = new TypeConverterModelBinder();

            await binder.BindModelAsync(context);

            Assert.AreEqual(ModelValidationState.Unvalidated, context.ModelState.ValidationState);
            Assert.IsNull(context.Result.Model);
        }
        public async Task BindModel_ReturnsNull_IfTypeCannotBeConverted(Type destinationType)
        {
            // Arrange
            var bindingContext = GetBindingContext(destinationType);
            bindingContext.ValueProvider = new SimpleHttpValueProvider
            {
                { "theModelName", "some-value" }
            };

            var binder = new TypeConverterModelBinder();

            // Act
            var retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.Null(retVal);
        }
예제 #8
0
        public async Task BindModel_ReturnsNull_IfTypeCannotBeConverted(Type destinationType)
        {
            // Arrange
            var bindingContext = GetBindingContext(destinationType);

            bindingContext.ValueProvider = new SimpleHttpValueProvider
            {
                { "theModelName", "some-value" }
            };

            var binder = new TypeConverterModelBinder();

            // Act
            var retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.Null(retVal);
        }
예제 #9
0
        public async Task BindModel_ValidValueProviderResult_ConvertEmptyStringsToNull()
        {
            // Arrange
            var bindingContext = GetBindingContext(typeof(string));

            bindingContext.ValueProvider = new SimpleHttpValueProvider
            {
                { "theModelName", string.Empty }
            };

            var binder = new TypeConverterModelBinder();

            // Act
            var retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.NotNull(retVal);
            Assert.Null(retVal.Model);
            Assert.True(bindingContext.ModelState.ContainsKey("theModelName"));
        }
예제 #10
0
        public async Task BindModel_ValidValueProviderResult_ReturnsModel()
        {
            // Arrange
            var bindingContext = GetBindingContext(typeof(int));

            bindingContext.ValueProvider = new SimpleHttpValueProvider
            {
                { "theModelName", "42" }
            };

            var binder = new TypeConverterModelBinder();

            // Act
            var retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.NotNull(retVal);
            Assert.Equal(42, retVal.Model);
            Assert.True(bindingContext.ModelState.ContainsKey("theModelName"));
        }
예제 #11
0
        public async Task BindModel_Error_FormatExceptionsTurnedIntoStringsInModelState()
        {
            // Arrange
            ModelBindingContext bindingContext = GetBindingContext(typeof(int));
            bindingContext.ValueProvider = new SimpleHttpValueProvider
            {
                { "theModelName", "not an integer" }
            };

            TypeConverterModelBinder binder = new TypeConverterModelBinder();

            // Act
            bool retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.True(retVal);
            Assert.Null(bindingContext.Model);
            Assert.Equal(false, bindingContext.ModelState.IsValid);
            Assert.Equal("Input string was not in a correct format.", bindingContext.ModelState["theModelName"].Errors[0].ErrorMessage);
        }
예제 #12
0
        public async Task BindModelAsync_InvalidDate_ErrorMessage()
        {
            using (new CultureInfoScope("nl-NL"))
            {
                var context = GetBindingContext(typeof(Date));
                context.ValueProvider = new SimpleValueProvider {
                    { TheModelName, "Rubbish" }
                };

                var binder = new TypeConverterModelBinder();

                await binder.BindModelAsync(context);

                Assert.AreEqual(ModelValidationState.Invalid, context.ModelState.ValidationState);

                var error = context.ModelState[TheModelName].Errors.FirstOrDefault();

                Assert.AreEqual("Geen geldige datum", error.ErrorMessage);
                Assert.IsNull(error.Exception);
            }
        }
예제 #13
0
        public async Task BindModel_Error_FormatExceptionsTurnedIntoStringsInModelState()
        {
            // Arrange
            ModelBindingContext bindingContext = GetBindingContext(typeof(int));

            bindingContext.ValueProvider = new SimpleHttpValueProvider
            {
                { "theModelName", "not an integer" }
            };

            TypeConverterModelBinder binder = new TypeConverterModelBinder();

            // Act
            bool retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.True(retVal);
            Assert.Null(bindingContext.Model);
            Assert.Equal(false, bindingContext.ModelState.IsValid);
            Assert.Equal("Input string was not in a correct format.", bindingContext.ModelState["theModelName"].Errors[0].ErrorMessage);
        }
        public async Task BindModel_Error_FormatExceptionsTurnedIntoStringsInModelState()
        {
            // Arrange
            var message = "The value 'not an integer' is not valid for theModelName.";
            var bindingContext = GetBindingContext(typeof(int));
            bindingContext.ValueProvider = new SimpleHttpValueProvider
            {
                { "theModelName", "not an integer" }
            };

            var binder = new TypeConverterModelBinder();

            // Act
            var retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.NotNull(retVal);
            Assert.Null(retVal.Model);
            Assert.False(bindingContext.ModelState.IsValid);
            var error = Assert.Single(bindingContext.ModelState["theModelName"].Errors);
            Assert.Equal(message, error.ErrorMessage);
        }
예제 #15
0
        public async Task BindModel_CreatesError_WhenTypeConversionIsNull(Type destinationType)
        {
            // Arrange
            var bindingContext = GetBindingContext(destinationType);

            bindingContext.ValueProvider = new SimpleHttpValueProvider
            {
                { "theModelName", string.Empty }
            };
            var binder = new TypeConverterModelBinder();

            // Act
            var result = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.False(result.IsModelSet);
            Assert.NotNull(result.ValidationNode);
            var error = Assert.Single(bindingContext.ModelState["theModelName"].Errors);

            Assert.Equal(error.ErrorMessage, "The value '' is invalid.", StringComparer.Ordinal);
            Assert.Null(error.Exception);
        }
        public async Task BindModel_ReturnsNotNull_IfTypeCanBeConverted(Type destinationType)
        {
            if (TestPlatformHelper.IsMono &&
                destinationType == typeof(DateTimeOffset))
            {
                // DateTimeOffset doesn't have a TypeConverter in Mono
                return;
            }

            // Arrange
            var bindingContext = GetBindingContext(destinationType);
            bindingContext.ValueProvider = new SimpleHttpValueProvider
            {
                { "theModelName", "some-value" }
            };

            var binder = new TypeConverterModelBinder();

            // Act
            var retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.NotNull(retVal);
        }
예제 #17
0
        public async Task BindModel_Error_FormatExceptionsTurnedIntoStringsInModelState()
        {
            // Arrange
            var message        = "The value 'not an integer' is not valid for theModelName.";
            var bindingContext = GetBindingContext(typeof(int));

            bindingContext.ValueProvider = new SimpleHttpValueProvider
            {
                { "theModelName", "not an integer" }
            };

            var binder = new TypeConverterModelBinder();

            // Act
            var retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.NotNull(retVal);
            Assert.Null(retVal.Model);
            Assert.False(bindingContext.ModelState.IsValid);
            var error = Assert.Single(bindingContext.ModelState["theModelName"].Errors);

            Assert.Equal(message, error.ErrorMessage);
        }
예제 #18
0
        public async Task BindModel_CreatesError_WhenTypeConversionIsNull(Type destinationType)
        {
            // Arrange
            var bindingContext = GetBindingContext(destinationType);
            bindingContext.ValueProvider = new SimpleHttpValueProvider
            {
                { "theModelName", string.Empty }
            };
            var binder = new TypeConverterModelBinder();

            // Act
            var result = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.False(result.IsModelSet);
            Assert.NotNull(result.ValidationNode);
            var error = Assert.Single(bindingContext.ModelState["theModelName"].Errors);
            Assert.Equal(error.ErrorMessage, "The value '' is invalid.", StringComparer.Ordinal);
            Assert.Null(error.Exception);
        }
예제 #19
0
        public async Task BindModel_NullValueProviderResult_ReturnsFalse()
        {
            // Arrange
            ModelBindingContext bindingContext = GetBindingContext(typeof(int));

            TypeConverterModelBinder binder = new TypeConverterModelBinder();

            // Act
            bool retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.False(retVal, "BindModel should have returned null.");
            Assert.Empty(bindingContext.ModelState);
        }
예제 #20
0
        public async Task BindModel_ValidValueProviderResult_ConvertEmptyStringsToNull()
        {
            // Arrange
            ModelBindingContext bindingContext = GetBindingContext(typeof(string));
            bindingContext.ValueProvider = new SimpleHttpValueProvider
            {
                { "theModelName", "" }
            };

            TypeConverterModelBinder binder = new TypeConverterModelBinder();

            // Act
            bool retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.True(retVal);
            Assert.Null(bindingContext.Model);
            Assert.True(bindingContext.ModelState.ContainsKey("theModelName"));
        }
        public async Task BindModel_ValidValueProviderResult_ReturnsModel()
        {
            // Arrange
            var bindingContext = GetBindingContext(typeof(int));
            bindingContext.ValueProvider = new SimpleHttpValueProvider
            {
                { "theModelName", "42" }
            };

            var binder = new TypeConverterModelBinder();

            // Act
            var retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.NotNull(retVal);
            Assert.Equal(42, retVal.Model);;
            Assert.True(bindingContext.ModelState.ContainsKey("theModelName"));
        }
        public async Task BindModel_NullValueProviderResult_ReturnsNull()
        {
            // Arrange
            var bindingContext = GetBindingContext(typeof(int));
            var binder = new TypeConverterModelBinder();

            // Act
            var retVal = await binder.BindModelAsync(bindingContext);

            // Assert
            Assert.Null(retVal);
            Assert.Empty(bindingContext.ModelState);
        }