1 // Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. 2 3 using System.Collections.Generic; 4 using System.Web.Mvc; 5 using Microsoft.Web.UnitTestUtil; 6 using Xunit; 7 8 namespace Microsoft.Web.Mvc.ModelBinding.Test 9 { 10 public class KeyValuePairModelBinderProviderTest 11 { 12 [Fact] GetBinder_CorrectModelTypeAndValueProviderEntries_ReturnsBinder()13 public void GetBinder_CorrectModelTypeAndValueProviderEntries_ReturnsBinder() 14 { 15 // Arrange 16 ExtensibleModelBindingContext bindingContext = new ExtensibleModelBindingContext 17 { 18 ModelMetadata = new EmptyModelMetadataProvider().GetMetadataForType(null, typeof(KeyValuePair<int, string>)), 19 ModelName = "foo", 20 ValueProvider = new SimpleValueProvider 21 { 22 { "foo.key", 42 }, 23 { "foo.value", "someValue" } 24 } 25 }; 26 27 KeyValuePairModelBinderProvider binderProvider = new KeyValuePairModelBinderProvider(); 28 29 // Act 30 IExtensibleModelBinder binder = binderProvider.GetBinder(null, bindingContext); 31 32 // Assert 33 Assert.IsType<KeyValuePairModelBinder<int, string>>(binder); 34 } 35 36 [Fact] GetBinder_ModelTypeIsIncorrect_ReturnsNull()37 public void GetBinder_ModelTypeIsIncorrect_ReturnsNull() 38 { 39 // Arrange 40 ExtensibleModelBindingContext bindingContext = new ExtensibleModelBindingContext 41 { 42 ModelMetadata = new EmptyModelMetadataProvider().GetMetadataForType(null, typeof(List<int>)), 43 ModelName = "foo", 44 ValueProvider = new SimpleValueProvider 45 { 46 { "foo.key", 42 }, 47 { "foo.value", "someValue" } 48 } 49 }; 50 51 KeyValuePairModelBinderProvider binderProvider = new KeyValuePairModelBinderProvider(); 52 53 // Act 54 IExtensibleModelBinder binder = binderProvider.GetBinder(null, bindingContext); 55 56 // Assert 57 Assert.Null(binder); 58 } 59 60 [Fact] GetBinder_ValueProviderDoesNotContainKeyProperty_ReturnsNull()61 public void GetBinder_ValueProviderDoesNotContainKeyProperty_ReturnsNull() 62 { 63 // Arrange 64 ExtensibleModelBindingContext bindingContext = new ExtensibleModelBindingContext 65 { 66 ModelMetadata = new EmptyModelMetadataProvider().GetMetadataForType(null, typeof(KeyValuePair<int, string>)), 67 ModelName = "foo", 68 ValueProvider = new SimpleValueProvider 69 { 70 { "foo.value", "someValue" } 71 } 72 }; 73 74 KeyValuePairModelBinderProvider binderProvider = new KeyValuePairModelBinderProvider(); 75 76 // Act 77 IExtensibleModelBinder binder = binderProvider.GetBinder(null, bindingContext); 78 79 // Assert 80 Assert.Null(binder); 81 } 82 83 [Fact] GetBinder_ValueProviderDoesNotContainValueProperty_ReturnsNull()84 public void GetBinder_ValueProviderDoesNotContainValueProperty_ReturnsNull() 85 { 86 // Arrange 87 ExtensibleModelBindingContext bindingContext = new ExtensibleModelBindingContext 88 { 89 ModelMetadata = new EmptyModelMetadataProvider().GetMetadataForType(null, typeof(KeyValuePair<int, string>)), 90 ModelName = "foo", 91 ValueProvider = new SimpleValueProvider 92 { 93 { "foo.key", 42 } 94 } 95 }; 96 97 KeyValuePairModelBinderProvider binderProvider = new KeyValuePairModelBinderProvider(); 98 99 // Act 100 IExtensibleModelBinder binder = binderProvider.GetBinder(null, bindingContext); 101 102 // Assert 103 Assert.Null(binder); 104 } 105 } 106 } 107