Skip to content

Commit 8e13336

Browse files
committed
Add ValueAs to JsonResult
1 parent 57519f2 commit 8e13336

10 files changed

+127
-21
lines changed

src/FluentAssertions.AspNetCore.Mvc/FailureMessages.Designer.cs

Lines changed: 19 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/FluentAssertions.AspNetCore.Mvc/FailureMessages.resx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@
120120
<data name="CommonFailMessage" xml:space="preserve">
121121
<value>Expected {0} to be '{1}' but found '{2}'</value>
122122
</data>
123+
<data name="CommonNullWasSuppliedFailMessage" xml:space="preserve">
124+
<value>Expected {0} to be of type {1}, but no {0} was supplied.</value>
125+
</data>
126+
<data name="CommonTypeFailMessage" xml:space="preserve">
127+
<value>Expected {0} to be of type '{1}' but was '{2}'</value>
128+
</data>
123129
<data name="RedirectToActionResult_RouteValues_ContainsKey" xml:space="preserve">
124130
<value>RedirectToActionResult.RouteValues does not contain key {0}.</value>
125131
</data>
@@ -138,9 +144,6 @@
138144
<data name="RouteData_Values_HaveValue" xml:space="preserve">
139145
<value>Expected RouteData.Values[{0}] to have value {1}, but found {2}.</value>
140146
</data>
141-
<data name="ViewResultBase_NullModel" xml:space="preserve">
142-
<value>Expected Model to be of type {0}, but no Model was supplied.</value>
143-
</data>
144147
<data name="ViewResultBase_ViewData_ContainsKey" xml:space="preserve">
145148
<value>ViewData does not contain key of {0}.</value>
146149
</data>

src/FluentAssertions.AspNetCore.Mvc/FluentAssertions.AspNetCore.Mvc.csproj

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,19 @@
2929
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.0" />
3030
</ItemGroup>
3131

32+
<ItemGroup>
33+
<Compile Update="FailureMessages.Designer.cs">
34+
<DesignTime>True</DesignTime>
35+
<AutoGen>True</AutoGen>
36+
<DependentUpon>FailureMessages.resx</DependentUpon>
37+
</Compile>
38+
</ItemGroup>
39+
40+
<ItemGroup>
41+
<EmbeddedResource Update="FailureMessages.resx">
42+
<Generator>ResXFileCodeGenerator</Generator>
43+
<LastGenOutput>FailureMessages.Designer.cs</LastGenOutput>
44+
</EmbeddedResource>
45+
</ItemGroup>
46+
3247
</Project>

src/FluentAssertions.AspNetCore.Mvc/JsonResultAssertions.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,24 @@ public JsonResultAssertions WithValue(object expectedValue, string reason = "",
6666
return this;
6767
}
6868

69+
/// <summary>
70+
/// Asserts the value is of the expected type.
71+
/// </summary>
72+
/// <typeparam name="TValue">The expected type.</typeparam>
73+
/// <returns>The typed value.</returns>
74+
public TValue ValueAs<TValue>()
75+
{
76+
var value = JsonResultSubject.Value;
77+
78+
if (value == null)
79+
Execute.Assertion.FailWith(FailureMessages.CommonNullWasSuppliedFailMessage, "Value", typeof(TValue).Name);
80+
81+
Execute.Assertion
82+
.ForCondition(value is TValue)
83+
.FailWith(FailureMessages.CommonTypeFailMessage, "Value", typeof(TValue).Name, value.GetType().Name);
84+
85+
return (TValue)value;
86+
}
6987
#endregion
7088
}
7189
}

src/FluentAssertions.AspNetCore.Mvc/PartialViewResultAssertions.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public PartialViewResultAssertions(PartialViewResult subject) : base(subject)
1515
{
1616
}
1717

18-
private PartialViewResult PartialViewResultSubject => (PartialViewResult) Subject;
18+
private PartialViewResult PartialViewResultSubject => (PartialViewResult)Subject;
1919

2020
/// <summary>
2121
/// The model.
@@ -114,13 +114,13 @@ public TModel ModelAs<TModel>()
114114
var model = PartialViewResultSubject.ViewData?.Model;
115115

116116
if (model == null)
117-
Execute.Assertion.FailWith(FailureMessages.ViewResultBase_NullModel, typeof(TModel).Name);
117+
Execute.Assertion.FailWith(FailureMessages.CommonNullWasSuppliedFailMessage, "Model", typeof(TModel).Name);
118118

119119
Execute.Assertion
120120
.ForCondition(model is TModel)
121-
.FailWith("Expected Model to be of type '{0}' but was '{1}'", typeof(TModel).Name, model.GetType().Name);
121+
.FailWith(FailureMessages.CommonTypeFailMessage, "Model", typeof(TModel).Name, model.GetType().Name);
122122

123-
return (TModel) model;
123+
return (TModel)model;
124124
}
125125

126126
/// <summary>

src/FluentAssertions.AspNetCore.Mvc/ViewResultAssertions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,11 @@ public TModel ModelAs<TModel>()
133133
var model = ViewResultSubject.Model;
134134

135135
if (model == null)
136-
Execute.Assertion.FailWith(FailureMessages.ViewResultBase_NullModel, typeof(TModel).Name);
136+
Execute.Assertion.FailWith(FailureMessages.CommonNullWasSuppliedFailMessage, "Model", typeof(TModel).Name);
137137

138138
Execute.Assertion
139139
.ForCondition(model is TModel)
140-
.FailWith("Expected Model to be of type '{0}' but was '{1}'", typeof(TModel).Name, model.GetType().Name);
140+
.FailWith(FailureMessages.CommonTypeFailMessage, "Model", typeof(TModel).Name, model.GetType().Name);
141141

142142
return (TModel)model;
143143
}

tests/FluentAssertions.AspNetCore.Mvc.Tests/JsonResultAssertions_Tests.cs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,61 @@ public void WithValue_GivenUnexpected_ShouldFail()
2727
a.Should().Throw<Exception>()
2828
.WithMessage(failureMessage);
2929
}
30+
31+
[Fact]
32+
public void Value_GivenExpectedValue_ShouldPass()
33+
{
34+
var result = new TestController().JsonSimpleValue();
35+
36+
result.Should().BeJsonResult().Value.Should().Be("hello");
37+
}
38+
39+
[Fact]
40+
public void Json_GivenUnexpectedValue_ShouldFail()
41+
{
42+
var result = new TestController().JsonSimpleValue();
43+
44+
Action a = () => result.Should().BeJsonResult().Value.Should().Be("xyx");
45+
a.Should().Throw<Exception>();
46+
}
47+
48+
[Fact]
49+
public void ValueAs_GivenExpectedValue_ShouldPass()
50+
{
51+
var result = new TestController().JsonSimpleValue();
52+
53+
result.Should().BeJsonResult().ValueAs<string>().Should().Be("hello");
54+
}
55+
56+
[Fact]
57+
public void ValueAs_GivenUnexpectedValue_ShouldFail()
58+
{
59+
var result = new TestController().JsonSimpleValue();
60+
61+
Action a = () => result.Should().BeJsonResult().ValueAs<string>().Should().Be("xyx");
62+
a.Should().Throw<Exception>();
63+
}
64+
65+
[Fact]
66+
public void ValueAs_GivenWrongType_ShouldFail()
67+
{
68+
var result = new TestController().JsonSimpleValue();
69+
70+
Action a = () => result.Should().BeJsonResult().ValueAs<int>().Should().Be(2);
71+
a.Should().Throw<Exception>();
72+
}
73+
74+
[Fact]
75+
public void ValueAs_Null_ShouldFail()
76+
{
77+
ActionResult result = new JsonResult(null);
78+
string failureMessage = FailureMessageHelper.Format(FailureMessages.CommonNullWasSuppliedFailMessage, "Value", typeof(Object).Name);
79+
80+
Action a = () => result.Should().BeJsonResult().ValueAs<Object>();
81+
82+
a.Should().Throw<Exception>()
83+
.WithMessage(failureMessage);
84+
}
85+
3086
}
3187
}

tests/FluentAssertions.AspNetCore.Mvc.Tests/PartialViewResultAssertions_Tests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public void ModelAs_GivenWrongType_ShouldFail()
6666
public void ModelAs_Null_ShouldFail()
6767
{
6868
ActionResult result = new PartialViewResult();
69-
string failureMessage = FailureMessageHelper.Format(FailureMessages.ViewResultBase_NullModel, typeof(Object).Name);
69+
string failureMessage = FailureMessageHelper.Format(FailureMessages.CommonNullWasSuppliedFailMessage, "Model", typeof(Object).Name);
7070

7171
Action a = () =>
7272
{

tests/FluentAssertions.AspNetCore.Mvc.Tests/TestController.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,10 @@ public ViewResult ViewWithTwoViewData()
5757
ViewData["key2"] = "value2";
5858
return View();
5959
}
60+
61+
public JsonResult JsonSimpleValue()
62+
{
63+
return Json(data: "hello");
64+
}
6065
}
6166
}

tests/FluentAssertions.AspNetCore.Mvc.Tests/ViewResultAssertions_Tests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ public void ModelAs_GivenWrongType_ShouldFail()
175175
public void ModelAs_Null_ShouldFail()
176176
{
177177
ActionResult result = new ViewResult();
178-
string failureMessage = FailureMessageHelper.Format(FailureMessages.ViewResultBase_NullModel, typeof(Object).Name);
178+
string failureMessage = FailureMessageHelper.Format(FailureMessages.CommonNullWasSuppliedFailMessage, "Model", typeof(Object).Name);
179179

180180
Action a = () => result.Should().BeViewResult().ModelAs<Object>();
181181

0 commit comments

Comments
 (0)