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