174 lines
7.0 KiB
C#
174 lines
7.0 KiB
C#
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System.Collections.Generic;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.AspNet.Http;
|
|
using Microsoft.AspNet.Mvc.ModelBinding;
|
|
using Xunit;
|
|
|
|
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")]
|
|
public async Task KeyValuePairModelBinder_BindsKeyValuePairOfSimpleType_WithPrefix_Success()
|
|
{
|
|
// Arrange
|
|
var argumentBinder = ModelBindingTestHelper.GetArgumentBinder();
|
|
var parameter = new ParameterDescriptor()
|
|
{
|
|
Name = "parameter",
|
|
ParameterType = typeof(KeyValuePair<string, int>)
|
|
};
|
|
|
|
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
|
|
{
|
|
request.QueryString = new QueryString("?parameter.Key=key0¶meter.Value=10");
|
|
});
|
|
|
|
var modelState = new ModelStateDictionary();
|
|
|
|
// Act
|
|
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, modelState, operationContext);
|
|
|
|
// Assert
|
|
Assert.NotNull(modelBindingResult);
|
|
Assert.True(modelBindingResult.IsModelSet);
|
|
|
|
var model = Assert.IsType<KeyValuePair<string, int>>(modelBindingResult.Model);
|
|
Assert.Equal(new KeyValuePair<string, int>("key0", 10), model);
|
|
|
|
Assert.Equal(2, modelState.Count); // This fails due to #2446
|
|
Assert.Equal(0, modelState.ErrorCount);
|
|
Assert.True(modelState.IsValid);
|
|
|
|
var entry = Assert.Single(modelState, kvp => kvp.Key == "parameter.Key").Value;
|
|
Assert.Equal("key0", entry.Value.AttemptedValue);
|
|
Assert.Equal("key0", entry.Value.RawValue);
|
|
|
|
entry = Assert.Single(modelState, kvp => kvp.Key == "parameter.Value").Value;
|
|
Assert.Equal("10", entry.Value.AttemptedValue);
|
|
Assert.Equal("10", entry.Value.RawValue);
|
|
}
|
|
|
|
[Fact(Skip = "Extra ModelState key because of #2446")]
|
|
public async Task KeyValuePairModelBinder_BindsKeyValuePairOfSimpleType_WithExplicitPrefix_Success()
|
|
{
|
|
// Arrange
|
|
var argumentBinder = ModelBindingTestHelper.GetArgumentBinder();
|
|
var parameter = new ParameterDescriptor()
|
|
{
|
|
Name = "parameter",
|
|
BindingInfo = new BindingInfo()
|
|
{
|
|
BinderModelName = "prefix",
|
|
},
|
|
ParameterType = typeof(KeyValuePair<string, int>)
|
|
};
|
|
|
|
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
|
|
{
|
|
request.QueryString = new QueryString("?prefix.Key=key0&prefix.Value=10");
|
|
});
|
|
|
|
var modelState = new ModelStateDictionary();
|
|
|
|
// Act
|
|
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, modelState, operationContext);
|
|
|
|
// Assert
|
|
Assert.NotNull(modelBindingResult);
|
|
Assert.True(modelBindingResult.IsModelSet);
|
|
|
|
var model = Assert.IsType<KeyValuePair<string, int>>(modelBindingResult.Model);
|
|
Assert.Equal(new KeyValuePair<string, int>("key0", 10), model);
|
|
|
|
Assert.Equal(2, modelState.Count); // This fails due to #2446
|
|
Assert.Equal(0, modelState.ErrorCount);
|
|
Assert.True(modelState.IsValid);
|
|
|
|
var entry = Assert.Single(modelState, kvp => kvp.Key == "prefix.Key").Value;
|
|
Assert.Equal("key0", entry.Value.AttemptedValue);
|
|
Assert.Equal("key0", entry.Value.RawValue);
|
|
|
|
entry = Assert.Single(modelState, kvp => kvp.Key == "prefix.Value").Value;
|
|
Assert.Equal("10", entry.Value.AttemptedValue);
|
|
Assert.Equal("10", entry.Value.RawValue);
|
|
}
|
|
|
|
[Fact(Skip = "Extra ModelState key because of #2446")]
|
|
public async Task KeyValuePairModelBinder_BindsKeyValuePairOfSimpleType_EmptyPrefix_Success()
|
|
{
|
|
// Arrange
|
|
var argumentBinder = ModelBindingTestHelper.GetArgumentBinder();
|
|
var parameter = new ParameterDescriptor()
|
|
{
|
|
Name = "parameter",
|
|
ParameterType = typeof(KeyValuePair<string, int>)
|
|
};
|
|
|
|
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
|
|
{
|
|
request.QueryString = new QueryString("?Key=key0&Value=10");
|
|
});
|
|
|
|
var modelState = new ModelStateDictionary();
|
|
|
|
// Act
|
|
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, modelState, operationContext);
|
|
|
|
// Assert
|
|
Assert.NotNull(modelBindingResult);
|
|
Assert.True(modelBindingResult.IsModelSet);
|
|
|
|
var model = Assert.IsType<KeyValuePair<string, int>>(modelBindingResult.Model);
|
|
Assert.Equal(new KeyValuePair<string, int>("key0", 10), model);
|
|
|
|
Assert.Equal(2, modelState.Count); // This fails due to #2446
|
|
Assert.Equal(0, modelState.ErrorCount);
|
|
Assert.True(modelState.IsValid);
|
|
|
|
var entry = Assert.Single(modelState, kvp => kvp.Key == "Key").Value;
|
|
Assert.Equal("key0", entry.Value.AttemptedValue);
|
|
Assert.Equal("key0", entry.Value.RawValue);
|
|
|
|
entry = Assert.Single(modelState, kvp => kvp.Key == "Value").Value;
|
|
Assert.Equal("10", entry.Value.AttemptedValue);
|
|
Assert.Equal("10", entry.Value.RawValue);
|
|
}
|
|
|
|
[Fact(Skip = "Empty collection should be created by the collection model binder #1579")]
|
|
public async Task KeyValuePairModelBinder_BindsKeyValuePairOfSimpleType_NoData()
|
|
{
|
|
// Arrange
|
|
var argumentBinder = ModelBindingTestHelper.GetArgumentBinder();
|
|
var parameter = new ParameterDescriptor()
|
|
{
|
|
Name = "parameter",
|
|
ParameterType = typeof(KeyValuePair<string, int>)
|
|
};
|
|
|
|
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
|
|
{
|
|
request.QueryString = new QueryString("?");
|
|
});
|
|
|
|
var modelState = new ModelStateDictionary();
|
|
|
|
// Act
|
|
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, modelState, operationContext);
|
|
|
|
// Assert
|
|
Assert.NotNull(modelBindingResult); // This fails due to #1579
|
|
Assert.False(modelBindingResult.IsModelSet);
|
|
|
|
Assert.Equal(new int[0], modelBindingResult.Model);
|
|
|
|
Assert.Equal(0, modelState.Count);
|
|
Assert.Equal(0, modelState.ErrorCount);
|
|
Assert.True(modelState.IsValid);
|
|
}
|
|
}
|
|
} |