Skip to content

Commit a1a8a60

Browse files
committed
Added .EqualTo extension method to .ActionResult<TResult> assertion chain (closes #359)
1 parent ca4f839 commit a1a8a60

File tree

2 files changed

+82
-0
lines changed

2 files changed

+82
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
namespace MyTested.AspNetCore.Mvc
2+
{
3+
using Builders.ActionResults.ActionResult;
4+
using Builders.Contracts.ActionResults.ActionResult;
5+
using Utilities.Validators;
6+
7+
/// <summary>
8+
/// Contains extension methods for <see cref="IActionResultOfTTestBuilder{TResult}"/>.
9+
/// </summary>
10+
public static class ActionResultOfTTestBuilderExtensions
11+
{
12+
/// <summary>
13+
/// Tests whether the <see cref="Microsoft.AspNetCore.Mvc.ActionResult{TResult}"/>
14+
/// has a result deeply equal to the provided one.
15+
/// </summary>
16+
/// <typeparam name="TResult">Type of the expected result.</typeparam>
17+
/// <param name="actionResultTestBuilder">
18+
/// Instance of <see cref="IActionResultOfTTestBuilder{TResult}"/> type.
19+
/// </param>
20+
/// <param name="result">Expected result object.</param>
21+
/// <returns>The same <see cref="IAndActionResultOfTTestBuilder{TResult}"/>.</returns>
22+
public static IAndActionResultOfTTestBuilder<TResult> EqualTo<TResult>(
23+
this IActionResultOfTTestBuilder<TResult> actionResultTestBuilder,
24+
TResult result)
25+
{
26+
var actualBuilder = (ActionResultOfTTestBuilder<TResult>)actionResultTestBuilder;
27+
28+
InvocationResultValidator.ValidateInvocationResult(
29+
actualBuilder.TestContext,
30+
result,
31+
canBeAssignable: true);
32+
33+
return actualBuilder;
34+
}
35+
}
36+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
namespace MyTested.AspNetCore.Mvc.Test.BuildersTests.ActionResultsTests.ActionResultTests
2+
{
3+
using Exceptions;
4+
using Setups;
5+
using Setups.Controllers;
6+
using Setups.Models;
7+
using Xunit;
8+
9+
public class ActionResultOfTTestBuilderTests
10+
{
11+
[Fact]
12+
public void ShouldReturnActionResultOfTWithDetailsShouldNotThrowExceptionWithEqualResult()
13+
{
14+
MyController<MvcController>
15+
.Instance()
16+
.Calling(c => c.ActionResultOfT(1))
17+
.ShouldReturn()
18+
.ActionResult<ResponseModel>(result => result
19+
.EqualTo(new ResponseModel
20+
{
21+
IntegerValue = 1,
22+
StringValue = "Test"
23+
}));
24+
}
25+
26+
[Fact]
27+
public void ShouldReturnActionResultOfTWithDetailsShouldThrowExceptionWithIncorrectResult()
28+
{
29+
Test.AssertException<ResponseModelAssertionException>(
30+
() =>
31+
{
32+
MyController<MvcController>
33+
.Instance()
34+
.Calling(c => c.ActionResultOfT(1))
35+
.ShouldReturn()
36+
.ActionResult<ResponseModel>(result => result
37+
.EqualTo(new ResponseModel
38+
{
39+
IntegerValue = 2,
40+
StringValue = "Test"
41+
}));
42+
},
43+
"When calling ActionResultOfT action in MvcController expected the response model to be the given model, but in fact it was a different one. Difference occurs at 'ResponseModel.IntegerValue'. Expected a value of '2', but in fact it was '1'.");
44+
}
45+
}
46+
}

0 commit comments

Comments
 (0)