Skip to content

Commit 22d828a

Browse files
committed
Add Sample test. rename BeConvertibleTo and fix it, Direct Should on ActionResultOfT
1 parent 7e7749e commit 22d828a

File tree

7 files changed

+93
-22
lines changed

7 files changed

+93
-22
lines changed

samples/FluentAssertions.AspNetCore.Mvc.Sample.Tests/ProductController_Tests.cs

+31
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using FluentAssertions.AspNetCore.Mvc.Sample.Controllers;
2+
using Microsoft.AspNetCore.Mvc;
3+
using System;
24
using Xunit;
35

46
namespace FluentAssertions.AspNetCore.Mvc.Sample.Tests
@@ -13,5 +15,34 @@ public void List_ShouldReturnView()
1315
.BeViewResult()
1416
.WithViewName("Index");
1517
}
18+
19+
[Fact]
20+
public void GetActionResultOfT_OnFalse_Returns_Data()
21+
{
22+
var controller = new ProductController();
23+
var model = new Models.ProductViewModel { Id = 1, Name = "Text" };
24+
var returnError = false;
25+
26+
var result = controller.GetActionResultOfT(model, returnError);
27+
28+
result.Should().BeConvertibleTo<ObjectResult>()
29+
.And.Value.Should().BeSameAs(model);
30+
}
31+
32+
[Fact]
33+
public void GetActionResultOfT_OnTrue_Returns_BadRequest()
34+
{
35+
var controller = new ProductController();
36+
var model = new Models.ProductViewModel { Id = 1, Name = "Text" };
37+
var returnError = true;
38+
39+
var result = controller.GetActionResultOfT(model, returnError);
40+
41+
result.Should().BeConvertibleTo<BadRequestObjectResult>()
42+
.Which.Value.Should().BeSameAs(model);
43+
44+
result.Should().BeConvertibleTo<BadRequestObjectResult>()
45+
.Which.Should().BeBadRequestObjectResult();
46+
}
1647
}
1748
}

samples/FluentAssertions.AspNetCore.Mvc.Sample/Controllers/ProductController.cs

+15-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Microsoft.AspNetCore.Mvc;
1+
using FluentAssertions.AspNetCore.Mvc.Sample.Models;
2+
using Microsoft.AspNetCore.Mvc;
23

34
namespace FluentAssertions.AspNetCore.Mvc.Sample.Controllers
45
{
@@ -9,5 +10,18 @@ public IActionResult List()
910
{
1011
return View("Index");
1112
}
13+
14+
#region ActionResult<T>
15+
[HttpGet]
16+
public ActionResult<ProductViewModel> GetActionResultOfT(
17+
ProductViewModel data, bool error)
18+
{
19+
if (error)
20+
{
21+
return BadRequest(data);
22+
}
23+
return data;
24+
}
25+
#endregion
1226
}
1327
}

src/FluentAssertions.AspNetCore.Mvc/ActionResultAssertionsOfTValue.cs

+11-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using FluentAssertions.Execution;
22
using FluentAssertions.Primitives;
33
using Microsoft.AspNetCore.Mvc;
4+
using Microsoft.AspNetCore.Mvc.Infrastructure;
45
using System.Diagnostics;
56

67
namespace FluentAssertions.AspNetCore.Mvc
@@ -61,16 +62,22 @@ public ActionResultAssertions(ActionResult<TValue> subject)
6162
/// the result of Result converted to <typeparamref name="TActionResult"/>.
6263
/// </returns>
6364
[CustomAssertion]
64-
public AndWhichConstraint<ActionResultAssertions<TValue>, TActionResult> ConvertibleTo<TActionResult>(
65+
public AndWhichConstraint<ActionResultAssertions<TValue>, TActionResult> BeConvertibleTo<TActionResult>(
6566
string reason = "", params object[] reasonArgs)
6667
where TActionResult : ActionResult
6768
{
69+
var convertResult = ((IConvertToActionResult)Subject).Convert();
6870
Execute.Assertion
6971
.BecauseOf(reason, reasonArgs)
70-
.ForCondition(Result.GetType() == typeof(TActionResult))
71-
.FailWith(FailureMessages.ConvertibleActionFailMessage, typeof(TActionResult), Result.GetType());
72+
.ForCondition(convertResult != null)
73+
.FailWith(FailureMessages.ConvertibleActionFailMessage, typeof(TActionResult), null);
7274

73-
return new AndWhichConstraint<ActionResultAssertions<TValue>, TActionResult>(this, (TActionResult)Result);
75+
Execute.Assertion
76+
.BecauseOf(reason, reasonArgs)
77+
.ForCondition(convertResult.GetType() == typeof(TActionResult))
78+
.FailWith(FailureMessages.ConvertibleActionFailMessage, typeof(TActionResult), convertResult.GetType());
79+
80+
return new AndWhichConstraint<ActionResultAssertions<TValue>, TActionResult>(this, (TActionResult)convertResult);
7481
}
7582
}
7683
#endregion Public Methods

src/FluentAssertions.AspNetCore.Mvc/AssertionsExtensions.cs

+10
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,15 @@ public static ConvertToActionResultAssertions Should(this IConvertToActionResult
4646
{
4747
return new ConvertToActionResultAssertions(actual);
4848
}
49+
50+
51+
/// <summary>
52+
/// Returns an <see cref="ActionResultAssertions{TValue}"/> object that can be used to assert the
53+
/// current <see cref="ActionResult{TValue}"/>.
54+
/// </summary>
55+
public static ActionResultAssertions<TValue> Should<TValue>(this ActionResult<TValue> actual)
56+
{
57+
return new ActionResultAssertions<TValue>(actual);
58+
}
4959
}
5060
}

src/FluentAssertions.AspNetCore.Mvc/ConvertToActionResultAssertions.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public ActionResultAssertions<TValue> BeActionResult<TValue>(string reason = "",
7272
/// the result of Convert() converted to <typeparamref name="TActionResult"/>.
7373
/// </returns>
7474
[CustomAssertion]
75-
public AndWhichConstraint<ConvertToActionResultAssertions, TActionResult> ConvertibleTo<TActionResult>(
75+
public AndWhichConstraint<ConvertToActionResultAssertions, TActionResult> BeConvertibleTo<TActionResult>(
7676
string reason = "", params object[] reasonArgs)
7777
where TActionResult : class, IActionResult
7878
{

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

+17-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using FluentAssertions.Mvc.Tests.Helpers;
22
using Microsoft.AspNetCore.Mvc;
3+
using Microsoft.AspNetCore.Mvc.Infrastructure;
34
using System;
45
using Xunit;
56

@@ -18,7 +19,7 @@ public void Result_GivenActionResultOfTValue_ShouldReturnSameValue()
1819
var actionResult = new BadRequestResult();
1920
var result = new ActionResult<object>(actionResult);
2021

21-
result.Should().BeActionResult<object>().Result.Should().BeSameAs(actionResult);
22+
result.Should().Result.Should().BeSameAs(actionResult);
2223
}
2324

2425
[Fact]
@@ -27,39 +28,47 @@ public void Value_GivenAValue_ShouldReturnSameValue()
2728
var theValue = new object();
2829
var result = new ActionResult<object>(theValue);
2930

30-
result.Should().BeActionResult<object>().Value.Should().BeSameAs(theValue);
31+
result.Should().Value.Should().BeSameAs(theValue);
3132
}
3233

3334
[Fact]
34-
public void ConvertibleTo_CallingConvertResultsDifferentType_ShouldFail()
35+
public void BeConvertibleTo_CallingConvertResultsDifferentType_ShouldFail()
3536
{
3637
var result = new ActionResult<object>(new BadRequestObjectResult(new object()));
3738
var failureMessage = FailureMessageHelper.ExpectedContextToBeConvertible(
3839
"result", typeof(ActionResult).FullName, typeof(BadRequestObjectResult).FullName);
3940

40-
Action action = () => result.Should().BeActionResult<object>().ConvertibleTo<ActionResult>(Reason, ReasonArgs);
41+
Action action = () => result.Should().BeConvertibleTo<ActionResult>(Reason, ReasonArgs);
4142

4243
action.Should().Throw<Exception>()
4344
.WithMessage(failureMessage);
4445

4546
}
4647

4748
[Fact]
48-
public void ConvertibleTo_CallingConvertResultsGoodType_ShouldPass()
49+
public void BeConvertibleTo_CallingConvertResultsGoodType_ShouldPass()
4950
{
5051
var result = new ActionResult<object>(new OkObjectResult(new object()));
5152

52-
result.Should().BeActionResult<object>().ConvertibleTo<OkObjectResult>(Reason, ReasonArgs);
53+
result.Should().BeConvertibleTo<OkObjectResult>(Reason, ReasonArgs);
5354
}
5455

5556
[Fact]
56-
public void ConvertibleToWich_ShouldBeTheConvertedObject()
57+
public void BeConvertibleTo_WithNullResult_ShouldPass()
58+
{
59+
var result = new ActionResult<object>(new object());
60+
61+
result.Should().BeConvertibleTo<ObjectResult>(Reason, ReasonArgs);
62+
}
63+
64+
[Fact]
65+
public void BeConvertibleTo_ShouldBeTheConvertedObject()
5766
{
5867
OkObjectResult expectation = new OkObjectResult(new object());
5968
var result = new ActionResult<object>(expectation);
6069

6170
var actual =
62-
result.Should().BeActionResult<object>().ConvertibleTo<OkObjectResult>(Reason, ReasonArgs).Which;
71+
result.Should().BeConvertibleTo<OkObjectResult>(Reason, ReasonArgs).Which;
6372

6473
actual.Should().BeSameAs(expectation);
6574
}

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

+8-8
Original file line numberDiff line numberDiff line change
@@ -72,57 +72,57 @@ public void BeActionResult_GivenUnexpectedType_ShouldFail()
7272
}
7373

7474
[Fact]
75-
public void ConvertibleTo_CallingConvertResultsNull_ShouldFail()
75+
public void BeConvertibleTo_CallingConvertResultsNull_ShouldFail()
7676
{
7777
var mock = new Mock<IConvertToActionResult>();
7878
mock.Setup(e => e.Convert()).Returns((IActionResult)null);
7979
var result = mock.Object;
8080
var failureMessage = FailureMessageHelper.ExpectedContextToBeConvertible(
8181
"result", typeof(ActionResult).FullName, "<null>");
8282

83-
Action action = () => result.Should().ConvertibleTo<ActionResult>(Reason, ReasonArgs);
83+
Action action = () => result.Should().BeConvertibleTo<ActionResult>(Reason, ReasonArgs);
8484

8585
action.Should().Throw<Exception>()
8686
.WithMessage(failureMessage);
8787

8888
}
8989

9090
[Fact]
91-
public void ConvertibleTo_CallingConvertResultsDifferentType_ShouldFail()
91+
public void BeConvertibleTo_CallingConvertResultsDifferentType_ShouldFail()
9292
{
9393
var mock = new Mock<IConvertToActionResult>();
9494
mock.Setup(e => e.Convert()).Returns(new BadRequestObjectResult(new object()));
9595
var result = mock.Object;
9696
var failureMessage = FailureMessageHelper.ExpectedContextToBeConvertible(
9797
"result", typeof(ActionResult).FullName, typeof(BadRequestObjectResult).FullName);
9898

99-
Action action = () => result.Should().ConvertibleTo<ActionResult>(Reason, ReasonArgs);
99+
Action action = () => result.Should().BeConvertibleTo<ActionResult>(Reason, ReasonArgs);
100100

101101
action.Should().Throw<Exception>()
102102
.WithMessage(failureMessage);
103103

104104
}
105105

106106
[Fact]
107-
public void ConvertibleTo_CallingConvertResultsGoodType_ShouldPass()
107+
public void BeConvertibleTo_CallingConvertResultsGoodType_ShouldPass()
108108
{
109109
var mock = new Mock<IConvertToActionResult>();
110110
mock.Setup(e => e.Convert()).Returns(new OkObjectResult(new object()));
111111
var result = mock.Object;
112112

113-
result.Should().ConvertibleTo<OkObjectResult>(Reason, ReasonArgs);
113+
result.Should().BeConvertibleTo<OkObjectResult>(Reason, ReasonArgs);
114114
}
115115

116116
[Fact]
117-
public void ConvertibleToWich_ShouldBeTheConvertedObject()
117+
public void BeConvertibleTo_ShouldBeTheConvertedObject()
118118
{
119119
var mock = new Mock<IConvertToActionResult>();
120120
var expectation = new OkObjectResult(new object());
121121
mock.Setup(e => e.Convert()).Returns(expectation);
122122
var result = mock.Object;
123123

124124
var actual =
125-
result.Should().ConvertibleTo<OkObjectResult>(Reason, ReasonArgs).Which;
125+
result.Should().BeConvertibleTo<OkObjectResult>(Reason, ReasonArgs).Which;
126126

127127
actual.Should().BeSameAs(expectation);
128128
}

0 commit comments

Comments
 (0)