Skip to content

Commit b6abf8d

Browse files
committed
Add ObjectAssertions.WithDeclaredType.
1 parent bd5f61d commit b6abf8d

File tree

2 files changed

+52
-28
lines changed

2 files changed

+52
-28
lines changed

src/FluentAssertions.AspNetCore.Mvc/ObjectResultAssertionsBase.cs

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,21 +122,45 @@ public TObjectResultAssertion ContainsFormatter(Expression<Func<IOutputFormatter
122122
/// </param>
123123
public TObjectResultAssertion WithContentType(string expected, string reason = "", params object[] reasonArgs)
124124
{
125-
var formatters = ObjectResultSubject.ContentTypes;
125+
var contentTypes = ObjectResultSubject.ContentTypes;
126126

127-
if (formatters is null)
127+
if (contentTypes is null)
128128
{
129129
Execute.Assertion
130130
.BecauseOf(reason, reasonArgs)
131131
.WithDefaultIdentifier(Identifier + ".ContentTypes")
132-
.FailWith("Expected {context} to contain {0}{reason} but found {1}.", expected, formatters);
132+
.FailWith("Expected {context} to contain {0}{reason} but found {1}.", expected, contentTypes);
133133
}
134134

135135
Execute.Assertion
136-
.ForCondition(formatters.Contains(expected))
136+
.ForCondition(contentTypes.Contains(expected))
137137
.WithDefaultIdentifier(Identifier + ".ContentTypes")
138138
.BecauseOf(reason, reasonArgs)
139-
.FailWith("Expected {context} {0} to contain {1}{reason}.", formatters, expected);
139+
.FailWith("Expected {context} {0} to contain {1}{reason}.", contentTypes, expected);
140+
141+
return (TObjectResultAssertion)this;
142+
}
143+
144+
/// <summary>
145+
/// Asserts that the <see cref="ObjectResult.DeclaredType"/> contains the specified content type.
146+
/// </summary>
147+
/// <param name="expected">The expectation content type.</param>
148+
/// <param name="reason">
149+
/// A formatted phrase as is supported by <see cref="string.Format(string,object[])" /> explaining why the assertion
150+
/// is needed. If the phrase does not start with the word <i>because</i>, it is prepended automatically.
151+
/// </param>
152+
/// <param name="reasonArgs">
153+
/// Zero or more objects to format using the placeholders in <paramref name="reason"/>.
154+
/// </param>
155+
public TObjectResultAssertion WithDeclaredType(Type expected, string reason = "", params object[] reasonArgs)
156+
{
157+
var actual = ObjectResultSubject.DeclaredType;
158+
159+
Execute.Assertion
160+
.ForCondition(expected == actual)
161+
.WithDefaultIdentifier(Identifier + ".DeclaredType")
162+
.BecauseOf(reason, reasonArgs)
163+
.FailWith(FailureMessages.CommonTypeFailMessage, expected, actual);
140164

141165
return (TObjectResultAssertion)this;
142166
}

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

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public void BeContent_GivenContent_ShouldPass()
2727
public void BeContent_GivenNotContent_ShouldFail()
2828
{
2929
ActionResult result = new ViewResult();
30-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(ContentResult), typeof(ViewResult));
30+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(ContentResult), typeof(ViewResult));
3131

3232
Action a = () => result.Should().BeContentResult(Reason, ReasonArgs);
3333

@@ -47,7 +47,7 @@ public void BeEmpty_GivenEmpty_ShouldPass()
4747
public void BeEmpty_GivenNotEmpty_ShouldPass()
4848
{
4949
ActionResult result = new ViewResult();
50-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(EmptyResult), typeof(ViewResult));
50+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(EmptyResult), typeof(ViewResult));
5151

5252
Action a = () => result.Should().BeEmptyResult(Reason, ReasonArgs);
5353

@@ -68,7 +68,7 @@ public void BeFileResult_GivenFileResult_ShouldPass()
6868
public void BeFileResult_GivenNotFileResult_ShouldFail()
6969
{
7070
ActionResult result = new ViewResult();
71-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(FileResult), typeof(ViewResult));
71+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(FileResult), typeof(ViewResult));
7272

7373
Action a = () => result.Should().BeFileResult(Reason, ReasonArgs);
7474

@@ -89,7 +89,7 @@ public void BeFileContentResult_GivenFileContentResult_ShouldPass()
8989
public void BeFileContentResult_GivenNotFileContentResult_ShouldFail()
9090
{
9191
ActionResult result = new ViewResult();
92-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(FileContentResult), typeof(ViewResult));
92+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(FileContentResult), typeof(ViewResult));
9393

9494
Action a = () => result.Should().BeFileContentResult(Reason, ReasonArgs);
9595

@@ -110,7 +110,7 @@ public void BeFileStreamResult_GivenFileStreamResult_ShouldPass()
110110
public void BeFileStreamResult_GivenNotFileStreamResult_ShouldFail()
111111
{
112112
ActionResult result = new ViewResult();
113-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(FileStreamResult), typeof(ViewResult));
113+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(FileStreamResult), typeof(ViewResult));
114114

115115
Action a = () => result.Should().BeFileStreamResult(Reason, ReasonArgs);
116116

@@ -131,7 +131,7 @@ public void BePhysicalFileResult_GivenPhysicalFileResult_ShouldPass()
131131
public void BePhysicalFileResult_GivenNotPhysicalFileResult_ShouldFail()
132132
{
133133
ActionResult result = new ViewResult();
134-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(PhysicalFileResult), typeof(ViewResult));
134+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(PhysicalFileResult), typeof(ViewResult));
135135

136136
Action a = () => result.Should().BePhysicalFileResult(Reason, ReasonArgs);
137137

@@ -152,7 +152,7 @@ public void BeVirtualFileResult_GivenVirtualFileResult_ShouldPass()
152152
public void BeVirtualFileResult_GivenNotVirtualFileResult_ShouldFail()
153153
{
154154
ActionResult result = new ViewResult();
155-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(VirtualFileResult), typeof(ViewResult));
155+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(VirtualFileResult), typeof(ViewResult));
156156

157157
Action a = () => result.Should().BeVirtualFileResult(Reason, ReasonArgs);
158158

@@ -174,7 +174,7 @@ public void BeJson_GivenJson_ShouldPass()
174174
public void BeJson_GivenNotJson_ShouldFail()
175175
{
176176
ActionResult result = new ViewResult();
177-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(JsonResult), typeof(ViewResult));
177+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(JsonResult), typeof(ViewResult));
178178

179179
Action a = () => result.Should().BeJsonResult(Reason, ReasonArgs);
180180

@@ -194,7 +194,7 @@ public void BeRedirectToRoute_GivenRedirectToRoute_ShouldPass()
194194
public void BeRedirectToRoute_GivenNotRedirectToRoute_ShouldFail()
195195
{
196196
ActionResult result = new ViewResult();
197-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(RedirectToRouteResult), typeof(ViewResult));
197+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(RedirectToRouteResult), typeof(ViewResult));
198198

199199
Action a = () => result.Should().BeRedirectToRouteResult(Reason, ReasonArgs);
200200

@@ -214,7 +214,7 @@ public void BeRedirect_GivenRedirect_ShouldPass()
214214
public void BeRedirect_GivenNotRedirect_ShouldFail()
215215
{
216216
ActionResult result = new ViewResult();
217-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(RedirectResult), typeof(ViewResult));
217+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(RedirectResult), typeof(ViewResult));
218218

219219
Action a = () => result.Should().BeRedirectResult(Reason, ReasonArgs);
220220

@@ -234,7 +234,7 @@ public void BePartialView_GivenPartial_ShouldPass()
234234
public void BePartialView_GivenNotPartial_ShouldFail()
235235
{
236236
ActionResult result = new ViewResult();
237-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(PartialViewResult), typeof(ViewResult));
237+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(PartialViewResult), typeof(ViewResult));
238238

239239
Action a = () => result.Should().BePartialViewResult(Reason, ReasonArgs);
240240

@@ -254,7 +254,7 @@ public void BeView_GivenView_ShouldPass()
254254
public void BeView_GivenNotView_ShouldFail()
255255
{
256256
ActionResult result = new RedirectResult("/");
257-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(ViewResult), typeof(RedirectResult));
257+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(ViewResult), typeof(RedirectResult));
258258

259259
Action a = () => result.Should().BeViewResult(Reason, ReasonArgs);
260260

@@ -274,7 +274,7 @@ public void BeStatusCodeResult_GivenStatusCodeResult_ShouldPass()
274274
public void BeStatusCodeResult_GivenNotStatusCodeResult_ShouldFail()
275275
{
276276
ActionResult result = new ViewResult();
277-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(StatusCodeResult), typeof(ViewResult));
277+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(StatusCodeResult), typeof(ViewResult));
278278

279279
Action a = () => result.Should().BeStatusCodeResult(Reason, ReasonArgs);
280280

@@ -294,7 +294,7 @@ public void BeObjectResult_GivenObjectResult_ShouldPass()
294294
public void BeObjectResult_GivenNotObjectResult_ShouldFail()
295295
{
296296
ActionResult result = new ViewResult();
297-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(ObjectResult), typeof(ViewResult));
297+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(ObjectResult), typeof(ViewResult));
298298

299299
Action a = () => result.Should().BeObjectResult(Reason, ReasonArgs);
300300

@@ -314,7 +314,7 @@ public void BeOkResult_GivenOk_ShouldPass()
314314
public void BeOkResult_GivenNotOk_ShouldFail()
315315
{
316316
ActionResult result = new ViewResult();
317-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(OkResult), typeof(ViewResult));
317+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(OkResult), typeof(ViewResult));
318318

319319
Action a = () => result.Should().BeOkResult(Reason, ReasonArgs);
320320

@@ -334,7 +334,7 @@ public void BeBadRequestResult_GivenBadRequest_ShouldPass()
334334
public void BeBadRequestResult_GivenNotBadRequest_ShouldFail()
335335
{
336336
ActionResult result = new ViewResult();
337-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(BadRequestResult), typeof(ViewResult));
337+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(BadRequestResult), typeof(ViewResult));
338338

339339
Action a = () => result.Should().BeBadRequestResult(Reason, ReasonArgs);
340340

@@ -354,7 +354,7 @@ public void BeChallengeResult_GivenChallengeResult_ShouldPass()
354354
public void BeChallengeResult_GivenNotChallengeResult_ShouldFail()
355355
{
356356
ActionResult result = new ViewResult();
357-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(ChallengeResult), typeof(ViewResult));
357+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(ChallengeResult), typeof(ViewResult));
358358

359359
Action a = () => result.Should().BeChallengeResult(Reason, ReasonArgs);
360360

@@ -373,7 +373,7 @@ public void BeAcceptedResult_GivenAccepted_ShouldPass()
373373
public void BeAcceptedResult_GivenNotAccepted_ShouldFail()
374374
{
375375
ActionResult result = new ViewResult();
376-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(AcceptedResult), typeof(ViewResult));
376+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(AcceptedResult), typeof(ViewResult));
377377

378378
Action a = () => result.Should().BeAcceptedResult(Reason, ReasonArgs);
379379

@@ -393,7 +393,7 @@ public void BeNoContentResult_GivenNoContent_ShouldPass()
393393
public void BeNoContentResult_GivenNotNoContent_ShouldFail()
394394
{
395395
ActionResult result = new ViewResult();
396-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(NoContentResult), typeof(ViewResult));
396+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(NoContentResult), typeof(ViewResult));
397397

398398
Action a = () => result.Should().BeNoContentResult(Reason, ReasonArgs);
399399

@@ -413,7 +413,7 @@ public void BeNotFoundResult_GivenNotFound_ShouldPass()
413413
public void BeNotFoundResult_GivenNotNotFound_ShouldFail()
414414
{
415415
ActionResult result = new ViewResult();
416-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(NotFoundResult), typeof(ViewResult));
416+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(NotFoundResult), typeof(ViewResult));
417417

418418
Action a = () => result.Should().BeNotFoundResult(Reason, ReasonArgs);
419419

@@ -433,7 +433,7 @@ public void BeUnauthorizedResult_GivenUnauthorized_ShouldPass()
433433
public void BeUnauthorizedResult_GivenNotUnauthorized_ShouldFail()
434434
{
435435
ActionResult result = new ViewResult();
436-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(UnauthorizedResult), typeof(ViewResult));
436+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(UnauthorizedResult), typeof(ViewResult));
437437

438438
Action a = () => result.Should().BeUnauthorizedResult(Reason, ReasonArgs);
439439

@@ -453,7 +453,7 @@ public void BeSignOutResult_GivenSignOutResult_ShouldPass()
453453
public void BeSignOutResult_GivenNotSignOutResult_ShouldFail()
454454
{
455455
ActionResult result = new ViewResult();
456-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(SignOutResult), typeof(ViewResult));
456+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(SignOutResult), typeof(ViewResult));
457457

458458
Action a = () => result.Should().BeSignOutResult(Reason, ReasonArgs);
459459

@@ -474,7 +474,7 @@ public void BeLocalRedirectResult_GivenLocalRedirectResult_ShouldPass()
474474
public void BeLocalRedirectResult_GivenNotLocalRedirectResult_ShouldFail()
475475
{
476476
ActionResult result = new ViewResult();
477-
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundY("result", typeof(LocalRedirectResult), typeof(ViewResult));
477+
var failureMessage = FailureMessageHelper.ExpectedContextTypeXButFoundYWithReason("result", typeof(LocalRedirectResult), typeof(ViewResult));
478478

479479
Action a = () => result.Should().BeLocalRedirectResult(Reason, ReasonArgs);
480480

0 commit comments

Comments
 (0)