Skip to content

Commit 1740764

Browse files
committed
BadRequest result made chainable with IAndTestBuilder
1 parent f0ea8d3 commit 1740764

File tree

7 files changed

+54
-32
lines changed

7 files changed

+54
-32
lines changed

MyWebApi/Builders/Actions/ShouldReturnBadRequest.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,25 @@ public partial class ActionResultTestBuilder<TActionResult>
1616
/// Tests whether action result is BadRequestResult, InvalidModelStateResult or BadRequestErrorMessageResult.
1717
/// </summary>
1818
/// <returns>Bad request test builder.</returns>
19-
public IBadRequestTestBuilder ShouldReturnBadRequest()
19+
public IBadRequestTestBuilder<TActionResult> ShouldReturnBadRequest()
2020
{
2121
if (this.ActionResult as BadRequestResult != null)
2222
{
23-
return this.ReturnBadRequestTestBuilder<BadRequestResult>();
23+
return this.ReturnBadRequestTestBuilder<BadRequestResult>()
24+
as IBadRequestTestBuilder<TActionResult>;
2425
}
2526

2627
if (this.ActionResult as InvalidModelStateResult != null)
2728
{
28-
return this.ReturnBadRequestTestBuilder<InvalidModelStateResult>();
29+
return this.ReturnBadRequestTestBuilder<InvalidModelStateResult>()
30+
as IBadRequestTestBuilder<TActionResult>;
2931
}
3032

31-
return this.ReturnBadRequestTestBuilder<BadRequestErrorMessageResult>();
33+
return this.ReturnBadRequestTestBuilder<BadRequestErrorMessageResult>()
34+
as IBadRequestTestBuilder<TActionResult>;
3235
}
3336

34-
private IBadRequestTestBuilder ReturnBadRequestTestBuilder<TBadRequestResult>()
37+
private IBadRequestTestBuilder<TBadRequestResult> ReturnBadRequestTestBuilder<TBadRequestResult>()
3538
where TBadRequestResult : class
3639
{
3740
var badRequestResult = this.GetReturnObject<TBadRequestResult>();

MyWebApi/Builders/BadRequests/BadRequestErrorMessageTestBuilder.cs

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,33 @@
11
namespace MyWebApi.Builders.BadRequests
22
{
33
using System.Web.Http;
4-
4+
using System.Web.Http.Results;
55
using Base;
66
using Common.Extensions;
7+
using Contracts.And;
78
using Contracts.BadRequests;
89
using Exceptions;
910

1011
/// <summary>
1112
/// Used for testing specific bad request error messages.
1213
/// </summary>
13-
public class BadRequestErrorMessageTestBuilder : BaseTestBuilder, IBadRequestErrorMessageTestBuilder
14+
public class BadRequestErrorMessageTestBuilder<TBadRequestResult>
15+
: BaseTestBuilderWithActionResult<TBadRequestResult>, IBadRequestErrorMessageTestBuilder<TBadRequestResult>
1416
{
1517
private readonly string actualMessage;
1618

1719
/// <summary>
18-
/// Initializes a new instance of the <see cref="BadRequestErrorMessageTestBuilder" /> class.
20+
/// Initializes a new instance of the <see cref="BadRequestErrorMessageTestBuilder{TBadRequestResult}" /> class.
1921
/// </summary>
2022
/// <param name="controller">Controller on which the action will be tested.</param>
2123
/// <param name="actionName">Name of the tested action.</param>
2224
/// <param name="actualMessage">Actual error message received from bad request result.</param>
23-
public BadRequestErrorMessageTestBuilder(ApiController controller, string actionName, string actualMessage)
24-
: base(controller, actionName)
25+
public BadRequestErrorMessageTestBuilder(
26+
ApiController controller,
27+
string actionName,
28+
TBadRequestResult actionResult,
29+
string actualMessage)
30+
: base(controller, actionName, actionResult)
2531
{
2632
this.actualMessage = actualMessage;
2733
}
@@ -30,56 +36,64 @@ public BadRequestErrorMessageTestBuilder(ApiController controller, string action
3036
/// Tests whether particular error message is equal to given message.
3137
/// </summary>
3238
/// <param name="errorMessage">Expected error message for particular key.</param>
33-
public void ThatEquals(string errorMessage)
39+
public IAndTestBuilder<TBadRequestResult> ThatEquals(string errorMessage)
3440
{
3541
if (this.actualMessage != errorMessage)
3642
{
3743
this.ThrowNewBadRequestResultAssertionException(
3844
"When calling {0} action in {1} expected bad request error message to be '{2}', but instead found '{3}'.",
3945
errorMessage);
4046
}
47+
48+
return this.NewAndTestBuilder();
4149
}
4250

4351
/// <summary>
4452
/// Tests whether particular error message begins with given message.
4553
/// </summary>
4654
/// <param name="beginMessage">Expected beginning for particular error message.</param>
47-
public void BeginningWith(string beginMessage)
55+
public IAndTestBuilder<TBadRequestResult> BeginningWith(string beginMessage)
4856
{
4957
if (!this.actualMessage.StartsWith(beginMessage))
5058
{
5159
this.ThrowNewBadRequestResultAssertionException(
5260
"When calling {0} action in {1} expected bad request error message to begin with '{2}', but instead found '{3}'.",
5361
beginMessage);
5462
}
63+
64+
return this.NewAndTestBuilder();
5565
}
5666

5767
/// <summary>
5868
/// Tests whether particular error message ends with given message.
5969
/// </summary>
6070
/// <param name="endMessage">Expected ending for particular error message.</param>
61-
public void EndingWith(string endMessage)
71+
public IAndTestBuilder<TBadRequestResult> EndingWith(string endMessage)
6272
{
6373
if (!this.actualMessage.EndsWith(endMessage))
6474
{
6575
this.ThrowNewBadRequestResultAssertionException(
6676
"When calling {0} action in {1} expected bad request error message to end with '{2}', but instead found '{3}'.",
6777
endMessage);
6878
}
79+
80+
return this.NewAndTestBuilder();
6981
}
7082

7183
/// <summary>
7284
/// Tests whether particular error message contains given message.
7385
/// </summary>
7486
/// <param name="containsMessage">Expected containing string for particular error message.</param>
75-
public void Containing(string containsMessage)
87+
public IAndTestBuilder<TBadRequestResult> Containing(string containsMessage)
7688
{
7789
if (!this.actualMessage.Contains(containsMessage))
7890
{
7991
this.ThrowNewBadRequestResultAssertionException(
8092
"When calling {0} action in {1} expected bad request error message to contain '{2}', but instead found '{3}'.",
8193
containsMessage);
8294
}
95+
96+
return this.NewAndTestBuilder();
8397
}
8498

8599
private void ThrowNewBadRequestResultAssertionException(string messageFormat, string operation)

MyWebApi/Builders/BadRequests/BadRequestTestBuilder.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
using Base;
1010
using Common.Extensions;
11+
using Contracts.And;
1112
using Contracts.BadRequests;
1213
using Contracts.Models;
1314
using Exceptions;
@@ -18,7 +19,7 @@
1819
/// </summary>
1920
/// <typeparam name="TBadRequestResult">Type of bad request result - BadRequestResult, InvalidModelStateResult, BadRequestErrorMessageResult.</typeparam>
2021
public class BadRequestTestBuilder<TBadRequestResult> : BaseTestBuilderWithActionResult<TBadRequestResult>,
21-
IBadRequestTestBuilder
22+
IBadRequestTestBuilder<TBadRequestResult>
2223
{
2324
private const string ErrorMessage = "error message";
2425
private const string ModelStateDictionary = "model state dictionary";
@@ -41,28 +42,30 @@ public BadRequestTestBuilder(
4142
/// Tests bad request result with specific error message using test builder.
4243
/// </summary>
4344
/// <returns>Bad request with error message test builder.</returns>
44-
public IBadRequestErrorMessageTestBuilder WithErrorMessage()
45+
public IBadRequestErrorMessageTestBuilder<TBadRequestResult> WithErrorMessage()
4546
{
4647
var badRequestErrorMessageResult = this.GetBadRequestResult<BadRequestErrorMessageResult>(ErrorMessage);
47-
return new BadRequestErrorMessageTestBuilder(this.Controller, this.ActionName, badRequestErrorMessageResult.Message);
48+
return new BadRequestErrorMessageTestBuilder<TBadRequestResult>(this.Controller, this.ActionName, this.ActionResult, badRequestErrorMessageResult.Message);
4849
}
4950

5051
/// <summary>
5152
/// Tests bad request result with specific error message provided by string.
5253
/// </summary>
5354
/// <param name="message">Expected error message from bad request result.</param>
54-
public void WithErrorMessage(string message)
55+
public IAndTestBuilder<TBadRequestResult> WithErrorMessage(string message)
5556
{
5657
var badRequestErrorMessageResult = this.GetBadRequestResult<BadRequestErrorMessageResult>(ErrorMessage);
5758
var actualMessage = badRequestErrorMessageResult.Message;
5859
this.ValidateErrorMessage(message, actualMessage);
60+
61+
return this.NewAndTestBuilder();
5962
}
6063

6164
/// <summary>
6265
/// Tests bad request result with specific model state dictionary.
6366
/// </summary>
6467
/// <param name="modelState">Model state dictionary to deeply compare to the actual one.</param>
65-
public void WithModelState(ModelStateDictionary modelState)
68+
public IAndTestBuilder<TBadRequestResult> WithModelState(ModelStateDictionary modelState)
6669
{
6770
var invalidModelStateResult = this.GetBadRequestResult<InvalidModelStateResult>(ModelStateDictionary);
6871
var actualModelState = invalidModelStateResult.ModelState;
@@ -115,6 +118,8 @@ public void WithModelState(ModelStateDictionary modelState)
115118
this.ValidateErrorMessage(expectedError, actualError);
116119
}
117120
}
121+
122+
return this.NewAndTestBuilder();
118123
}
119124

120125
/// <summary>

MyWebApi/Builders/Base/BaseTestBuilder.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
namespace MyWebApi.Builders.Base
22
{
33
using System.Web.Http;
4-
54
using Common.Extensions;
6-
using Contracts;
75
using Contracts.Base;
86
using Exceptions;
97
using Utilities;

MyWebApi/Builders/Contracts/Actions/IActionResultTestBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public interface IActionResultTestBuilder<out TActionResult> : IBaseTestBuilderW
5858
/// Tests whether action result is BadRequestResult, InvalidModelStateResult or BadRequestErrorMessageResult.
5959
/// </summary>
6060
/// <returns>Bad request test builder.</returns>
61-
IBadRequestTestBuilder ShouldReturnBadRequest();
61+
IBadRequestTestBuilder<TActionResult> ShouldReturnBadRequest();
6262

6363
/// <summary>
6464
/// Tests whether action result is UnauthorizedResult.
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,34 @@
11
namespace MyWebApi.Builders.Contracts.BadRequests
22
{
3+
using And;
4+
35
/// <summary>
46
/// Used for testing specific bad request error messages.
57
/// </summary>
6-
public interface IBadRequestErrorMessageTestBuilder
8+
public interface IBadRequestErrorMessageTestBuilder<out TBadRequestResult>
79
{
810
/// <summary>
911
/// Tests whether particular error message is equal to given message.
1012
/// </summary>
1113
/// <param name="errorMessage">Expected error message for particular key.</param>
12-
void ThatEquals(string errorMessage);
14+
IAndTestBuilder<TBadRequestResult> ThatEquals(string errorMessage);
1315

1416
/// <summary>
1517
/// Tests whether particular error message begins with given message.
1618
/// </summary>
1719
/// <param name="beginMessage">Expected beginning for particular error message.</param>
18-
void BeginningWith(string beginMessage);
20+
IAndTestBuilder<TBadRequestResult> BeginningWith(string beginMessage);
1921

2022
/// <summary>
2123
/// Tests whether particular error message ends with given message.
2224
/// </summary>
2325
/// <param name="endMessage">Expected ending for particular error message.</param>
24-
void EndingWith(string endMessage);
26+
IAndTestBuilder<TBadRequestResult> EndingWith(string endMessage);
2527

2628
/// <summary>
2729
/// Tests whether particular error message contains given message.
2830
/// </summary>
2931
/// <param name="containsMessage">Expected containing string for particular error message.</param>
30-
void Containing(string containsMessage);
32+
IAndTestBuilder<TBadRequestResult> Containing(string containsMessage);
3133
}
3234
}

MyWebApi/Builders/Contracts/BadRequests/IBadRequestTestBuilder.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
11
namespace MyWebApi.Builders.Contracts.BadRequests
22
{
33
using System.Web.Http.ModelBinding;
4-
4+
using And;
55
using Models;
66

77
/// <summary>
88
/// Used for testing bad request results.
99
/// </summary>
10-
public interface IBadRequestTestBuilder
10+
public interface IBadRequestTestBuilder<out TBadRequestResult>
1111
{
1212
/// <summary>
1313
/// Tests bad request result with specific error message using test builder.
1414
/// </summary>
1515
/// <returns>Bad request with error message test builder.</returns>
16-
IBadRequestErrorMessageTestBuilder WithErrorMessage();
16+
IBadRequestErrorMessageTestBuilder<TBadRequestResult> WithErrorMessage();
1717

1818
/// <summary>
1919
/// Tests bad request result with specific error message provided by string.
2020
/// </summary>
2121
/// <param name="message">Expected error message from bad request result.</param>
22-
void WithErrorMessage(string message);
22+
IAndTestBuilder<TBadRequestResult> WithErrorMessage(string message);
2323

2424
/// <summary>
2525
/// Tests bad request result with specific model state dictionary.
2626
/// </summary>
2727
/// <param name="modelState">Model state dictionary to deeply compare to the actual one.</param>
28-
void WithModelState(ModelStateDictionary modelState);
28+
IAndTestBuilder<TBadRequestResult> WithModelState(ModelStateDictionary modelState);
2929

3030
/// <summary>
3131
/// Tests bad request result for model state errors using test builder.

0 commit comments

Comments
 (0)