forked from aspnet/AspNetWebStack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJsonValueProviderFactoryTest.cs
More file actions
154 lines (127 loc) · 5.64 KB
/
Copy pathJsonValueProviderFactoryTest.cs
File metadata and controls
154 lines (127 loc) · 5.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Globalization;
using System.IO;
using System.Text;
using Microsoft.TestCommon;
using Moq;
namespace System.Web.Mvc.Test
{
public class JsonValueProviderFactoryTest
{
[Fact]
public void GetValueProvider_NullControllerContext_ThrowsException()
{
JsonValueProviderFactory factory = new JsonValueProviderFactory();
Assert.ThrowsArgumentNull(delegate() { factory.GetValueProvider(controllerContext: null); }, "controllerContext");
}
[Fact]
public void GetValueProvider_SimpleArrayJsonObject()
{
const string jsonString = @"
[ ""abc"", null, ""foobar"" ]
";
ControllerContext cc = GetJsonEnabledControllerContext(jsonString);
JsonValueProviderFactory factory = new JsonValueProviderFactory();
// Act & assert
IValueProvider valueProvider = factory.GetValueProvider(cc);
Assert.True(valueProvider.ContainsPrefix("[0]"));
Assert.True(valueProvider.ContainsPrefix("[2]"));
Assert.False(valueProvider.ContainsPrefix("[3]"));
ValueProviderResult vpResult1 = valueProvider.GetValue("[0]");
Assert.Equal("abc", vpResult1.AttemptedValue);
Assert.Equal(CultureInfo.CurrentCulture, vpResult1.Culture);
// null values should exist in the backing store as actual entries
ValueProviderResult vpResult2 = valueProvider.GetValue("[1]");
Assert.NotNull(vpResult2);
Assert.Null(vpResult2.RawValue);
}
[Fact]
public void GetValueProvider_SimpleDictionaryJsonObject()
{
const string jsonString = @"
{ ""FirstName"":""John"",
""LastName"": ""Doe""
}";
ControllerContext cc = GetJsonEnabledControllerContext(jsonString);
JsonValueProviderFactory factory = new JsonValueProviderFactory();
// Act & assert
IValueProvider valueProvider = factory.GetValueProvider(cc);
Assert.True(valueProvider.ContainsPrefix("firstname"));
ValueProviderResult vpResult1 = valueProvider.GetValue("firstname");
Assert.Equal("John", vpResult1.AttemptedValue);
Assert.Equal(CultureInfo.CurrentCulture, vpResult1.Culture);
}
[Fact]
public void GetValueProvider_ComplexJsonObject()
{
// Arrange
const string jsonString = @"
[
{
""BillingAddress"": {
""Street"": ""1 Microsoft Way"",
""City"": ""Redmond"",
""State"": ""WA"",
""ZIP"": 98052 },
""ShippingAddress"": {
""Street"": ""123 Anywhere Ln"",
""City"": ""Anytown"",
""State"": ""ZZ"",
""ZIP"": 99999 }
},
{
""Enchiladas"": [ ""Delicious"", ""Nutritious""]
}
]
";
ControllerContext cc = GetJsonEnabledControllerContext(jsonString);
JsonValueProviderFactory factory = new JsonValueProviderFactory();
// Act & assert
IValueProvider valueProvider = factory.GetValueProvider(cc);
Assert.NotNull(valueProvider);
Assert.True(valueProvider.ContainsPrefix("[0].billingaddress"));
Assert.Null(valueProvider.GetValue("[0].billingaddress"));
Assert.True(valueProvider.ContainsPrefix("[0].billingaddress.street"));
Assert.NotNull(valueProvider.GetValue("[0].billingaddress.street"));
ValueProviderResult vpResult1 = valueProvider.GetValue("[1].enchiladas[0]");
Assert.NotNull(vpResult1);
Assert.Equal("Delicious", vpResult1.AttemptedValue);
Assert.Equal(CultureInfo.CurrentCulture, vpResult1.Culture);
}
[Fact]
public void GetValueProvider_NoJsonBody_ReturnsNull()
{
// Arrange
Mock<ControllerContext> mockControllerContext = new Mock<ControllerContext>();
mockControllerContext.Setup(o => o.HttpContext.Request.ContentType).Returns("application/json");
mockControllerContext.Setup(o => o.HttpContext.Request.InputStream).Returns(new MemoryStream());
JsonValueProviderFactory factory = new JsonValueProviderFactory();
// Act
IValueProvider valueProvider = factory.GetValueProvider(mockControllerContext.Object);
// Assert
Assert.Null(valueProvider);
}
[Fact]
public void GetValueProvider_NotJsonRequest_ReturnsNull()
{
// Arrange
Mock<ControllerContext> mockControllerContext = new Mock<ControllerContext>();
mockControllerContext.Setup(o => o.HttpContext.Request.ContentType).Returns("not JSON");
JsonValueProviderFactory factory = new JsonValueProviderFactory();
// Act
IValueProvider valueProvider = factory.GetValueProvider(mockControllerContext.Object);
// Assert
Assert.Null(valueProvider);
}
private static ControllerContext GetJsonEnabledControllerContext(string jsonString)
{
byte[] jsonBytes = Encoding.UTF8.GetBytes(jsonString);
MemoryStream jsonStream = new MemoryStream(jsonBytes);
Mock<ControllerContext> mockControllerContext = new Mock<ControllerContext>();
mockControllerContext.Setup(o => o.HttpContext.Request.ContentType).Returns("application/json");
mockControllerContext.Setup(o => o.HttpContext.Request.InputStream).Returns(jsonStream);
return mockControllerContext.Object;
}
}
}