diff --git a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/DictionaryBasedValueProvider.cs b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/DictionaryBasedValueProvider.cs index bb2392d5fe..645f31ef2d 100644 --- a/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/DictionaryBasedValueProvider.cs +++ b/src/Microsoft.AspNet.Mvc.ModelBinding/ValueProviders/DictionaryBasedValueProvider.cs @@ -21,13 +21,18 @@ namespace Microsoft.AspNet.Mvc.ModelBinding public Task GetValueAsync([NotNull] string key) { object value; + ValueProviderResult result; if (_values.TryGetValue(key, out value)) { - var result = new ValueProviderResult(value, value.ToString(), CultureInfo.InvariantCulture); - return Task.FromResult(result); + var attemptedValue = value != null ? value.ToString() : null; + result = new ValueProviderResult(value, attemptedValue, CultureInfo.InvariantCulture); } - - return null; + else + { + result = null; + } + + return Task.FromResult(result); } } } diff --git a/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/DictionaryBasedValueProviderTests.cs b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/DictionaryBasedValueProviderTests.cs new file mode 100644 index 0000000000..b52d9e0be1 --- /dev/null +++ b/test/Microsoft.AspNet.Mvc.ModelBinding.Test/ValueProviders/DictionaryBasedValueProviderTests.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Xunit; + +namespace Microsoft.AspNet.Mvc.ModelBinding +{ + public class DictionaryBasedValueProviderTestss + { + [Fact] + public async Task GetValueProvider_ReturnsNull_WhenKeyIsNotFound() + { + // Arrange + var values = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "test-key", "value" } + }; + var provider = new DictionaryBasedValueProvider(values); + + // Act + var result = await provider.GetValueAsync("not-test-key"); + + // Assert + Assert.Null(result); + } + + [Fact] + public async Task GetValueProvider_ReturnsValue_IfKeyIsPresent() + { + // Arrange + var values = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "test-key", "test-value" } + }; + var provider = new DictionaryBasedValueProvider(values); + + // Act + var result = await provider.GetValueAsync("test-key"); + + // Assert + Assert.Equal("test-value", result.RawValue); + } + + [Fact] + public async Task ContainsPrefixAsync_ReturnsNullValue_IfKeyIsPresent() + { + // Arrange + var values = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "test-key", null } + }; + var provider = new DictionaryBasedValueProvider(values); + + // Act + var result = await provider.GetValueAsync("test-key"); + + // Assert + Assert.NotNull(result); + Assert.Null(result.RawValue); + Assert.Null(result.AttemptedValue); + } + + [Fact] + public async Task ContainsPrefixAsync_ReturnsFalse_IfKeyIsNotPresent() + { + // Arrange + var values = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "test-key", "test-value" } + }; + var provider = new DictionaryBasedValueProvider(values); + + // Act + var result = await provider.ContainsPrefixAsync("not-test-key"); + + // Assert + Assert.False(result); + } + + [Fact] + public async Task ContainsPrefixAsync_ReturnsTrue_IfKeyIsPresent() + { + // Arrange + var values = new Dictionary(StringComparer.OrdinalIgnoreCase) + { + { "test-key", "test-value" } + }; + var provider = new DictionaryBasedValueProvider(values); + + // Act + var result = await provider.ContainsPrefixAsync("test-key"); + + // Assert + Assert.True(result); + } + } +}