Skip to content

Commit afec7e7

Browse files
committed
Fix ViewResultAssertions and PartialViewResultAssertions messages. Add missing tests.
1 parent 37984f7 commit afec7e7

File tree

8 files changed

+280
-140
lines changed

8 files changed

+280
-140
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using FluentAssertions.Common;
2+
using FluentAssertions.Execution;
3+
using System.Collections.Generic;
4+
5+
namespace FluentAssertions.AspNetCore.Mvc
6+
{
7+
internal class AssertionHelpers
8+
{
9+
internal static void AssertStringObjectDictionary(
10+
IDictionary<string, object> dictionary,
11+
string context,
12+
string key,
13+
object expectedValue,
14+
string reason,
15+
object[] reasonArgs)
16+
{
17+
using (var scope = new AssertionScope(context))
18+
{
19+
if (dictionary is null)
20+
{
21+
Execute.Assertion
22+
.BecauseOf(reason, reasonArgs)
23+
.FailWith("Expected {context} to contain value {0} at key {1}{reason}, but it is {2}.", expectedValue, key,
24+
dictionary);
25+
}
26+
27+
if (dictionary.TryGetValue(key, out object actual))
28+
{
29+
Execute.Assertion
30+
.BecauseOf(reason, reasonArgs)
31+
.ForCondition(actual.IsSameOrEqualTo(expectedValue))
32+
.FailWith("Expected {context} to contain value {0} at key {1}{reason} but found {2}.", expectedValue, key, actual);
33+
}
34+
else
35+
{
36+
Execute.Assertion
37+
.BecauseOf(reason, reasonArgs)
38+
.FailWith("Expected {context} to contain value {0} at key {1}{reason}, but the key was not found.", expectedValue,
39+
key);
40+
}
41+
}
42+
}
43+
}
44+
}

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

Lines changed: 1 addition & 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: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,8 @@
171171
<data name="ViewResultBase_ViewData_HaveValue" xml:space="preserve">
172172
<value>Expected ViewData[{0}] to have value {1}, but found {2}.</value>
173173
</data>
174-
<data name="ViewResultBase_ViewName" xml:space="preserve">
175-
<value>Expected ViewName to be {0} but found {1}.</value>
176-
</data>
177174
<data name="ViewResultBase_WithDefaultViewName" xml:space="preserve">
178-
<value>Expected default view, but view {0} was rendered.</value>
175+
<value>Expected default view{reason}, but view {0} was rendered.</value>
179176
</data>
180177
<data name="ViewResult_MasterName" xml:space="preserve">
181178
<value>Expected MasterName to be {0} but found {1}.</value>

src/FluentAssertions.AspNetCore.Mvc/PartialViewResultAssertions.cs

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
1-
using FluentAssertions.Execution;
1+
using FluentAssertions.Common;
2+
using FluentAssertions.Execution;
23
using FluentAssertions.Primitives;
34
using Microsoft.AspNetCore.Mvc;
45
using System;
6+
using System.Diagnostics;
57

68
namespace FluentAssertions.AspNetCore.Mvc
79
{
10+
/// <summary>
11+
/// Contains a number of methods to assert that a <see cref="PartialViewResult"/> is in the expected state.
12+
/// </summary>
13+
[DebuggerNonUserCode]
814
public class PartialViewResultAssertions : ObjectAssertions
915
{
1016
/// <summary>
@@ -39,9 +45,10 @@ public PartialViewResultAssertions WithViewName(string expectedViewName, string
3945
var actualViewName = PartialViewResultSubject.ViewName;
4046

4147
Execute.Assertion
42-
.ForCondition(string.Equals(expectedViewName, actualViewName, StringComparison.OrdinalIgnoreCase))
4348
.BecauseOf(reason, reasonArgs)
44-
.FailWith(FailureMessages.ViewResultBase_ViewName, expectedViewName, actualViewName);
49+
.ForCondition(string.Equals(expectedViewName, actualViewName, StringComparison.OrdinalIgnoreCase))
50+
.WithDefaultIdentifier("PartialViewResult.ViewName")
51+
.FailWith(FailureMessages.CommonFailMessage2, expectedViewName, actualViewName);
4552
return this;
4653
}
4754

@@ -62,17 +69,8 @@ public PartialViewResultAssertions WithViewData(string key, object expectedValue
6269
{
6370
var actualViewData = PartialViewResultSubject.ViewData;
6471

65-
Execute.Assertion
66-
.ForCondition(actualViewData.ContainsKey(key))
67-
.BecauseOf(reason, reasonArgs)
68-
.FailWith(FailureMessages.ViewResultBase_ViewData_ContainsKey, key);
69-
70-
var actualValue = actualViewData[key];
71-
72-
Execute.Assertion
73-
.ForCondition(actualValue.Equals(expectedValue))
74-
.BecauseOf(reason, reasonArgs)
75-
.FailWith(FailureMessages.ViewResultBase_ViewData_HaveValue, key, expectedValue, actualValue);
72+
AssertionHelpers.AssertStringObjectDictionary(actualViewData, "PartialViewResult.ViewData",
73+
key, expectedValue, reason, reasonArgs);
7674

7775
return this;
7876
}
@@ -94,12 +92,8 @@ public PartialViewResultAssertions WithTempData(string key, object expectedValue
9492
{
9593
var actualTempData = PartialViewResultSubject.TempData;
9694

97-
Execute.Assertion
98-
.ForCondition(actualTempData.ContainsKey(key))
99-
.BecauseOf(reason, reasonArgs)
100-
.FailWith("TempData does not contain key of '{0}'", key);
101-
102-
actualTempData[key].Should().Be(expectedValue);
95+
AssertionHelpers.AssertStringObjectDictionary(actualTempData, "PartialViewResult.TempData",
96+
key, expectedValue, reason, reasonArgs);
10397

10498
return this;
10599
}
@@ -114,11 +108,14 @@ public TModel ModelAs<TModel>()
114108
var model = PartialViewResultSubject.ViewData?.Model;
115109

116110
if (model == null)
117-
Execute.Assertion.FailWith(FailureMessages.CommonNullWasSuppliedFailMessage, "Model", typeof(TModel).Name);
111+
Execute.Assertion
112+
.WithDefaultIdentifier("PartialViewResult.Model")
113+
.FailWith(FailureMessages.CommonNullWasSuppliedFailMessage2, typeof(TModel));
118114

119115
Execute.Assertion
120116
.ForCondition(model is TModel)
121-
.FailWith(FailureMessages.CommonTypeFailMessage, "Model", typeof(TModel).Name, model.GetType().Name);
117+
.WithDefaultIdentifier("PartialViewResult.Model")
118+
.FailWith(FailureMessages.CommonTypeFailMessage2, typeof(TModel), model.GetType());
122119

123120
return (TModel)model;
124121
}

src/FluentAssertions.AspNetCore.Mvc/ViewResultAssertions.cs

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
using FluentAssertions.Execution;
1+
using FluentAssertions.Common;
2+
using FluentAssertions.Execution;
23
using FluentAssertions.Primitives;
34
using Microsoft.AspNetCore.Mvc;
45
using System;
6+
using System.Collections.Generic;
57
using System.Diagnostics;
68

79
namespace FluentAssertions.AspNetCore.Mvc
@@ -58,9 +60,10 @@ public ViewResultAssertions WithViewName(string expectedViewName, string reason
5860
var actualViewName = ViewResultSubject.ViewName;
5961

6062
Execute.Assertion
61-
.ForCondition(string.Equals(expectedViewName, actualViewName, StringComparison.OrdinalIgnoreCase))
6263
.BecauseOf(reason, reasonArgs)
63-
.FailWith(FailureMessages.ViewResultBase_ViewName, expectedViewName, actualViewName);
64+
.ForCondition(string.Equals(expectedViewName, actualViewName, StringComparison.OrdinalIgnoreCase))
65+
.WithDefaultIdentifier("ViewResult.ViewName")
66+
.FailWith(FailureMessages.CommonFailMessage2, expectedViewName, actualViewName);
6467
return this;
6568
}
6669

@@ -81,17 +84,8 @@ public ViewResultAssertions WithViewData(string key, object expectedValue, strin
8184
{
8285
var actualViewData = ViewResultSubject.ViewData;
8386

84-
Execute.Assertion
85-
.ForCondition(actualViewData.ContainsKey(key))
86-
.BecauseOf(reason, reasonArgs)
87-
.FailWith(FailureMessages.ViewResultBase_ViewData_ContainsKey, key);
88-
89-
var actualValue = actualViewData[key];
90-
91-
Execute.Assertion
92-
.ForCondition(actualValue.Equals(expectedValue))
93-
.BecauseOf(reason, reasonArgs)
94-
.FailWith(FailureMessages.ViewResultBase_ViewData_HaveValue, key, expectedValue, actualValue);
87+
AssertionHelpers.AssertStringObjectDictionary(actualViewData, "ViewResult.ViewData",
88+
key, expectedValue, reason, reasonArgs);
9589

9690
return this;
9791
}
@@ -113,12 +107,8 @@ public ViewResultAssertions WithTempData(string key, object expectedValue, strin
113107
{
114108
var actualTempData = ViewResultSubject.TempData;
115109

116-
Execute.Assertion
117-
.ForCondition(actualTempData.ContainsKey(key))
118-
.BecauseOf(reason, reasonArgs)
119-
.FailWith("TempData does not contain key of '{0}'", key);
120-
121-
actualTempData[key].Should().Be(expectedValue);
110+
AssertionHelpers.AssertStringObjectDictionary(actualTempData, "ViewResult.TempData",
111+
key, expectedValue, reason, reasonArgs);
122112

123113
return this;
124114
}
@@ -133,11 +123,14 @@ public TModel ModelAs<TModel>()
133123
var model = ViewResultSubject.Model;
134124

135125
if (model == null)
136-
Execute.Assertion.FailWith(FailureMessages.CommonNullWasSuppliedFailMessage, "Model", typeof(TModel).Name);
126+
Execute.Assertion
127+
.WithDefaultIdentifier("ViewResult.Model")
128+
.FailWith(FailureMessages.CommonNullWasSuppliedFailMessage2, typeof(TModel));
137129

138130
Execute.Assertion
139131
.ForCondition(model is TModel)
140-
.FailWith(FailureMessages.CommonTypeFailMessage, "Model", typeof(TModel).Name, model.GetType().Name);
132+
.WithDefaultIdentifier("ViewResult.Model")
133+
.FailWith(FailureMessages.CommonTypeFailMessage2, typeof(TModel), model.GetType());
141134

142135
return (TModel)model;
143136
}

0 commit comments

Comments
 (0)