PR comments commit
This commit is contained in:
parent
070be7b656
commit
02cc82a055
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
@ -313,9 +312,16 @@ namespace Microsoft.AspNet.Mvc
|
||||||
var modelValidationContext = new ModelValidationContext(modelBindingContext, modelExplorer);
|
var modelValidationContext = new ModelValidationContext(modelBindingContext, modelExplorer);
|
||||||
|
|
||||||
var validationNode = modelBindingResult.ValidationNode;
|
var validationNode = modelBindingResult.ValidationNode;
|
||||||
Debug.Assert(
|
if (validationNode == null)
|
||||||
validationNode != null,
|
{
|
||||||
"ValidationNode should never be null in a successful ModelBindingResult.");
|
validationNode = new ModelValidationNode(
|
||||||
|
modelBindingResult.Key,
|
||||||
|
modelMetadata,
|
||||||
|
modelBindingResult.Model)
|
||||||
|
{
|
||||||
|
ValidateAllProperties = true,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
objectModelValidator.Validate(modelValidationContext, validationNode);
|
objectModelValidator.Validate(modelValidationContext, validationNode);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ namespace Microsoft.AspNet.Mvc.Test
|
||||||
GetCompositeBinder(binder.Object),
|
GetCompositeBinder(binder.Object),
|
||||||
Mock.Of<IValueProvider>(),
|
Mock.Of<IValueProvider>(),
|
||||||
new List<IInputFormatter>(),
|
new List<IInputFormatter>(),
|
||||||
new DefaultObjectValidator(new IExcludeTypeValidationFilter[0], metadataProvider),
|
new Mock<IObjectModelValidator>(MockBehavior.Strict).Object,
|
||||||
Mock.Of<IModelValidatorProvider>());
|
Mock.Of<IModelValidatorProvider>());
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|
@ -164,7 +164,7 @@ namespace Microsoft.AspNet.Mvc.Test
|
||||||
GetCompositeBinder(binder.Object),
|
GetCompositeBinder(binder.Object),
|
||||||
Mock.Of<IValueProvider>(),
|
Mock.Of<IValueProvider>(),
|
||||||
new List<IInputFormatter>(),
|
new List<IInputFormatter>(),
|
||||||
Mock.Of<IObjectModelValidator>(),
|
new Mock<IObjectModelValidator>(MockBehavior.Strict).Object,
|
||||||
Mock.Of<IModelValidatorProvider>(),
|
Mock.Of<IModelValidatorProvider>(),
|
||||||
includePredicate);
|
includePredicate);
|
||||||
|
|
||||||
|
|
@ -245,17 +245,17 @@ namespace Microsoft.AspNet.Mvc.Test
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = await ModelBindingHelper.TryUpdateModelAsync(
|
var result = await ModelBindingHelper.TryUpdateModelAsync(
|
||||||
model,
|
model,
|
||||||
null,
|
null,
|
||||||
Mock.Of<HttpContext>(),
|
Mock.Of<HttpContext>(),
|
||||||
new ModelStateDictionary(),
|
new ModelStateDictionary(),
|
||||||
metadataProvider,
|
metadataProvider,
|
||||||
GetCompositeBinder(binder.Object),
|
GetCompositeBinder(binder.Object),
|
||||||
Mock.Of<IValueProvider>(),
|
Mock.Of<IValueProvider>(),
|
||||||
new List<IInputFormatter>(),
|
new List<IInputFormatter>(),
|
||||||
Mock.Of<IObjectModelValidator>(),
|
new Mock<IObjectModelValidator>(MockBehavior.Strict).Object,
|
||||||
Mock.Of<IModelValidatorProvider>(),
|
Mock.Of<IModelValidatorProvider>(),
|
||||||
m => m.IncludedProperty );
|
m => m.IncludedProperty );
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.False(result);
|
Assert.False(result);
|
||||||
|
|
@ -502,18 +502,18 @@ namespace Microsoft.AspNet.Mvc.Test
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = await ModelBindingHelper.TryUpdateModelAsync(
|
var result = await ModelBindingHelper.TryUpdateModelAsync(
|
||||||
model,
|
model,
|
||||||
model.GetType(),
|
model.GetType(),
|
||||||
prefix: null,
|
prefix: null,
|
||||||
httpContext: Mock.Of<HttpContext>(),
|
httpContext: Mock.Of<HttpContext>(),
|
||||||
modelState: new ModelStateDictionary(),
|
modelState: new ModelStateDictionary(),
|
||||||
metadataProvider: metadataProvider,
|
metadataProvider: metadataProvider,
|
||||||
modelBinder: GetCompositeBinder(binder.Object),
|
modelBinder: GetCompositeBinder(binder.Object),
|
||||||
valueProvider: Mock.Of<IValueProvider>(),
|
valueProvider: Mock.Of<IValueProvider>(),
|
||||||
inputFormatters: new List<IInputFormatter>(),
|
inputFormatters: new List<IInputFormatter>(),
|
||||||
objectModelValidator: Mock.Of<IObjectModelValidator>(),
|
objectModelValidator: new Mock<IObjectModelValidator>(MockBehavior.Strict).Object,
|
||||||
validatorProvider: Mock.Of<IModelValidatorProvider>(),
|
validatorProvider: Mock.Of<IModelValidatorProvider>(),
|
||||||
predicate: includePredicate);
|
predicate: includePredicate);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.False(result);
|
Assert.False(result);
|
||||||
|
|
@ -596,17 +596,17 @@ namespace Microsoft.AspNet.Mvc.Test
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = await ModelBindingHelper.TryUpdateModelAsync(
|
var result = await ModelBindingHelper.TryUpdateModelAsync(
|
||||||
model,
|
model,
|
||||||
modelType: model.GetType(),
|
modelType: model.GetType(),
|
||||||
prefix: null,
|
prefix: null,
|
||||||
httpContext: Mock.Of<HttpContext>(),
|
httpContext: Mock.Of<HttpContext>(),
|
||||||
modelState: new ModelStateDictionary(),
|
modelState: new ModelStateDictionary(),
|
||||||
metadataProvider: metadataProvider,
|
metadataProvider: metadataProvider,
|
||||||
modelBinder: GetCompositeBinder(binder.Object),
|
modelBinder: GetCompositeBinder(binder.Object),
|
||||||
valueProvider: Mock.Of<IValueProvider>(),
|
valueProvider: Mock.Of<IValueProvider>(),
|
||||||
inputFormatters: new List<IInputFormatter>(),
|
inputFormatters: new List<IInputFormatter>(),
|
||||||
objectModelValidator: Mock.Of<IObjectModelValidator>(),
|
objectModelValidator: new Mock<IObjectModelValidator>(MockBehavior.Strict).Object,
|
||||||
validatorProvider: Mock.Of<IModelValidatorProvider>());
|
validatorProvider: Mock.Of<IModelValidatorProvider>());
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.False(result);
|
Assert.False(result);
|
||||||
|
|
|
||||||
|
|
@ -138,7 +138,8 @@ namespace Microsoft.AspNet.Mvc.IntegrationTests
|
||||||
Assert.True(result);
|
Assert.True(result);
|
||||||
|
|
||||||
// Model
|
// Model
|
||||||
Assert.Collection(model,
|
Assert.Collection(
|
||||||
|
model,
|
||||||
element =>
|
element =>
|
||||||
{
|
{
|
||||||
Assert.Equal("One Name", element.Name);
|
Assert.Equal("One Name", element.Name);
|
||||||
|
|
@ -591,6 +592,64 @@ namespace Microsoft.AspNet.Mvc.IntegrationTests
|
||||||
Assert.Equal(ModelValidationState.Valid, state.ValidationState);
|
Assert.Equal(ModelValidationState.Valid, state.ValidationState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task TryUpdateModel_TopLevelCollection_WithPrefix_BindsAfterClearing()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
|
||||||
|
{
|
||||||
|
request.QueryString = QueryString.Create(new Dictionary<string, string>
|
||||||
|
{
|
||||||
|
{ "prefix[0].Name", "One Name" },
|
||||||
|
{ "prefix[1].Address.Street", "Two Street" },
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var modelState = new ModelStateDictionary();
|
||||||
|
var model = new List<Person1>
|
||||||
|
{
|
||||||
|
new Person1
|
||||||
|
{
|
||||||
|
Name = "One",
|
||||||
|
Address = new Address
|
||||||
|
{
|
||||||
|
Street = "DefaultStreet",
|
||||||
|
City = "Toronto",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
new Person1 { Name = "Two" },
|
||||||
|
new Person1 { Name = "Three" },
|
||||||
|
};
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var result = await TryUpdateModel(model, "prefix", operationContext, modelState);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.True(result);
|
||||||
|
|
||||||
|
// Model
|
||||||
|
Assert.Collection(
|
||||||
|
model,
|
||||||
|
element =>
|
||||||
|
{
|
||||||
|
Assert.Equal("One Name", element.Name);
|
||||||
|
Assert.Null(element.Address);
|
||||||
|
},
|
||||||
|
element =>
|
||||||
|
{
|
||||||
|
Assert.Null(element.Name);
|
||||||
|
Assert.NotNull(element.Address);
|
||||||
|
Assert.Equal("Two Street", element.Address.Street);
|
||||||
|
Assert.Null(element.Address.City);
|
||||||
|
});
|
||||||
|
|
||||||
|
// ModelState
|
||||||
|
Assert.True(modelState.IsValid);
|
||||||
|
Assert.Equal(2, modelState.Count);
|
||||||
|
Assert.NotNull(modelState["prefix[0].Name"]);
|
||||||
|
Assert.NotNull(modelState["prefix[1].Address.Street"]);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task TryUpdateModel_NestedPoco_WithPrefix_DoesNotTrounceUnboundValues()
|
public async Task TryUpdateModel_NestedPoco_WithPrefix_DoesNotTrounceUnboundValues()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue