diff --git a/src/Microsoft.AspNet.Mvc.Core/ModelBinding/Validation/DefaultObjectValidator.cs b/src/Microsoft.AspNet.Mvc.Core/ModelBinding/Validation/DefaultObjectValidator.cs
index 4a3c5ed0a0..f2b534625b 100644
--- a/src/Microsoft.AspNet.Mvc.Core/ModelBinding/Validation/DefaultObjectValidator.cs
+++ b/src/Microsoft.AspNet.Mvc.Core/ModelBinding/Validation/DefaultObjectValidator.cs
@@ -257,7 +257,9 @@ private static bool ShallowValidate(
}
}
- if (isValid)
+ // Add an entry only if there was an entry which was added by a model binder.
+ // This prevents adding spurious entries.
+ if (modelState.ContainsKey(modelKey) && isValid)
{
validationContext.ModelValidationContext.ModelState.MarkFieldValid(modelKey);
}
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/ActionParametersIntegrationTest.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/ActionParametersIntegrationTest.cs
index f9dfc27bcd..007fe6eb7c 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/ActionParametersIntegrationTest.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/ActionParametersIntegrationTest.cs
@@ -28,20 +28,20 @@ public Person3()
public List
Address { get; }
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task ActionParameter_NonSettableCollectionModel_EmptyPrefix_GetsBound()
{
// Arrange
var argumentBinder = ModelBindingTestHelper.GetArgumentBinder();
var parameter = new ParameterDescriptor()
{
- Name = "Address",
+ Name = "prefix",
ParameterType = typeof(Person3)
};
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
{
- request.QueryString = QueryString.Create("[0].Street", "SomeStreet");
+ request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet");
});
var modelState = new ModelStateDictionary();
@@ -64,7 +64,7 @@ public async Task ActionParameter_NonSettableCollectionModel_EmptyPrefix_GetsBou
Assert.True(modelState.IsValid);
Assert.Equal(1, modelState.Keys.Count);
- var key = Assert.Single(modelState.Keys, k => k == "[0].Street");
+ var key = Assert.Single(modelState.Keys, k => k == "Address[0].Street");
Assert.NotNull(modelState[key].Value);
Assert.Equal("SomeStreet", modelState[key].Value.AttemptedValue);
Assert.Equal("SomeStreet", modelState[key].Value.RawValue);
@@ -77,19 +77,19 @@ private class Person6
public CustomReadOnlyCollection Address { get; set; }
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task ActionParameter_ReadOnlyCollectionModel_EmptyPrefix_DoesNotGetBound()
{
// Arrange
var argumentBinder = ModelBindingTestHelper.GetArgumentBinder();
var parameter = new ParameterDescriptor()
{
- Name = "Address",
+ Name = "prefix",
ParameterType = typeof(Person6)
};
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
{
- request.QueryString = QueryString.Create("[0].Street", "SomeStreet");
+ request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet");
});
var modelState = new ModelStateDictionary();
@@ -119,20 +119,20 @@ private class Person4
public Address[] Address { get; set; }
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task ActionParameter_SettableArrayModel_EmptyPrefix_GetsBound()
{
// Arrange
var argumentBinder = ModelBindingTestHelper.GetArgumentBinder();
var parameter = new ParameterDescriptor()
{
- Name = "Address",
+ Name = "prefix",
ParameterType = typeof(Person4)
};
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
{
- request.QueryString = QueryString.Create("[0].Street", "SomeStreet");
+ request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet");
});
var modelState = new ModelStateDictionary();
@@ -147,6 +147,7 @@ public async Task ActionParameter_SettableArrayModel_EmptyPrefix_GetsBound()
// Model
Assert.NotNull(modelBindingResult.Model);
var boundModel = Assert.IsType(modelBindingResult.Model);
+ Assert.NotNull(boundModel.Address);
Assert.Equal(1, boundModel.Address.Count());
Assert.Equal("SomeStreet", boundModel.Address[0].Street);
@@ -154,7 +155,7 @@ public async Task ActionParameter_SettableArrayModel_EmptyPrefix_GetsBound()
Assert.True(modelState.IsValid);
Assert.Equal(1, modelState.Keys.Count);
- var key = Assert.Single(modelState.Keys, k => k == "[0].Street");
+ var key = Assert.Single(modelState.Keys, k => k == "Address[0].Street");
Assert.NotNull(modelState[key].Value);
Assert.Equal("SomeStreet", modelState[key].Value.AttemptedValue);
Assert.Equal("SomeStreet", modelState[key].Value.RawValue);
@@ -167,20 +168,20 @@ private class Person5
public Address[] Address { get; } = new Address[] { };
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task ActionParameter_NonSettableArrayModel_EmptyPrefix_DoesNotGetBound()
{
// Arrange
var argumentBinder = ModelBindingTestHelper.GetArgumentBinder();
var parameter = new ParameterDescriptor()
{
- Name = "Address",
+ Name = "prefix",
ParameterType = typeof(Person5)
};
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
{
- request.QueryString = QueryString.Create("[0].Street", "SomeStreet");
+ request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet");
});
var modelState = new ModelStateDictionary();
@@ -204,7 +205,7 @@ public async Task ActionParameter_NonSettableArrayModel_EmptyPrefix_DoesNotGetBo
Assert.Empty(modelState.Keys);
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task ActionParameter_NonSettableCollectionModel_WithPrefix_GetsBound()
{
// Arrange
@@ -251,7 +252,7 @@ public async Task ActionParameter_NonSettableCollectionModel_WithPrefix_GetsBoun
Assert.Equal(ModelValidationState.Valid, modelState[key].ValidationState);
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task ActionParameter_ReadOnlyCollectionModel_WithPrefix_DoesNotGetBound()
{
// Arrange
@@ -292,7 +293,7 @@ public async Task ActionParameter_ReadOnlyCollectionModel_WithPrefix_DoesNotGetB
Assert.Empty(modelState.Keys);
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task ActionParameter_SettableArrayModel_WithPrefix_GetsBound()
{
// Arrange
@@ -339,7 +340,7 @@ public async Task ActionParameter_SettableArrayModel_WithPrefix_GetsBound()
Assert.Equal(ModelValidationState.Valid, modelState[key].ValidationState);
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task ActionParameter_NonSettableArrayModel_WithPrefix_DoesNotGetBound()
{
// Arrange
@@ -369,7 +370,7 @@ public async Task ActionParameter_NonSettableArrayModel_WithPrefix_DoesNotGetBou
// Model
Assert.NotNull(modelBindingResult.Model);
- var boundModel = Assert.IsType(modelBindingResult.Model);
+ var boundModel = Assert.IsType(modelBindingResult.Model);
// Arrays should not be updated.
Assert.Equal(0, boundModel.Address.Count());
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/ArrayModelBinderIntegrationTest.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/ArrayModelBinderIntegrationTest.cs
index a9b30377d9..94e59a69ff 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/ArrayModelBinderIntegrationTest.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/ArrayModelBinderIntegrationTest.cs
@@ -11,7 +11,7 @@ namespace Microsoft.AspNet.Mvc.IntegrationTests
// Integration tests targeting the behavior of the ArrayModelBinder with other model binders.
public class ArrayModelBinderIntegrationTest
{
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task ArrayModelBinder_BindsArrayOfSimpleType_WithPrefix_Success()
{
// Arrange
@@ -39,7 +39,7 @@ public async Task ArrayModelBinder_BindsArrayOfSimpleType_WithPrefix_Success()
var model = Assert.IsType(modelBindingResult.Model);
Assert.Equal(new int[] { 10, 11 }, model);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -52,7 +52,7 @@ public async Task ArrayModelBinder_BindsArrayOfSimpleType_WithPrefix_Success()
Assert.Equal("11", entry.Value.RawValue);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task ArrayModelBinder_BindsArrayOfSimpleType_WithExplicitPrefix_Success()
{
// Arrange
@@ -84,7 +84,7 @@ public async Task ArrayModelBinder_BindsArrayOfSimpleType_WithExplicitPrefix_Suc
var model = Assert.IsType(modelBindingResult.Model);
Assert.Equal(new int[] { 10, 11 }, model);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -97,7 +97,7 @@ public async Task ArrayModelBinder_BindsArrayOfSimpleType_WithExplicitPrefix_Suc
Assert.Equal("11", entry.Value.RawValue);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task ArrayModelBinder_BindsArrayOfSimpleType_EmptyPrefix_Success()
{
// Arrange
@@ -125,7 +125,7 @@ public async Task ArrayModelBinder_BindsArrayOfSimpleType_EmptyPrefix_Success()
var model = Assert.IsType(modelBindingResult.Model);
Assert.Equal(new int[] { 10, 11 }, model);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -174,7 +174,7 @@ private class Person
public string Name { get; set; }
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task ArrayModelBinder_BindsArrayOfComplexType_WithPrefix_Success()
{
// Arrange
@@ -203,7 +203,7 @@ public async Task ArrayModelBinder_BindsArrayOfComplexType_WithPrefix_Success()
Assert.Equal("bill", model[0].Name);
Assert.Equal("lang", model[1].Name);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -216,7 +216,7 @@ public async Task ArrayModelBinder_BindsArrayOfComplexType_WithPrefix_Success()
Assert.Equal("lang", entry.Value.RawValue);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task ArrayModelBinder_BindsArrayOfComplexType_WithExplicitPrefix_Success()
{
// Arrange
@@ -233,7 +233,7 @@ public async Task ArrayModelBinder_BindsArrayOfComplexType_WithExplicitPrefix_Su
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
{
- request.QueryString = new QueryString("?prefix[0].Name=bill&prefix[1]=lang");
+ request.QueryString = new QueryString("?prefix[0].Name=bill&prefix[1].Name=lang");
});
var modelState = new ModelStateDictionary();
@@ -249,7 +249,7 @@ public async Task ArrayModelBinder_BindsArrayOfComplexType_WithExplicitPrefix_Su
Assert.Equal("bill", model[0].Name);
Assert.Equal("lang", model[1].Name);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -262,7 +262,7 @@ public async Task ArrayModelBinder_BindsArrayOfComplexType_WithExplicitPrefix_Su
Assert.Equal("lang", entry.Value.RawValue);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task ArrayModelBinder_BindsArrayOfComplexType_EmptyPrefix_Success()
{
// Arrange
@@ -291,7 +291,7 @@ public async Task ArrayModelBinder_BindsArrayOfComplexType_EmptyPrefix_Success()
Assert.Equal("bill", model[0].Name);
Assert.Equal("lang", model[1].Name);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/BinderTypeBasedModelBinderIntegrationTest.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/BinderTypeBasedModelBinderIntegrationTest.cs
index 19fd5fac9a..f38f7a749a 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/BinderTypeBasedModelBinderIntegrationTest.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/BinderTypeBasedModelBinderIntegrationTest.cs
@@ -2,8 +2,10 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
+using System.Globalization;
using System.Threading.Tasks;
using Microsoft.AspNet.Mvc.ModelBinding;
+using Microsoft.AspNet.Testing;
using Xunit;
namespace Microsoft.AspNet.Mvc.IntegrationTests
@@ -130,6 +132,7 @@ public async Task BindParameter_WithOutModelBinderType_NoData()
// Ensures that prefix is part of the result returned back.
[Fact]
+ [ReplaceCulture]
public async Task BindParameter_WithData_WithPrefix_GetsBound()
{
// Arrange
@@ -163,7 +166,8 @@ public async Task BindParameter_WithData_WithPrefix_GetsBound()
Assert.True(modelState.IsValid);
var key = Assert.Single(modelState.Keys);
Assert.Equal("CustomParameter", key);
- Assert.Null(modelState[key].Value); // value is only set if the custom model binder sets it.
+ Assert.Equal(ModelValidationState.Valid, modelState[key].ValidationState);
+ Assert.NotNull(modelState[key].Value); // Value is set by test model binder, no need to validate it.
}
private class Person
@@ -177,7 +181,7 @@ private class Address
public string Street { get; set; }
}
- [Fact(Skip = "Extra entries in model state #2446")]
+ [Fact]
public async Task BindProperty_WithData_EmptyPrefix_GetsBound()
{
// Arrange
@@ -209,16 +213,13 @@ public async Task BindProperty_WithData_EmptyPrefix_GetsBound()
// ModelState
Assert.True(modelState.IsValid);
- // Should there be another key for what is there in the complex object ?
- // This should probably behave like body binder, where even the body gets validated by default.
- Assert.Equal(2, modelState.Keys.Count);
+ Assert.Equal(1, modelState.Keys.Count);
var key = Assert.Single(modelState.Keys, k => k == "Parameter1.Address.Street");
- Assert.Null(modelState[key].Value); // value is only set if the custom model binder sets it.
- key = Assert.Single(modelState.Keys, k => k == "Parameter1.Address");
- Assert.Null(modelState[key].Value); // value is only set if the custom model binder sets it.
+ Assert.Equal(ModelValidationState.Valid, modelState[key].ValidationState);
+ Assert.NotNull(modelState[key].Value); // Value is set by test model binder, no need to validate it.
}
- [Fact(Skip = "Extra entries in model state #2446")]
+ [Fact]
public async Task BindProperty_WithData_WithPrefix_GetsBound()
{
// Arrange
@@ -252,14 +253,10 @@ public async Task BindProperty_WithData_WithPrefix_GetsBound()
// ModelState
Assert.True(modelState.IsValid);
-
- // Should there be another key for what is there in the complex object ?
- // This should probably behave like body binder, where even the body gets validated by default.
- Assert.Equal(2, modelState.Keys.Count);
+ Assert.Equal(1, modelState.Keys.Count);
var key = Assert.Single(modelState.Keys, k => k == "CustomParameter.Address.Street");
- Assert.Null(modelState[key].Value); // value is only set if the custom model binder sets it.
- key = Assert.Single(modelState.Keys, k => k == "CustomParameter.Address");
- Assert.Null(modelState[key].Value); // value is only set if the custom model binder sets it.
+ Assert.Equal(ModelValidationState.Valid, modelState[key].ValidationState);
+ Assert.NotNull(modelState[key].Value); // Value is set by test model binder, no need to validate it.
}
private class AddressModelBinder : IModelBinder
@@ -273,7 +270,22 @@ public Task BindModelAsync(ModelBindingContext bindingContex
var address = new Address() { Street = "SomeStreet" };
- return Task.FromResult(new ModelBindingResult(address, bindingContext.ModelName, true));
+ bindingContext.ModelState.SetModelValue(
+ ModelNames.CreatePropertyModelName(bindingContext.ModelName, "Street"),
+ new ValueProviderResult(
+ address.Street,
+ address.Street,
+ CultureInfo.CurrentCulture));
+
+ var validationNode = new ModelValidationNode(
+ bindingContext.ModelName,
+ bindingContext.ModelMetadata,
+ address)
+ {
+ ValidateAllProperties = true
+ };
+
+ return Task.FromResult(new ModelBindingResult(address, bindingContext.ModelName, true, validationNode));
}
}
@@ -282,6 +294,10 @@ private class SuccessModelBinder : IModelBinder
public Task BindModelAsync(ModelBindingContext bindingContext)
{
var model = "Success";
+ bindingContext.ModelState.SetModelValue(
+ bindingContext.ModelName,
+ new ValueProviderResult(model, model, CultureInfo.CurrentCulture));
+
var modelValidationNode = new ModelValidationNode(
bindingContext.ModelName,
bindingContext.ModelMetadata,
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/BodyValidationIntegrationTests.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/BodyValidationIntegrationTests.cs
index e02a7120e0..23f7c529aa 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/BodyValidationIntegrationTests.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/BodyValidationIntegrationTests.cs
@@ -27,7 +27,7 @@ private class Address
public string Street { get; set; }
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task FromBodyAndRequiredOnProperty_EmptyBody_AddsModelStateError()
{
// Arrange
@@ -171,7 +171,7 @@ private class Address2
public int Zip { get; set; }
}
- [Theory]
+ [Theory(Skip = "There should be entries for all model properties which are bound. #2445")]
[InlineData("{ \"Zip\" : 123 }")]
[InlineData("{}")]
public async Task FromBodyOnTopLevelProperty_RequiredOnSubProperty_AddsModelStateError(string inputText)
@@ -214,5 +214,65 @@ public async Task FromBodyOnTopLevelProperty_RequiredOnSubProperty_AddsModelStat
var error = Assert.Single(modelState[street].Errors);
Assert.Equal("The Street field is required.", error.ErrorMessage);
}
+
+ private class Person3
+ {
+ [FromBody]
+ public Address3 Address { get; set; }
+ }
+
+ private class Address3
+ {
+ public string Street { get; set; }
+
+ [Required]
+ public int Zip { get; set; }
+ }
+
+ [Theory(Skip = "There should be entries for all model properties which are bound. #2445")]
+ [InlineData("{ \"Street\" : \"someStreet\" }")]
+ [InlineData("{}")]
+ public async Task FromBodyOnProperty_RequiredOnValueTypeSubProperty_AddsModelStateError(string inputText)
+ {
+ // Arrange
+ var argumentBinder = ModelBindingTestHelper.GetArgumentBinder();
+ var parameter = new ParameterDescriptor()
+ {
+ BindingInfo = new BindingInfo()
+ {
+ BinderModelName = "CustomParameter",
+ },
+ ParameterType = typeof(Person3)
+ };
+
+ var operationContext = ModelBindingTestHelper.GetOperationBindingContext(
+ request =>
+ {
+ request.Body = new MemoryStream(Encoding.UTF8.GetBytes(inputText));
+ request.ContentType = "application/json";
+ });
+ var modelState = new ModelStateDictionary();
+
+ // Act
+ var modelBindingResult = await argumentBinder.BindModelAsync(parameter, modelState, operationContext);
+
+ // Assert
+ Assert.NotNull(modelBindingResult);
+ Assert.True(modelBindingResult.IsModelSet);
+ var boundPerson = Assert.IsType(modelBindingResult.Model);
+ Assert.NotNull(boundPerson);
+ Assert.False(modelState.IsValid);
+ var street = Assert.Single(modelState.Keys, k => k == "CustomParameter.Address.Street");
+ Assert.Equal(ModelValidationState.Valid, modelState[street].ValidationState);
+
+ // The error with an empty key is a bug(#2416) in our implementation which does not append the prefix and
+ // use that along with the path. The expected key here would be Address.
+ var zip = Assert.Single(modelState.Keys, k => k == "CustomParameter.Address.Zip");
+ Assert.Equal(ModelValidationState.Valid, modelState[zip].ValidationState);
+ var error = Assert.Single(modelState[""].Errors);
+ Assert.StartsWith(
+ "Required property 'Zip' not found in JSON. Path ''",
+ error.Exception.Message);
+ }
}
}
\ No newline at end of file
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/ByteArrayModelBinderIntegrationTest.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/ByteArrayModelBinderIntegrationTest.cs
index 18ba1be4cd..4203930dea 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/ByteArrayModelBinderIntegrationTest.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/ByteArrayModelBinderIntegrationTest.cs
@@ -16,7 +16,7 @@ private class Person
public byte[] Token { get; set; }
}
- [Theory(Skip = "Extra entries in model state #2446, ModelState.Value not set due to #2445, #2447")]
+ [Theory(Skip = "ModelState.Value not set due to #2445, #2447")]
[InlineData(true)]
[InlineData(false)]
public async Task BindProperty_WithData_GetsBound(bool fallBackScenario)
@@ -61,7 +61,7 @@ public async Task BindProperty_WithData_GetsBound(bool fallBackScenario)
// ModelState
Assert.True(modelState.IsValid);
- Assert.Equal(2, modelState.Keys.Count); // Should be only two keys. bug #2446
+ Assert.Equal(2, modelState.Keys.Count);
Assert.Single(modelState.Keys, k => k == prefix);
Assert.Single(modelState.Keys, k => k == queryStringKey);
@@ -109,7 +109,7 @@ public async Task BindParameter_NoData_DoesNotGetBound()
Assert.Empty(modelState.Keys);
}
- [Fact(Skip = "ModelState.Value not set due to #2445, #2446")]
+ [Fact(Skip = "ModelState.Value not set due to #2445")]
public async Task BindParameter_WithData_GetsBound()
{
// Arrange
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/CancellationTokenModelBinderIntegrationTest.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/CancellationTokenModelBinderIntegrationTest.cs
index 9e6b76886c..88b0773ddb 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/CancellationTokenModelBinderIntegrationTest.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/CancellationTokenModelBinderIntegrationTest.cs
@@ -66,7 +66,7 @@ public async Task BindProperty_WithData__WithPrefix_GetsBound()
Assert.Equal(ModelValidationState.Skipped, modelState[key].ValidationState);
}
- [Fact(Skip = "CancellationToken should not be validated #2447,Extra entries in model state dictionary. #2466")]
+ [Fact(Skip = "CancellationToken should not be validated #2447")]
public async Task BindProperty_WithData__WithEmptyPrefix_GetsBound()
{
// Arrange
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/CollectionModelBinderIntegrationTest.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/CollectionModelBinderIntegrationTest.cs
index 74b4a2a27a..167cea94eb 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/CollectionModelBinderIntegrationTest.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/CollectionModelBinderIntegrationTest.cs
@@ -17,7 +17,7 @@ namespace Microsoft.AspNet.Mvc.IntegrationTests
// Note that CollectionModelBinder handles both ICollection{T} and IList{T}
public class CollectionModelBinderIntegrationTest
{
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task CollectionModelBinder_BindsListOfSimpleType_WithPrefix_Success()
{
// Arrange
@@ -45,7 +45,7 @@ public async Task CollectionModelBinder_BindsListOfSimpleType_WithPrefix_Success
var model = Assert.IsType>(modelBindingResult.Model);
Assert.Equal(new List() { 10, 11 }, model);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -58,7 +58,7 @@ public async Task CollectionModelBinder_BindsListOfSimpleType_WithPrefix_Success
Assert.Equal("11", entry.Value.RawValue);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task CollectionModelBinder_BindsListOfSimpleType_WithExplicitPrefix_Success()
{
// Arrange
@@ -90,7 +90,7 @@ public async Task CollectionModelBinder_BindsListOfSimpleType_WithExplicitPrefix
var model = Assert.IsType>(modelBindingResult.Model);
Assert.Equal(new List() { 10, 11 }, model);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -103,7 +103,7 @@ public async Task CollectionModelBinder_BindsListOfSimpleType_WithExplicitPrefix
Assert.Equal("11", entry.Value.RawValue);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task CollectionModelBinder_BindsCollectionOfSimpleType_EmptyPrefix_Success()
{
// Arrange
@@ -131,7 +131,7 @@ public async Task CollectionModelBinder_BindsCollectionOfSimpleType_EmptyPrefix_
var model = Assert.IsType>(modelBindingResult.Model);
Assert.Equal(new List { 10, 11 }, model);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -180,7 +180,7 @@ private class Person
public int Id { get; set; }
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task CollectionModelBinder_BindsListOfComplexType_WithPrefix_Success()
{
// Arrange
@@ -209,7 +209,7 @@ public async Task CollectionModelBinder_BindsListOfComplexType_WithPrefix_Succes
Assert.Equal(10, model[0].Id);
Assert.Equal(11, model[1].Id);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -222,7 +222,7 @@ public async Task CollectionModelBinder_BindsListOfComplexType_WithPrefix_Succes
Assert.Equal("11", entry.Value.RawValue);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task CollectionModelBinder_BindsListOfComplexType_WithExplicitPrefix_Success()
{
// Arrange
@@ -255,7 +255,7 @@ public async Task CollectionModelBinder_BindsListOfComplexType_WithExplicitPrefi
Assert.Equal(10, model[0].Id);
Assert.Equal(11, model[1].Id);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -268,7 +268,7 @@ public async Task CollectionModelBinder_BindsListOfComplexType_WithExplicitPrefi
Assert.Equal("11", entry.Value.RawValue);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task CollectionModelBinder_BindsCollectionOfComplexType_EmptyPrefix_Success()
{
// Arrange
@@ -276,7 +276,7 @@ public async Task CollectionModelBinder_BindsCollectionOfComplexType_EmptyPrefix
var parameter = new ParameterDescriptor()
{
Name = "parameter",
- ParameterType = typeof(ICollection)
+ ParameterType = typeof(List)
};
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
@@ -297,7 +297,7 @@ public async Task CollectionModelBinder_BindsCollectionOfComplexType_EmptyPrefix
Assert.Equal(10, model[0].Id);
Assert.Equal(11, model[1].Id);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -552,7 +552,7 @@ private class Address4
public string Street { get; set; }
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task CollectionModelBinder_UsesCustomIndexes()
{
// Arrange
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/DictionaryModelBinderIntegrationTest.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/DictionaryModelBinderIntegrationTest.cs
index 63bc04b49c..792e0b7157 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/DictionaryModelBinderIntegrationTest.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/DictionaryModelBinderIntegrationTest.cs
@@ -13,7 +13,7 @@ namespace Microsoft.AspNet.Mvc.IntegrationTests
// Integration tests targeting the behavior of the DictionaryModelBinder with other model binders.
public class DictionaryModelBinderIntegrationTest
{
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task DictionaryModelBinder_BindsDictionaryOfSimpleType_WithPrefix_Success()
{
// Arrange
@@ -41,7 +41,7 @@ public async Task DictionaryModelBinder_BindsDictionaryOfSimpleType_WithPrefix_S
var model = Assert.IsType>(modelBindingResult.Model);
Assert.Equal(new Dictionary() { { "key0", 10 } }, model);
- Assert.Equal(2, modelState.Count); // Fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -54,7 +54,7 @@ public async Task DictionaryModelBinder_BindsDictionaryOfSimpleType_WithPrefix_S
Assert.Equal("10", entry.Value.RawValue);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task DictionaryModelBinder_BindsDictionaryOfSimpleType_WithExplicitPrefix_Success()
{
// Arrange
@@ -86,7 +86,7 @@ public async Task DictionaryModelBinder_BindsDictionaryOfSimpleType_WithExplicit
var model = Assert.IsType>(modelBindingResult.Model);
Assert.Equal(new Dictionary() { { "key0", 10 }, }, model);
- Assert.Equal(2, modelState.Count); // Fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -99,7 +99,7 @@ public async Task DictionaryModelBinder_BindsDictionaryOfSimpleType_WithExplicit
Assert.Equal("10", entry.Value.RawValue);
}
- [Fact(Skip = "Extra ModelState key because of #2446, IsValue == false because of #2470")]
+ [Fact(Skip = "IsValid == false because of #2470")]
public async Task DictionaryModelBinder_BindsDictionaryOfSimpleType_EmptyPrefix_Success()
{
// Arrange
@@ -127,7 +127,7 @@ public async Task DictionaryModelBinder_BindsDictionaryOfSimpleType_EmptyPrefix_
var model = Assert.IsType>(modelBindingResult.Model);
Assert.Equal(new Dictionary() { { "key0", 10 }, }, model);
- Assert.Equal(2, modelState.Count); // Fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid); // Fails due to #2470
@@ -176,7 +176,7 @@ private class Person
public int Id { get; set; }
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task DictionaryModelBinder_BindsDictionaryOfComplexType_WithPrefix_Success()
{
// Arrange
@@ -206,7 +206,7 @@ public async Task DictionaryModelBinder_BindsDictionaryOfComplexType_WithPrefix_
Assert.Equal("key0", model.Keys.First());
Assert.Equal(model.Values, model.Values);
- Assert.Equal(2, modelState.Count); // Fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -219,7 +219,7 @@ public async Task DictionaryModelBinder_BindsDictionaryOfComplexType_WithPrefix_
Assert.Equal("10", entry.Value.RawValue);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task DictionaryModelBinder_BindsDictionaryOfComplexType_WithExplicitPrefix_Success()
{
// Arrange
@@ -253,7 +253,7 @@ public async Task DictionaryModelBinder_BindsDictionaryOfComplexType_WithExplici
Assert.Equal("key0", model.Keys.First());
Assert.Equal(model.Values, model.Values);
- Assert.Equal(2, modelState.Count); // Fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -266,7 +266,7 @@ public async Task DictionaryModelBinder_BindsDictionaryOfComplexType_WithExplici
Assert.Equal("10", entry.Value.RawValue);
}
- [Fact(Skip = "Extra ModelState key because of #2446, IsValue == false because of #2470")]
+ [Fact(Skip = "IsValid == false because of #2470")]
public async Task DictionaryModelBinder_BindsDictionaryOfComplexType_EmptyPrefix_Success()
{
// Arrange
@@ -296,7 +296,7 @@ public async Task DictionaryModelBinder_BindsDictionaryOfComplexType_EmptyPrefix
Assert.Equal("key0", model.Keys.First());
Assert.Equal(model.Values, model.Values);
- Assert.Equal(2, modelState.Count); // Fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid); // Fails due to #2470
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/FormCollectionModelBindingIntegrationTest.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/FormCollectionModelBindingIntegrationTest.cs
index c9a1b075e8..d5b7e7afeb 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/FormCollectionModelBindingIntegrationTest.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/FormCollectionModelBindingIntegrationTest.cs
@@ -27,7 +27,7 @@ private class Address
public FormCollection FileCollection { get; set; }
}
- [Fact(Skip = "ModelState.Value not set due to #2445, Extra entries in model state #2446.")]
+ [Fact(Skip = "ModelState.Value not set due to #2445")]
public async Task BindProperty_WithData_WithEmptyPrefix_GetsBound()
{
// Arrange
@@ -71,13 +71,13 @@ public async Task BindProperty_WithData_WithEmptyPrefix_GetsBound()
Assert.True(modelState.IsValid);
Assert.Equal(2, modelState.Count);
Assert.Single(modelState.Keys, k => k == "Address.Zip");
- var key = Assert.Single(modelState.Keys, k => k == "Address.File"); // Should be only one key. bug #2446
+ var key = Assert.Single(modelState.Keys, k => k == "Address.File");
Assert.NotNull(modelState[key].Value); // should be non null bug #2445.
Assert.Empty(modelState[key].Errors);
Assert.Equal(ModelValidationState.Valid, modelState[key].ValidationState);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task BindParameter_WithData_GetsBound()
{
// Arrange
@@ -125,10 +125,10 @@ public async Task BindParameter_WithData_GetsBound()
// Validation should be skipped because we do not validate any parameters and since IFormFile is not
// IValidatableObject, we should have no entries in the model state dictionary.
- Assert.Empty(modelState.Keys); // Enable when we fix #2446.
+ Assert.Empty(modelState.Keys);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact(Skip = "FormCollection should not return null modelBindingResult for a type that matches. #2456")]
public async Task BindParameter_NoData_DoesNotGetBound()
{
// Arrange
@@ -147,7 +147,6 @@ public async Task BindParameter_NoData_DoesNotGetBound()
// No data is passed.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
{
- request.ContentType = "multipart/form-data";
});
var modelState = new ModelStateDictionary();
@@ -158,7 +157,7 @@ public async Task BindParameter_NoData_DoesNotGetBound()
// Assert
// ModelBindingResult
- Assert.NotNull(modelBindingResult); // Fails due to bug #2456
+ Assert.NotNull(modelBindingResult);
Assert.Null(modelBindingResult.Model);
// ModelState
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/FormFileModelBindingIntegrationTest.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/FormFileModelBindingIntegrationTest.cs
index cf58601063..561ebe0c1b 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/FormFileModelBindingIntegrationTest.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/FormFileModelBindingIntegrationTest.cs
@@ -27,7 +27,7 @@ private class Address
public IFormFile File { get; set; }
}
- [Fact(Skip = "ModelState.Value not set due to #2445, Extra entries in model state #2446.")]
+ [Fact(Skip = "ModelState.Value not set due to #2445")]
public async Task BindProperty_WithData_WithEmptyPrefix_GetsBound()
{
// Arrange
@@ -70,13 +70,13 @@ public async Task BindProperty_WithData_WithEmptyPrefix_GetsBound()
Assert.True(modelState.IsValid);
Assert.Equal(2, modelState.Count);
Assert.Single(modelState.Keys, k => k == "Address.Zip");
- var key = Assert.Single(modelState.Keys, k => k == "Address.File"); // Should be only one key. bug #2446
+ var key = Assert.Single(modelState.Keys, k => k == "Address.File");
Assert.NotNull(modelState[key].Value); // should be non null bug #2445.
Assert.Empty(modelState[key].Errors);
Assert.Equal(ModelValidationState.Valid, modelState[key].ValidationState);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task BindParameter_WithData_GetsBound()
{
// Arrange
@@ -122,10 +122,10 @@ public async Task BindParameter_WithData_GetsBound()
// Validation should be skipped because we do not validate any parameters and since IFormFile is not
// IValidatableObject, we should have no entries in the model state dictionary.
- Assert.Empty(modelState.Keys); // Enable when we fix #2446.
+ Assert.Empty(modelState.Keys);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact(Skip = "FormFile Should not return null modelBindingResult for a type that matches. #2456")]
public async Task BindParameter_NoData_DoesNotGetBound()
{
// Arrange
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/GenericModelBinderIntegrationTest.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/GenericModelBinderIntegrationTest.cs
index 2f757b2cd3..4a32af6ddc 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/GenericModelBinderIntegrationTest.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/GenericModelBinderIntegrationTest.cs
@@ -20,7 +20,7 @@ public class GenericModelBinderIntegrationTest
//
// In this example we choose IFormCollection - because IFormCollection has a dedicated
// model binder.
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task GenericModelBinder_BindsCollection_ElementTypeFromGreedyModelBinder_WithPrefix_Success()
{
// Arrange
@@ -50,7 +50,7 @@ public async Task GenericModelBinder_BindsCollection_ElementTypeFromGreedyModelB
Assert.Equal(1, model.Count);
Assert.NotNull(model[0]);
- Assert.Equal(0, modelState.Count); // This fails due to #2446
+ Assert.Equal(0, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
}
@@ -60,7 +60,7 @@ public async Task GenericModelBinder_BindsCollection_ElementTypeFromGreedyModelB
//
// In this example we choose IFormCollection - because IFormCollection has a dedicated
// model binder.
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task GenericModelBinder_BindsCollection_ElementTypeFromGreedyModelBinder_EmptyPrefix_Success()
{
// Arrange
@@ -89,7 +89,7 @@ public async Task GenericModelBinder_BindsCollection_ElementTypeFromGreedyModelB
Assert.Equal(1, model.Count);
Assert.NotNull(model[0]);
- Assert.Equal(0, modelState.Count); // This fails due to #2446
+ Assert.Equal(0, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
}
@@ -169,7 +169,7 @@ protected override Task BindModelCoreAsync(ModelBindingConte
// This isn't an especially useful scenario - but it exercises what happens when you
// try to use a Collection of something that is bound greedily by binding source.
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task GenericModelBinder_BindsCollection_ElementTypeUsesGreedyModelBinder_WithPrefix_Success()
{
// Arrange
@@ -199,14 +199,14 @@ public async Task GenericModelBinder_BindsCollection_ElementTypeUsesGreedyModelB
Assert.Equal(1, model.Length);
Assert.NotNull(model[0]);
- Assert.Equal(0, modelState.Count); // This fails due to #2446
+ Assert.Equal(0, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
}
// This is part of a random sampling of scenarios where a GenericModelBinder is used
// recursively.
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task GenericModelBinder_BindsArrayOfDictionary_WithPrefix_Success()
{
// Arrange
@@ -237,7 +237,7 @@ public async Task GenericModelBinder_BindsArrayOfDictionary_WithPrefix_Success()
Assert.Equal("key0", kvp.Key);
Assert.Equal(10, kvp.Value);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -252,7 +252,7 @@ public async Task GenericModelBinder_BindsArrayOfDictionary_WithPrefix_Success()
// This is part of a random sampling of scenarios where a GenericModelBinder is used
// recursively.
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task GenericModelBinder_BindsArrayOfDictionary_EmptyPrefix_Success()
{
// Arrange
@@ -283,7 +283,7 @@ public async Task GenericModelBinder_BindsArrayOfDictionary_EmptyPrefix_Success(
Assert.Equal("key0", kvp.Key);
Assert.Equal(10, kvp.Value);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -334,7 +334,7 @@ public async Task GenericModelBinder_BindsArrayOfDictionary_NoData()
// This is part of a random sampling of scenarios where a GenericModelBinder is used
// recursively.
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task GenericModelBinder_BindsCollectionOfKeyValuePair_WithPrefix_Success()
{
// Arrange
@@ -364,7 +364,7 @@ public async Task GenericModelBinder_BindsCollectionOfKeyValuePair_WithPrefix_Su
Assert.Equal("key0", kvp.Key);
Assert.Equal(10, kvp.Value);
- Assert.Equal(2, modelState.Count); // Fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -379,7 +379,7 @@ public async Task GenericModelBinder_BindsCollectionOfKeyValuePair_WithPrefix_Su
// This is part of a random sampling of scenarios where a GenericModelBinder is used
// recursively.
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task GenericModelBinder_BindsCollectionOfKeyValuePair_EmptyPrefix_Success()
{
// Arrange
@@ -409,7 +409,7 @@ public async Task GenericModelBinder_BindsCollectionOfKeyValuePair_EmptyPrefix_S
Assert.Equal("key0", kvp.Key);
Assert.Equal(10, kvp.Value);
- Assert.Equal(2, modelState.Count); //Fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -460,7 +460,7 @@ public async Task GenericModelBinder_BindsCollectionOfKeyValuePair_NoData()
// This is part of a random sampling of scenarios where a GenericModelBinder is used
// recursively.
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task GenericModelBinder_BindsDictionaryOfList_WithPrefix_Success()
{
// Arrange
@@ -491,7 +491,7 @@ public async Task GenericModelBinder_BindsDictionaryOfList_WithPrefix_Success()
Assert.Equal("key0", kvp.Key);
Assert.Equal(new List() { 10, 11 }, kvp.Value);
- Assert.Equal(3, modelState.Count); // Fails due to #2446
+ Assert.Equal(3, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -510,7 +510,7 @@ public async Task GenericModelBinder_BindsDictionaryOfList_WithPrefix_Success()
// This is part of a random sampling of scenarios where a GenericModelBinder is used
// recursively.
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task GenericModelBinder_BindsDictionaryOfList_EmptyPrefix_Success()
{
// Arrange
@@ -540,7 +540,7 @@ public async Task GenericModelBinder_BindsDictionaryOfList_EmptyPrefix_Success()
Assert.Equal("key0", kvp.Key);
Assert.Equal(new List() { 10, 11 }, kvp.Value);
- Assert.Equal(3, modelState.Count); // Fails due to #2446
+ Assert.Equal(3, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/HeaderModelBinderIntegrationTest.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/HeaderModelBinderIntegrationTest.cs
index dc05c801d1..616564892f 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/HeaderModelBinderIntegrationTest.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/HeaderModelBinderIntegrationTest.cs
@@ -116,7 +116,7 @@ public async Task BindPropertyFromHeader_WithPrefix_GetsBound()
// The scenario is interesting as we to bind the top level model we fallback to empty prefix,
// and hence the model state keys have an empty prefix.
- [Fact(Skip = "ModelState.Value not set due to #2445. ModelState should not have empty key #2466.")]
+ [Fact(Skip = "ModelState.Value not set due to #2445.")]
public async Task BindPropertyFromHeader_WithData_WithEmptyPrefix_GetsBound()
{
// Arrange
@@ -160,8 +160,8 @@ public async Task BindPropertyFromHeader_WithData_WithEmptyPrefix_GetsBound()
Assert.Equal("someValue", modelState[key].Value.AttemptedValue);
}
- [Theory(Skip = "Extra entries in model state #2446.")]
- [InlineData(typeof(string[]), "value1, value2, value3")]
+ [Theory(Skip = "Greedy Model Binders should add a value in model state #2445.")]
+ [InlineData(typeof(string[]), "value1, value2, value3")]
[InlineData(typeof(string), "value")]
public async Task BindParameterFromHeader_WithData_WithPrefix_ModelGetsBound(Type modelType, string value)
{
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/KeyValuePairModelBinderIntegrationTest.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/KeyValuePairModelBinderIntegrationTest.cs
index 7374e4097d..230a1b34c8 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/KeyValuePairModelBinderIntegrationTest.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/KeyValuePairModelBinderIntegrationTest.cs
@@ -12,7 +12,7 @@ namespace Microsoft.AspNet.Mvc.IntegrationTests
// Integration tests targeting the behavior of the KeyValuePairModelBinder with other model binders.
public class KeyValuePairModelBinderIntegrationTest
{
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task KeyValuePairModelBinder_BindsKeyValuePairOfSimpleType_WithPrefix_Success()
{
// Arrange
@@ -40,7 +40,7 @@ public async Task KeyValuePairModelBinder_BindsKeyValuePairOfSimpleType_WithPref
var model = Assert.IsType>(modelBindingResult.Model);
Assert.Equal(new KeyValuePair("key0", 10), model);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -53,7 +53,7 @@ public async Task KeyValuePairModelBinder_BindsKeyValuePairOfSimpleType_WithPref
Assert.Equal("10", entry.Value.RawValue);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task KeyValuePairModelBinder_BindsKeyValuePairOfSimpleType_WithExplicitPrefix_Success()
{
// Arrange
@@ -85,7 +85,7 @@ public async Task KeyValuePairModelBinder_BindsKeyValuePairOfSimpleType_WithExpl
var model = Assert.IsType>(modelBindingResult.Model);
Assert.Equal(new KeyValuePair("key0", 10), model);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -98,7 +98,7 @@ public async Task KeyValuePairModelBinder_BindsKeyValuePairOfSimpleType_WithExpl
Assert.Equal("10", entry.Value.RawValue);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task KeyValuePairModelBinder_BindsKeyValuePairOfSimpleType_EmptyPrefix_Success()
{
// Arrange
@@ -126,7 +126,7 @@ public async Task KeyValuePairModelBinder_BindsKeyValuePairOfSimpleType_EmptyPre
var model = Assert.IsType>(modelBindingResult.Model);
Assert.Equal(new KeyValuePair("key0", 10), model);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -176,7 +176,7 @@ private class Person
public int Id { get; set; }
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task KeyValuePairModelBinder_BindsKeyValuePairOfComplexType_WithPrefix_Success()
{
// Arrange
@@ -205,7 +205,7 @@ public async Task KeyValuePairModelBinder_BindsKeyValuePairOfComplexType_WithPre
Assert.Equal("key0", model.Key);
Assert.Equal(10, model.Value.Id);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -215,10 +215,10 @@ public async Task KeyValuePairModelBinder_BindsKeyValuePairOfComplexType_WithPre
entry = Assert.Single(modelState, kvp => kvp.Key == "parameter.Value.Id").Value;
Assert.Equal("10", entry.Value.AttemptedValue);
- Assert.Same(model.Value, entry.Value.RawValue);
+ Assert.Equal(model.Value.Id.ToString(), entry.Value.RawValue);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task KeyValuePairModelBinder_BindsKeyValuePairOfComplexType_WithExplicitPrefix_Success()
{
// Arrange
@@ -251,7 +251,7 @@ public async Task KeyValuePairModelBinder_BindsKeyValuePairOfComplexType_WithExp
Assert.Equal("key0", model.Key);
Assert.Equal(10, model.Value.Id);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -264,7 +264,7 @@ public async Task KeyValuePairModelBinder_BindsKeyValuePairOfComplexType_WithExp
Assert.Equal("10", entry.Value.RawValue);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task KeyValuePairModelBinder_BindsKeyValuePairOfComplexType_EmptyPrefix_Success()
{
// Arrange
@@ -293,7 +293,7 @@ public async Task KeyValuePairModelBinder_BindsKeyValuePairOfComplexType_EmptyPr
Assert.Equal("key0", model.Key);
Assert.Equal(10, model.Value.Id);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/MutableObjectModelBinderIntegrationTest.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/MutableObjectModelBinderIntegrationTest.cs
index 45d4a03bb8..c8f3d1407d 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/MutableObjectModelBinderIntegrationTest.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/MutableObjectModelBinderIntegrationTest.cs
@@ -44,7 +44,7 @@ private class Address1
public string Street { get; set; }
}
- [Fact(Skip = "Extra entries in model state #2446, ModelState.Value not set due to #2445.")]
+ [Fact(Skip = "ModelState.Value not set due to #2445.")]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithBodyModelBinder_WithPrefix_Success()
{
// Arrange
@@ -77,7 +77,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithBodyModelBinder_W
Assert.NotNull(model.Customer.Address);
Assert.Equal(AddressStreetContent, model.Customer.Address.Street);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -91,7 +91,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithBodyModelBinder_W
Assert.Same(model.Customer.Address, entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446, ModelState.Value not set due to #2445.")]
+ [Fact(Skip = "ModelState.Value not set due to #2445.")]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithBodyModelBinder_WithEmptyPrefix_Success()
{
// Arrange
@@ -124,7 +124,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithBodyModelBinder_W
Assert.NotNull(model.Customer.Address);
Assert.Equal(AddressStreetContent, model.Customer.Address.Street);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -138,7 +138,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithBodyModelBinder_W
Assert.Same(model.Customer.Address, entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithBodyModelBinder_WithPrefix_NoBodyData()
{
// Arrange
@@ -153,6 +153,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithBodyModelBinder_W
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
{
request.QueryString = new QueryString("?parameter.Customer.Name=bill");
+ request.ContentType = "application/json";
});
var modelState = new ModelStateDictionary();
@@ -169,7 +170,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithBodyModelBinder_W
Assert.Equal("bill", model.Customer.Name);
Assert.Null(model.Customer.Address);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -180,7 +181,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithBodyModelBinder_W
// We don't provide enough data in this test for the 'Person' model to be created. So even though there is
// body data in the request, it won't be used.
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithBodyModelBinder_WithPrefix_PartialData()
{
// Arrange
@@ -211,7 +212,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithBodyModelBinder_W
Assert.Null(model.Customer);
Assert.Equal(10, model.ProductId);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -222,7 +223,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithBodyModelBinder_W
// We don't provide enough data in this test for the 'Person' model to be created. So even though there is
// body data in the request, it won't be used.
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithBodyModelBinder_WithPrefix_NoData()
{
// Arrange
@@ -252,7 +253,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithBodyModelBinder_W
var model = Assert.IsType(modelBindingResult.Model);
Assert.Null(model.Customer);
- Assert.Equal(0, modelState.Count); // This fails due to #2446
+ Assert.Equal(0, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
}
@@ -272,7 +273,7 @@ private class Person2
public IScopedInstance BindingContext { get; set; }
}
- [Fact(Skip = "Extra entries in model state #2446, #2646.")]
+ [Fact(Skip = "FromServices should not have an entry in model state #2464.")]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithServicesModelBinder_WithPrefix_Success()
{
// Arrange
@@ -303,7 +304,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithServicesModelBind
Assert.Equal("bill", model.Customer.Name);
Assert.NotNull(model.Customer.BindingContext);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -312,7 +313,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithServicesModelBind
Assert.Equal("bill", entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446, #2646.")]
+ [Fact(Skip = "FromServices should not have an entry in model state #2464.")]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithServicesModelBinder_WithEmptyPrefix_Success()
{
// Arrange
@@ -343,7 +344,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithServicesModelBind
Assert.Equal("bill", model.Customer.Name);
Assert.NotNull(model.Customer.BindingContext);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -354,7 +355,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithServicesModelBind
// We don't provide enough data in this test for the 'Person' model to be created. So even though there is
// a [FromServices], it won't be used.
- [Fact(Skip = "Extra entries in model state #2446, #2646.")]
+ [Fact(Skip = "FromServices should not have an entry in model state #2464.")]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithServicesModelBinder_WithPrefix_PartialData()
{
// Arrange
@@ -385,7 +386,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithServicesModelBind
Assert.Null(model.Customer);
Assert.Equal(10, model.ProductId);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -396,7 +397,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithServicesModelBind
// We don't provide enough data in this test for the 'Person' model to be created. So even though there is
// a [FromServices], it won't be used.
- [Fact(Skip = "Extra entries in model state #2446, #2646.")]
+ [Fact(Skip = "Extra entries in model state #2646.")]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithServicesModelBinder_WithPrefix_NoData()
{
// Arrange
@@ -426,7 +427,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithServicesModelBind
var model = Assert.IsType(modelBindingResult.Model);
Assert.Null(model.Customer);
- Assert.Equal(0, modelState.Count); // This fails due to #2446, #2464
+ Assert.Equal(0, modelState.Count); // Fails due to #2464
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
}
@@ -445,7 +446,7 @@ private class Person3
public byte[] Token { get; set; }
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact(Skip = "Greedy model binders should set value. #2445")]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithByteArrayModelBinder_WithPrefix_Success()
{
// Arrange
@@ -477,7 +478,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithByteArrayModelBin
Assert.Equal("bill", model.Customer.Name);
Assert.Equal(ByteArrayContent, model.Customer.Token);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count); // This fails due to #2445
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -491,7 +492,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithByteArrayModelBin
Assert.Equal(ByteArrayEncoded, entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact(Skip = "Greedy model binders should set value. #2445")]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithByteArrayModelBinder_WithEmptyPrefix_Success()
{
// Arrange
@@ -522,7 +523,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithByteArrayModelBin
Assert.Equal("bill", model.Customer.Name);
Assert.Equal(ByteArrayContent, model.Customer.Token);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -535,7 +536,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithByteArrayModelBin
Assert.Equal(ByteArrayEncoded, entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithByteArrayModelBinder_WithPrefix_NoData()
{
// Arrange
@@ -550,6 +551,10 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithByteArrayModelBin
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
{
request.QueryString = new QueryString("?parameter.Customer.Name=bill");
+
+ // This is set so that the input formatter does not add an error to model state.
+ // Thus this prevents addition of an extra error unrelated to the test scenario.
+ request.ContentType = "application/json";
});
var modelState = new ModelStateDictionary();
@@ -566,7 +571,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithByteArrayModelBin
Assert.Equal("bill", model.Customer.Name);
Assert.Null(model.Customer.Address);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -589,7 +594,7 @@ private class Person4
public IEnumerable Documents { get; set; }
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact(Skip = "Greedy model binders should set value. #2445")]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithFormFileModelBinder_WithPrefix_Success()
{
// Arrange
@@ -621,7 +626,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithFormFileModelBind
Assert.Equal("bill", model.Customer.Name);
Assert.Single(model.Customer.Documents);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count); // This fails due to #2445
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -634,7 +639,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithFormFileModelBind
Assert.Same(model.Customer.Documents, entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact(Skip = "Greedy model binders should set value. #2445")]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithFormFileModelBinder_WithEmptyPrefix_Success()
{
// Arrange
@@ -666,7 +671,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithFormFileModelBind
Assert.Equal("bill", model.Customer.Name);
Assert.Single(model.Customer.Documents);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -679,7 +684,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithFormFileModelBind
Assert.Same(model.Customer.Documents, entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithFormFileModelBinder_WithPrefix_NoBodyData()
{
// Arrange
@@ -710,9 +715,9 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithFormFileModelBind
var model = Assert.IsType(modelBindingResult.Model);
Assert.NotNull(model.Customer);
Assert.Equal("bill", model.Customer.Name);
- Assert.Null(model.Customer.Documents);
+ Assert.Empty(model.Customer.Documents);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -723,7 +728,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithFormFileModelBind
// We don't provide enough data in this test for the 'Person' model to be created. So even though there are
// form files in the request, it won't be used.
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithFormFileModelBinder_WithPrefix_PartialData()
{
// Arrange
@@ -754,7 +759,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithFormFileModelBind
Assert.Null(model.Customer);
Assert.Equal(10, model.ProductId);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -765,7 +770,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithFormFileModelBind
// We don't provide enough data in this test for the 'Person' model to be created. So even though there is
// body data in the request, it won't be used.
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithFormFileModelBinder_WithPrefix_NoData()
{
// Arrange
@@ -795,7 +800,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithFormFileModelBind
var model = Assert.IsType(modelBindingResult.Model);
Assert.Null(model.Customer);
- Assert.Equal(0, modelState.Count); // This fails due to #2446
+ Assert.Equal(0, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
}
@@ -807,7 +812,7 @@ private class Order5
public int[] ProductIds { get; set; }
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsArrayProperty_WithPrefix_Success()
{
// Arrange
@@ -838,7 +843,7 @@ public async Task MutableObjectModelBinder_BindsArrayProperty_WithPrefix_Success
Assert.Equal("bill", model.Name);
Assert.Equal(new int[] { 10, 11 }, model.ProductIds);
- Assert.Equal(3, modelState.Count); // This fails due to #2446
+ Assert.Equal(3, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -855,7 +860,7 @@ public async Task MutableObjectModelBinder_BindsArrayProperty_WithPrefix_Success
Assert.Equal("11", entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsArrayProperty_EmptyPrefix_Success()
{
// Arrange
@@ -886,7 +891,7 @@ public async Task MutableObjectModelBinder_BindsArrayProperty_EmptyPrefix_Succes
Assert.Equal("bill", model.Name);
Assert.Equal(new int[] { 10, 11 }, model.ProductIds);
- Assert.Equal(3, modelState.Count); // This fails due to #2446
+ Assert.Equal(3, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -903,7 +908,7 @@ public async Task MutableObjectModelBinder_BindsArrayProperty_EmptyPrefix_Succes
Assert.Equal("11", entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsArrayProperty_NoCollectionData()
{
// Arrange
@@ -933,7 +938,7 @@ public async Task MutableObjectModelBinder_BindsArrayProperty_NoCollectionData()
Assert.Equal("bill", model.Name);
Assert.Null(model.ProductIds);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -942,7 +947,7 @@ public async Task MutableObjectModelBinder_BindsArrayProperty_NoCollectionData()
Assert.Equal("bill", entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsArrayProperty_NoData()
{
// Arrange
@@ -972,7 +977,7 @@ public async Task MutableObjectModelBinder_BindsArrayProperty_NoData()
Assert.Null(model.Name);
Assert.Null(model.ProductIds);
- Assert.Equal(0, modelState.Count); // This fails due to #2446
+ Assert.Equal(0, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
}
@@ -984,7 +989,7 @@ private class Order6
public List ProductIds { get; set; }
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsListProperty_WithPrefix_Success()
{
// Arrange
@@ -1015,7 +1020,7 @@ public async Task MutableObjectModelBinder_BindsListProperty_WithPrefix_Success(
Assert.Equal("bill", model.Name);
Assert.Equal(new List() { 10, 11 }, model.ProductIds);
- Assert.Equal(3, modelState.Count); // This fails due to #2446
+ Assert.Equal(3, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -1032,7 +1037,7 @@ public async Task MutableObjectModelBinder_BindsListProperty_WithPrefix_Success(
Assert.Equal("11", entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsListProperty_EmptyPrefix_Success()
{
// Arrange
@@ -1063,7 +1068,7 @@ public async Task MutableObjectModelBinder_BindsListProperty_EmptyPrefix_Success
Assert.Equal("bill", model.Name);
Assert.Equal(new List() { 10, 11 }, model.ProductIds);
- Assert.Equal(3, modelState.Count); // This fails due to #2446
+ Assert.Equal(3, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -1080,7 +1085,7 @@ public async Task MutableObjectModelBinder_BindsListProperty_EmptyPrefix_Success
Assert.Equal("11", entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsListProperty_NoCollectionData()
{
// Arrange
@@ -1110,7 +1115,7 @@ public async Task MutableObjectModelBinder_BindsListProperty_NoCollectionData()
Assert.Equal("bill", model.Name);
Assert.Null(model.ProductIds);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -1119,7 +1124,7 @@ public async Task MutableObjectModelBinder_BindsListProperty_NoCollectionData()
Assert.Equal("bill", entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsListProperty_NoData()
{
// Arrange
@@ -1149,7 +1154,7 @@ public async Task MutableObjectModelBinder_BindsListProperty_NoData()
Assert.Null(model.Name);
Assert.Null(model.ProductIds);
- Assert.Equal(0, modelState.Count); // This fails due to #2446
+ Assert.Equal(0, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
}
@@ -1161,7 +1166,7 @@ private class Order7
public Dictionary ProductIds { get; set; }
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsDictionaryProperty_WithPrefix_Success()
{
// Arrange
@@ -1192,7 +1197,7 @@ public async Task MutableObjectModelBinder_BindsDictionaryProperty_WithPrefix_Su
Assert.Equal("bill", model.Name);
Assert.Equal(new Dictionary() { { "key0", 10 } }, model.ProductIds);
- Assert.Equal(3, modelState.Count); // This fails due to #2446
+ Assert.Equal(3, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -1209,7 +1214,7 @@ public async Task MutableObjectModelBinder_BindsDictionaryProperty_WithPrefix_Su
Assert.Equal("10", entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsDictionaryProperty_EmptyPrefix_Success()
{
// Arrange
@@ -1240,7 +1245,7 @@ public async Task MutableObjectModelBinder_BindsDictionaryProperty_EmptyPrefix_S
Assert.Equal("bill", model.Name);
Assert.Equal(new Dictionary() { { "key0", 10 } }, model.ProductIds);
- Assert.Equal(3, modelState.Count); // This fails due to #2446
+ Assert.Equal(3, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -1257,7 +1262,7 @@ public async Task MutableObjectModelBinder_BindsDictionaryProperty_EmptyPrefix_S
Assert.Equal("10", entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsDictionaryProperty_NoCollectionData()
{
// Arrange
@@ -1287,7 +1292,7 @@ public async Task MutableObjectModelBinder_BindsDictionaryProperty_NoCollectionD
Assert.Equal("bill", model.Name);
Assert.Null(model.ProductIds);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -1296,7 +1301,7 @@ public async Task MutableObjectModelBinder_BindsDictionaryProperty_NoCollectionD
Assert.Equal("bill", entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsDictionaryProperty_NoData()
{
// Arrange
@@ -1326,7 +1331,7 @@ public async Task MutableObjectModelBinder_BindsDictionaryProperty_NoData()
Assert.Null(model.Name);
Assert.Null(model.ProductIds);
- Assert.Equal(0, modelState.Count); // This fails due to #2446
+ Assert.Equal(0, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
}
@@ -1338,7 +1343,7 @@ private class Order8
public KeyValuePair ProductId { get; set; }
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsKeyValuePairProperty_WithPrefix_Success()
{
// Arrange
@@ -1369,7 +1374,7 @@ public async Task MutableObjectModelBinder_BindsKeyValuePairProperty_WithPrefix_
Assert.Equal("bill", model.Name);
Assert.Equal(new KeyValuePair("key0", 10), model.ProductId);
- Assert.Equal(3, modelState.Count); // This fails due to #2446
+ Assert.Equal(3, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -1386,7 +1391,7 @@ public async Task MutableObjectModelBinder_BindsKeyValuePairProperty_WithPrefix_
Assert.Equal("10", entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsKeyValuePairProperty_EmptyPrefix_Success()
{
// Arrange
@@ -1417,7 +1422,7 @@ public async Task MutableObjectModelBinder_BindsKeyValuePairProperty_EmptyPrefix
Assert.Equal("bill", model.Name);
Assert.Equal(new KeyValuePair("key0", 10), model.ProductId);
- Assert.Equal(3, modelState.Count); // This fails due to #2446
+ Assert.Equal(3, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -1434,7 +1439,7 @@ public async Task MutableObjectModelBinder_BindsKeyValuePairProperty_EmptyPrefix
Assert.Equal("10", entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsKeyValuePairProperty_NoCollectionData()
{
// Arrange
@@ -1464,7 +1469,7 @@ public async Task MutableObjectModelBinder_BindsKeyValuePairProperty_NoCollectio
Assert.Equal("bill", model.Name);
Assert.Equal(default(KeyValuePair), model.ProductId);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -1473,7 +1478,7 @@ public async Task MutableObjectModelBinder_BindsKeyValuePairProperty_NoCollectio
Assert.Equal("bill", entry.Value.RawValue);
}
- [Fact(Skip = "Extra entries in model state #2446.")]
+ [Fact]
public async Task MutableObjectModelBinder_BindsKeyValuePairProperty_NoData()
{
// Arrange
@@ -1503,7 +1508,7 @@ public async Task MutableObjectModelBinder_BindsKeyValuePairProperty_NoData()
Assert.Null(model.Name);
Assert.Equal(default(KeyValuePair), model.ProductId);
- Assert.Equal(0, modelState.Count); // This fails due to #2446
+ Assert.Equal(0, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
}
@@ -1524,7 +1529,7 @@ private class Person9
// If a nested POCO object has all properties bound from a greedy source, then it should be populated
// if the top-level object is created.
- [Fact(Skip = "Extra entries in model state #2446, ModelState.Value not set due to #2445.")]
+ [Fact(Skip = "ModelState.Value not set due to #2445.")]
public async Task MutableObjectModelBinder_BindsNestedPOCO_WithAllGreedyBoundProperties()
{
// Arrange
@@ -1557,7 +1562,7 @@ public async Task MutableObjectModelBinder_BindsNestedPOCO_WithAllGreedyBoundPro
Assert.NotNull(model.Customer.Address);
Assert.Equal(AddressStreetContent, model.Customer.Address.Street);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -1605,7 +1610,7 @@ public async Task MutableObjectModelBinder_WithRequiredComplexProperty_NoData_Ge
var model = Assert.IsType(modelBindingResult.Model);
Assert.Null(model.Customer);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(1, modelState.ErrorCount);
Assert.False(modelState.IsValid);
@@ -1659,7 +1664,7 @@ public async Task MutableObjectModelBinder_WithNestedRequiredProperty_WithPartia
Assert.Equal(123, model.Customer.Id);
Assert.Null(model.Customer.Name);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(1, modelState.ErrorCount);
Assert.False(modelState.IsValid);
@@ -1705,7 +1710,7 @@ public async Task MutableObjectModelBinder_WithNestedRequiredProperty_WithData_E
Assert.Equal(123, model.Customer.Id);
Assert.Null(model.Customer.Name);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(1, modelState.ErrorCount);
Assert.False(modelState.IsValid);
@@ -1755,7 +1760,7 @@ public async Task MutableObjectModelBinder_WithNestedRequiredProperty_WithData_C
Assert.Equal(123, model.Customer.Id);
Assert.Null(model.Customer.Name);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(1, modelState.ErrorCount);
Assert.False(modelState.IsValid);
@@ -1805,7 +1810,7 @@ public async Task MutableObjectModelBinder_WithRequiredProperty_NoData_GetsError
var model = Assert.IsType(modelBindingResult.Model);
Assert.Null(model.ProductName);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(1, modelState.ErrorCount);
Assert.False(modelState.IsValid);
@@ -1858,7 +1863,7 @@ public async Task MutableObjectModelBinder_WithRequiredProperty_NoData_CustomPre
Assert.Equal("The ProductName field is required.", error.ErrorMessage);
}
- [Fact(Skip = "Extra model state entry due to #2446")]
+ [Fact]
public async Task MutableObjectModelBinder_WithRequiredProperty_WithData_EmptyPrefix_GetsBound()
{
// Arrange
@@ -1887,7 +1892,7 @@ public async Task MutableObjectModelBinder_WithRequiredProperty_WithData_EmptyPr
var model = Assert.IsType(modelBindingResult.Model);
Assert.Equal("abc", model.ProductName);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -1985,7 +1990,7 @@ public async Task MutableObjectModelBinder_WithRequiredCollectionProperty_NoData
Assert.Equal("The OrderIds field is required.", error.ErrorMessage);
}
- [Fact(Skip = "Extra model state entry due to #2446")]
+ [Fact]
public async Task MutableObjectModelBinder_WithRequiredCollectionProperty_WithData_EmptyPrefix_GetsBound()
{
// Arrange
@@ -2014,7 +2019,7 @@ public async Task MutableObjectModelBinder_WithRequiredCollectionProperty_WithDa
var model = Assert.IsType(modelBindingResult.Model);
Assert.Equal(new[] { 123 }, model.OrderIds.ToArray());
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/ServicesModelBinderIntegrationTest.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/ServicesModelBinderIntegrationTest.cs
index 49bff59748..e37516da6b 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/ServicesModelBinderIntegrationTest.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/ServicesModelBinderIntegrationTest.cs
@@ -61,17 +61,14 @@ public async Task BindPropertyFromService_WithData_WithPrefix_GetsBound()
// ModelState
Assert.True(modelState.IsValid);
- Assert.Equal(3, modelState.Keys.Count);
- Assert.Single(modelState.Keys, k => k == "CustomParameter");
- Assert.Single(modelState.Keys, k => k == "CustomParameter.Address");
-
+ Assert.Equal(1, modelState.Keys.Count);
var key = Assert.Single(modelState.Keys, k => k == "CustomParameter.Address.OutputFormatter");
Assert.Equal(ModelValidationState.Skipped, modelState[key].ValidationState);
Assert.Null(modelState[key].Value);
Assert.Empty(modelState[key].Errors);
}
- [Fact(Skip = "ModelState should not have empty key #2466.")]
+ [Fact(Skip = "Should be no entry for model bound using services. #2464")]
public async Task BindPropertyFromService_WithData_WithEmptyPrefix_GetsBound()
{
// Arrange
@@ -102,10 +99,8 @@ public async Task BindPropertyFromService_WithData_WithEmptyPrefix_GetsBound()
// ModelState
Assert.True(modelState.IsValid);
- Assert.Equal(2, modelState.Keys.Count);
- Assert.Single(modelState.Keys, k => k == "Address");
- var key = Assert.Single(modelState.Keys, k => k == "Address.OutputFormatter");
- Assert.Equal(ModelValidationState.Skipped, modelState[key].ValidationState);
+ Assert.Equal(1, modelState.Keys.Count);
+ var key = Assert.Single(modelState.Keys, k => k == "Address");
Assert.Null(modelState[key].Value); // For non user bound models there should be no value.
Assert.Empty(modelState[key].Errors);
}
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/TryUpdateModelIntegrationTest.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/TryUpdateModelIntegrationTest.cs
index cc67c50c8d..fba32dfbed 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/TryUpdateModelIntegrationTest.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/TryUpdateModelIntegrationTest.cs
@@ -18,7 +18,7 @@ private class Address
public string Street { get; set; }
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task TryUpdateModel_ExistingModel_EmptyPrefix_GetsOverWritten()
{
// Arrange
@@ -53,7 +53,7 @@ public async Task TryUpdateModel_ExistingModel_EmptyPrefix_GetsOverWritten()
Assert.Equal(ModelValidationState.Valid, modelState[key].ValidationState);
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task TryUpdateModel_ExistingModel_EmptyPrefix_GetsBound()
{
// Arrange
@@ -90,7 +90,7 @@ private class Person2
public List Address { get; set; }
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task TryUpdateModel_SettableCollectionModel_EmptyPrefix_GetsBound()
{
// Arrange
@@ -134,7 +134,7 @@ public Person3()
public List Address { get; }
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task TryUpdateModel_NonSettableCollectionModel_EmptyPrefix_GetsBound()
{
// Arrange
@@ -173,7 +173,7 @@ private class Person6
public CustomReadOnlyCollection Address { get; set; }
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task TryUpdateModel_ReadOnlyCollectionModel_EmptyPrefix_DoesNotGetBound()
{
// Arrange
@@ -206,7 +206,7 @@ private class Person4
public Address[] Address { get; set; }
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task TryUpdateModel_SettableArrayModel_EmptyPrefix_GetsBound()
{
// Arrange
@@ -245,7 +245,7 @@ private class Person5
public Address[] Address { get; } = new Address[] { };
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task TryUpdateModel_NonSettableArrayModel_EmptyPrefix_GetsBound()
{
// Arrange
@@ -274,7 +274,7 @@ public async Task TryUpdateModel_NonSettableArrayModel_EmptyPrefix_GetsBound()
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task TryUpdateModel_ExistingModel_WithPrefix_GetsOverWritten()
{
// Arrange
@@ -309,7 +309,7 @@ public async Task TryUpdateModel_ExistingModel_WithPrefix_GetsOverWritten()
Assert.Equal(ModelValidationState.Valid, modelState[key].ValidationState);
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task TryUpdateModel_ExistingModel_WithPrefix_GetsBound()
{
// Arrange
@@ -341,7 +341,7 @@ public async Task TryUpdateModel_ExistingModel_WithPrefix_GetsBound()
Assert.Equal(ModelValidationState.Valid, modelState[key].ValidationState);
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task TryUpdateModel_SettableCollectionModel_WithPrefix_GetsBound()
{
// Arrange
@@ -353,7 +353,7 @@ public async Task TryUpdateModel_SettableCollectionModel_WithPrefix_GetsBound()
var modelState = new ModelStateDictionary();
var model = new Person2();
// Act
- var result = await TryUpdateModel(model, string.Empty, operationContext, modelState);
+ var result = await TryUpdateModel(model, "prefix", operationContext, modelState);
// Assert
Assert.True(result);
@@ -375,7 +375,7 @@ public async Task TryUpdateModel_SettableCollectionModel_WithPrefix_GetsBound()
Assert.Equal(ModelValidationState.Valid, modelState[key].ValidationState);
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task TryUpdateModel_NonSettableCollectionModel_WithPrefix_GetsBound()
{
// Arrange
@@ -409,7 +409,7 @@ public async Task TryUpdateModel_NonSettableCollectionModel_WithPrefix_GetsBound
Assert.Equal(ModelValidationState.Valid, modelState[key].ValidationState);
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task TryUpdateModel_ReadOnlyCollectionModel_WithPrefix_DoesNotGetBound()
{
// Arrange
@@ -437,7 +437,7 @@ public async Task TryUpdateModel_ReadOnlyCollectionModel_WithPrefix_DoesNotGetBo
Assert.Empty(modelState.Keys);
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task TryUpdateModel_SettableArrayModel_WithPrefix_GetsBound()
{
// Arrange
@@ -463,7 +463,7 @@ public async Task TryUpdateModel_SettableArrayModel_WithPrefix_GetsBound()
Assert.True(modelState.IsValid);
Assert.Equal(1, modelState.Keys.Count);
- var key = Assert.Single(modelState.Keys, k => k == "Address[0].Street");
+ var key = Assert.Single(modelState.Keys, k => k == "prefix.Address[0].Street");
Assert.NotNull(modelState[key].Value);
Assert.Equal("SomeStreet", modelState[key].Value.AttemptedValue);
Assert.Equal("SomeStreet", modelState[key].Value.RawValue);
@@ -471,7 +471,7 @@ public async Task TryUpdateModel_SettableArrayModel_WithPrefix_GetsBound()
Assert.Equal(ModelValidationState.Valid, modelState[key].ValidationState);
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task TryUpdateModel_NonSettableArrayModel_WithPrefix_DoesNotGetBound()
{
// Arrange
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/TypeConverterModelBinderIntegrationTest.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/TypeConverterModelBinderIntegrationTest.cs
index 8ba18736c7..74ef9990c3 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/TypeConverterModelBinderIntegrationTest.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/TypeConverterModelBinderIntegrationTest.cs
@@ -20,7 +20,7 @@ private class Address
public int Zip { get; set; }
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task BindProperty_WithData_WithPrefix_GetsBound()
{
// Arrange
@@ -62,16 +62,16 @@ public async Task BindProperty_WithData_WithPrefix_GetsBound()
Assert.True(modelState.IsValid);
Assert.Equal(1, modelState.Keys.Count);
- var key = Assert.Single(modelState.Keys, k => k == "CustomParameter.Address.Street");
+ var key = Assert.Single(modelState.Keys, k => k == "CustomParameter.Address.Zip");
Assert.NotNull(modelState[key].Value);
Assert.Equal("1", modelState[key].Value.AttemptedValue);
- Assert.Equal(1, modelState[key].Value.RawValue);
+ Assert.Equal("1", modelState[key].Value.RawValue);
Assert.NotNull(modelState[key].Value);
Assert.Empty(modelState[key].Errors);
Assert.Equal(ModelValidationState.Valid, modelState[key].ValidationState);
}
- [Fact(Skip = "Extra entries in model state dictionary. #2466")]
+ [Fact]
public async Task BindProperty_WithData_WithEmptyPrefix_GetsBound()
{
// Arrange
@@ -112,7 +112,7 @@ public async Task BindProperty_WithData_WithEmptyPrefix_GetsBound()
var key = Assert.Single(modelState.Keys, k => k == "Address.Zip");
Assert.NotNull(modelState[key].Value);
Assert.Equal("1", modelState[key].Value.AttemptedValue);
- Assert.Equal(1, modelState[key].Value.RawValue);
+ Assert.Equal("1", modelState[key].Value.RawValue);
Assert.NotNull(modelState[key].Value);
Assert.Empty(modelState[key].Errors);
Assert.Equal(ModelValidationState.Valid, modelState[key].ValidationState);
diff --git a/test/Microsoft.AspNet.Mvc.IntegrationTests/ValidationIntegrationTests.cs b/test/Microsoft.AspNet.Mvc.IntegrationTests/ValidationIntegrationTests.cs
index 5dd3337483..b84112dcef 100644
--- a/test/Microsoft.AspNet.Mvc.IntegrationTests/ValidationIntegrationTests.cs
+++ b/test/Microsoft.AspNet.Mvc.IntegrationTests/ValidationIntegrationTests.cs
@@ -19,7 +19,7 @@ private class Order1
public string CustomerName { get; set; }
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_RequiredAttribute_OnSimpleTypeProperty_WithData()
{
// Arrange
@@ -47,7 +47,7 @@ public async Task Validation_RequiredAttribute_OnSimpleTypeProperty_WithData()
var model = Assert.IsType(modelBindingResult.Model);
Assert.Equal("bill", model.CustomerName);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -57,7 +57,7 @@ public async Task Validation_RequiredAttribute_OnSimpleTypeProperty_WithData()
Assert.Empty(entry.Errors);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_RequiredAttribute_OnSimpleTypeProperty_NoData()
{
// Arrange
@@ -85,7 +85,7 @@ public async Task Validation_RequiredAttribute_OnSimpleTypeProperty_NoData()
var model = Assert.IsType(modelBindingResult.Model);
Assert.Null(model.CustomerName);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(1, modelState.ErrorCount);
Assert.False(modelState.IsValid);
@@ -108,7 +108,7 @@ private class Person2
public string Name { get; set; }
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_RequiredAttribute_OnPOCOProperty_WithData()
{
// Arrange
@@ -137,7 +137,7 @@ public async Task Validation_RequiredAttribute_OnPOCOProperty_WithData()
Assert.NotNull(model.Customer);
Assert.Equal("bill", model.Customer.Name);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -200,7 +200,7 @@ private class Person3
public string Name { get; set; }
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_RequiredAttribute_OnNestedSimpleTypeProperty_WithData()
{
// Arrange
@@ -229,7 +229,7 @@ public async Task Validation_RequiredAttribute_OnNestedSimpleTypeProperty_WithDa
Assert.NotNull(model.Customer);
Assert.Equal("bill", model.Customer.Name);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -239,7 +239,7 @@ public async Task Validation_RequiredAttribute_OnNestedSimpleTypeProperty_WithDa
Assert.Empty(entry.Errors);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_RequiredAttribute_OnNestedSimpleTypeProperty_NoDataForRequiredProperty()
{
// Arrange
@@ -270,7 +270,7 @@ public async Task Validation_RequiredAttribute_OnNestedSimpleTypeProperty_NoData
Assert.Equal(17, model.Customer.Age);
Assert.Null(model.Customer.Name);
- Assert.Equal(2, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(1, modelState.ErrorCount);
Assert.False(modelState.IsValid);
@@ -293,7 +293,7 @@ private class Item4
public int ItemId { get; set; }
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_RequiredAttribute_OnCollectionProperty_WithData()
{
// Arrange
@@ -322,7 +322,7 @@ public async Task Validation_RequiredAttribute_OnCollectionProperty_WithData()
Assert.NotNull(model.Items);
Assert.Equal(17, Assert.Single(model.Items).ItemId);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -381,7 +381,7 @@ private class Order5
public string Name { get; set; }
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_RequiredAttribute_OnPOCOPropertyOfBoundElement_WithData()
{
// Arrange
@@ -409,7 +409,7 @@ public async Task Validation_RequiredAttribute_OnPOCOPropertyOfBoundElement_With
var model = Assert.IsType>(modelBindingResult.Model);
Assert.Equal(17, Assert.Single(model).ProductId);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -468,7 +468,7 @@ private class Order6
public string Name { get; set; }
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_StringLengthAttribute_OnPropertyOfPOCO_Valid()
{
// Arrange
@@ -496,7 +496,7 @@ public async Task Validation_StringLengthAttribute_OnPropertyOfPOCO_Valid()
var model = Assert.IsType(modelBindingResult.Model);
Assert.Equal("bill", model.Name);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -506,7 +506,7 @@ public async Task Validation_StringLengthAttribute_OnPropertyOfPOCO_Valid()
Assert.Empty(entry.Errors);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_StringLengthAttribute_OnPropertyOfPOCO_Invalid()
{
// Arrange
@@ -534,7 +534,7 @@ public async Task Validation_StringLengthAttribute_OnPropertyOfPOCO_Invalid()
var model = Assert.IsType(modelBindingResult.Model);
Assert.Equal("billybob", model.Name);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(1, modelState.ErrorCount);
Assert.False(modelState.IsValid);
@@ -558,7 +558,7 @@ private class Person7
public string Name { get; set; }
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_StringLengthAttribute_OnPropertyOfNestedPOCO_Valid()
{
// Arrange
@@ -586,7 +586,7 @@ public async Task Validation_StringLengthAttribute_OnPropertyOfNestedPOCO_Valid(
var model = Assert.IsType(modelBindingResult.Model);
Assert.Equal("bill", model.Customer.Name);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -596,7 +596,7 @@ public async Task Validation_StringLengthAttribute_OnPropertyOfNestedPOCO_Valid(
Assert.Empty(entry.Errors);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_StringLengthAttribute_OnPropertyOfNestedPOCO_Invalid()
{
// Arrange
@@ -624,7 +624,7 @@ public async Task Validation_StringLengthAttribute_OnPropertyOfNestedPOCO_Invali
var model = Assert.IsType(modelBindingResult.Model);
Assert.Equal("billybob", model.Customer.Name);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(1, modelState.ErrorCount);
Assert.False(modelState.IsValid);
@@ -637,7 +637,7 @@ public async Task Validation_StringLengthAttribute_OnPropertyOfNestedPOCO_Invali
Assert.Null(error.Exception);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_StringLengthAttribute_OnPropertyOfNestedPOCO_NoData()
{
// Arrange
@@ -665,7 +665,7 @@ public async Task Validation_StringLengthAttribute_OnPropertyOfNestedPOCO_NoData
var model = Assert.IsType(modelBindingResult.Model);
Assert.Null(model.Customer);
- Assert.Equal(0, modelState.Count); // This fails due to #2446
+ Assert.Equal(0, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
}
@@ -696,7 +696,7 @@ protected override ValidationResult IsValid(object value, ValidationContext vali
}
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_CustomAttribute_OnPOCOProperty_Valid()
{
// Arrange
@@ -724,7 +724,7 @@ public async Task Validation_CustomAttribute_OnPOCOProperty_Valid()
var model = Assert.IsType(modelBindingResult.Model);
Assert.Equal("bill", model.Customer.Name);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -734,7 +734,7 @@ public async Task Validation_CustomAttribute_OnPOCOProperty_Valid()
Assert.Empty(entry.Errors);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_CustomAttribute_OnPOCOProperty_Invalid()
{
// Arrange
@@ -762,7 +762,7 @@ public async Task Validation_CustomAttribute_OnPOCOProperty_Invalid()
var model = Assert.IsType(modelBindingResult.Model);
Assert.Equal("billybob", model.Customer.Name);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(1, modelState.ErrorCount);
Assert.False(modelState.IsValid);
@@ -804,7 +804,7 @@ protected override ValidationResult IsValid(object value, ValidationContext vali
}
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_CustomAttribute_OnCollectionElement_Valid()
{
// Arrange
@@ -832,7 +832,7 @@ public async Task Validation_CustomAttribute_OnCollectionElement_Valid()
var model = Assert.IsType(modelBindingResult.Model);
Assert.Equal("bill", Assert.Single(model.Products).Name);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -842,7 +842,7 @@ public async Task Validation_CustomAttribute_OnCollectionElement_Valid()
Assert.Empty(entry.Errors);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_CustomAttribute_OnCollectionElement_Invalid()
{
// Arrange
@@ -870,7 +870,7 @@ public async Task Validation_CustomAttribute_OnCollectionElement_Invalid()
var model = Assert.IsType(modelBindingResult.Model);
Assert.Equal("billybob", Assert.Single(model.Products).Name);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(2, modelState.Count);
Assert.Equal(1, modelState.ErrorCount);
Assert.False(modelState.IsValid);
@@ -893,7 +893,7 @@ private class Order10
public string Name { get; set; }
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_StringLengthAttribute_OnProperyOfCollectionElement_Valid()
{
// Arrange
@@ -921,7 +921,7 @@ public async Task Validation_StringLengthAttribute_OnProperyOfCollectionElement_
var model = Assert.IsType>(modelBindingResult.Model);
Assert.Equal("bill", Assert.Single(model).Name);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.True(modelState.IsValid);
@@ -931,7 +931,7 @@ public async Task Validation_StringLengthAttribute_OnProperyOfCollectionElement_
Assert.Empty(entry.Errors);
}
- [Fact(Skip = "Extra ModelState key because of #2446")]
+ [Fact]
public async Task Validation_StringLengthAttribute_OnProperyOfCollectionElement_Invalid()
{
// Arrange
@@ -959,7 +959,7 @@ public async Task Validation_StringLengthAttribute_OnProperyOfCollectionElement_
var model = Assert.IsType>(modelBindingResult.Model);
Assert.Equal("billybob", Assert.Single(model).Name);
- Assert.Equal(1, modelState.Count); // This fails due to #2446
+ Assert.Equal(1, modelState.Count);
Assert.Equal(1, modelState.ErrorCount);
Assert.False(modelState.IsValid);
@@ -972,7 +972,7 @@ public async Task Validation_StringLengthAttribute_OnProperyOfCollectionElement_
Assert.Null(error.Exception);
}
- [Fact(Skip = "Extra ModelState key because of #2446, Empty collection should be created by the collection model binder #1579")]
+ [Fact(Skip = "Empty collection should be created by the collection model binder #1579")]
public async Task Validation_StringLengthAttribute_OnProperyOfCollectionElement_NoData()
{
// Arrange
@@ -1000,7 +1000,7 @@ public async Task Validation_StringLengthAttribute_OnProperyOfCollectionElement_
var model = Assert.IsType>(modelBindingResult.Model);
Assert.Empty(model);
- //Assert.Equal(0, modelState.Count); // This fails due to #2446
+ Assert.Equal(0, modelState.Count);
Assert.Equal(0, modelState.ErrorCount);
Assert.False(modelState.IsValid);
}