a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
169 lines
6.2 KiB
C#
169 lines
6.2 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
|
|
|
|
using System;
|
|
using System.Globalization;
|
|
using System.Web;
|
|
using System.Web.Mvc;
|
|
using System.Web.TestUtil;
|
|
using Moq;
|
|
using Xunit;
|
|
|
|
namespace Microsoft.Web.Mvc.ModelBinding.Test
|
|
{
|
|
public class ModelBinderConfigTest
|
|
{
|
|
[Fact]
|
|
public void GetUserResourceString_NullControllerContext_ReturnsNull()
|
|
{
|
|
// Act
|
|
string customResourceString = ModelBinderConfig.GetUserResourceString(null /* controllerContext */, "someResourceName", "someResourceClassKey");
|
|
|
|
// Assert
|
|
Assert.Null(customResourceString);
|
|
}
|
|
|
|
[Fact]
|
|
public void GetUserResourceString_NullHttpContext_ReturnsNull()
|
|
{
|
|
Mock<ControllerContext> mockControllerContext = new Mock<ControllerContext>();
|
|
mockControllerContext.Setup(o => o.HttpContext).Returns((HttpContextBase)null);
|
|
|
|
// Act
|
|
string customResourceString = ModelBinderConfig.GetUserResourceString(mockControllerContext.Object, "someResourceName", "someResourceClassKey");
|
|
|
|
// Assert
|
|
Assert.Null(customResourceString);
|
|
}
|
|
|
|
[Fact]
|
|
public void GetUserResourceString_NullResourceKey_ReturnsNull()
|
|
{
|
|
Mock<ControllerContext> mockControllerContext = new Mock<ControllerContext>();
|
|
|
|
// Act
|
|
string customResourceString = ModelBinderConfig.GetUserResourceString(mockControllerContext.Object, "someResourceName", null /* resourceClassKey */);
|
|
|
|
// Assert
|
|
mockControllerContext.Verify(o => o.HttpContext, Times.Never());
|
|
Assert.Null(customResourceString);
|
|
}
|
|
|
|
[Fact]
|
|
public void GetUserResourceString_ValidResourceObject_ReturnsResourceString()
|
|
{
|
|
Mock<ControllerContext> mockControllerContext = new Mock<ControllerContext>();
|
|
mockControllerContext.Setup(o => o.HttpContext.GetGlobalResourceObject("someResourceClassKey", "someResourceName", CultureInfo.CurrentUICulture)).Returns("My custom resource string");
|
|
|
|
// Act
|
|
string customResourceString = ModelBinderConfig.GetUserResourceString(mockControllerContext.Object, "someResourceName", "someResourceClassKey");
|
|
|
|
// Assert
|
|
Assert.Equal("My custom resource string", customResourceString);
|
|
}
|
|
|
|
[Fact]
|
|
public void Initialize_ReplacesOriginalCollection()
|
|
{
|
|
// Arrange
|
|
ModelBinderDictionary oldBinders = new ModelBinderDictionary();
|
|
oldBinders[typeof(int)] = new Mock<IModelBinder>().Object;
|
|
ModelBinderProviderCollection newBinderProviders = new ModelBinderProviderCollection();
|
|
|
|
// Act
|
|
ModelBinderConfig.Initialize(oldBinders, newBinderProviders);
|
|
|
|
// Assert
|
|
Assert.Empty(oldBinders);
|
|
|
|
var shimBinder = Assert.IsType<ExtensibleModelBinderAdapter>(oldBinders.DefaultBinder);
|
|
Assert.Same(newBinderProviders, shimBinder.Providers);
|
|
}
|
|
|
|
[Fact]
|
|
public void TypeConversionErrorMessageProvider_DefaultValue()
|
|
{
|
|
// Arrange
|
|
ModelMetadata metadata = new ModelMetadata(new Mock<ModelMetadataProvider>().Object, null, null, typeof(int), "SomePropertyName");
|
|
|
|
// Act
|
|
string errorString = ModelBinderConfig.TypeConversionErrorMessageProvider(null, metadata, "some incoming value");
|
|
|
|
// Assert
|
|
Assert.Equal("The value 'some incoming value' is not valid for SomePropertyName.", errorString);
|
|
}
|
|
|
|
[Fact]
|
|
public void TypeConversionErrorMessageProvider_Property()
|
|
{
|
|
// Arrange
|
|
ModelBinderConfigWrapper wrapper = new ModelBinderConfigWrapper();
|
|
|
|
// Act & assert
|
|
try
|
|
{
|
|
MemberHelper.TestPropertyWithDefaultInstance(wrapper, "TypeConversionErrorMessageProvider", (ModelBinderErrorMessageProvider)DummyErrorSelector);
|
|
}
|
|
finally
|
|
{
|
|
wrapper.Reset();
|
|
}
|
|
}
|
|
|
|
[Fact]
|
|
public void ValueRequiredErrorMessageProvider_DefaultValue()
|
|
{
|
|
// Arrange
|
|
ModelMetadata metadata = new ModelMetadata(new Mock<ModelMetadataProvider>().Object, null, null, typeof(int), "SomePropertyName");
|
|
|
|
// Act
|
|
string errorString = ModelBinderConfig.ValueRequiredErrorMessageProvider(null, metadata, "some incoming value");
|
|
|
|
// Assert
|
|
Assert.Equal("A value is required.", errorString);
|
|
}
|
|
|
|
[Fact]
|
|
public void ValueRequiredErrorMessageProvider_Property()
|
|
{
|
|
// Arrange
|
|
ModelBinderConfigWrapper wrapper = new ModelBinderConfigWrapper();
|
|
|
|
// Act & assert
|
|
try
|
|
{
|
|
MemberHelper.TestPropertyWithDefaultInstance(wrapper, "ValueRequiredErrorMessageProvider", (ModelBinderErrorMessageProvider)DummyErrorSelector);
|
|
}
|
|
finally
|
|
{
|
|
wrapper.Reset();
|
|
}
|
|
}
|
|
|
|
private string DummyErrorSelector(ControllerContext controllerContext, ModelMetadata modelMetadata, object incomingValue)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
private sealed class ModelBinderConfigWrapper
|
|
{
|
|
public ModelBinderErrorMessageProvider TypeConversionErrorMessageProvider
|
|
{
|
|
get { return ModelBinderConfig.TypeConversionErrorMessageProvider; }
|
|
set { ModelBinderConfig.TypeConversionErrorMessageProvider = value; }
|
|
}
|
|
|
|
public ModelBinderErrorMessageProvider ValueRequiredErrorMessageProvider
|
|
{
|
|
get { return ModelBinderConfig.ValueRequiredErrorMessageProvider; }
|
|
set { ModelBinderConfig.ValueRequiredErrorMessageProvider = value; }
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
ModelBinderConfig.TypeConversionErrorMessageProvider = null;
|
|
ModelBinderConfig.ValueRequiredErrorMessageProvider = null;
|
|
}
|
|
}
|
|
}
|
|
}
|