DictionaryBasedValueProvider results null when value is not found

* Guard against Dictionary returning null values
This commit is contained in:
Pranav K 2014-04-24 17:59:01 -07:00
parent 0fe028a4dd
commit d61915149c
2 changed files with 106 additions and 4 deletions

View File

@ -21,13 +21,18 @@ namespace Microsoft.AspNet.Mvc.ModelBinding
public Task<ValueProviderResult> 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);
}
}
}

View File

@ -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<string, object>(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<string, object>(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<string, object>(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<string, object>(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<string, object>(StringComparer.OrdinalIgnoreCase)
{
{ "test-key", "test-value" }
};
var provider = new DictionaryBasedValueProvider(values);
// Act
var result = await provider.ContainsPrefixAsync("test-key");
// Assert
Assert.True(result);
}
}
}