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