Skip to content

Commit 7896bbd

Browse files
committed
Added unit tests for newly mocked properties and link generation (#238)
1 parent 0aa4eb4 commit 7896bbd

File tree

7 files changed

+92
-9
lines changed

7 files changed

+92
-9
lines changed

src/MyTested.WebApi.Tests/BuildersTests/AttributesTests/ControllerAttributesTestBuilderTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ public void ChangingRoutePrefixToShouldNotThrowExceptionWithCorrectTheAttribute(
123123
MyWebApi
124124
.Controller<WebApiController>()
125125
.ShouldHave()
126-
.Attributes(attributes => attributes.ChangingRoutePrefixTo("/api/test"));
126+
.Attributes(attributes => attributes.ChangingRoutePrefixTo("api/test"));
127127
}
128128

129129
[Test]
@@ -132,19 +132,19 @@ public void ChangingRoutePrefixToShouldNotThrowExceptionWithCorrectTheAttributeA
132132
MyWebApi
133133
.Controller<WebApiController>()
134134
.ShouldHave()
135-
.Attributes(attributes => attributes.ChangingRoutePrefixTo("/api/Test"));
135+
.Attributes(attributes => attributes.ChangingRoutePrefixTo("api/Test"));
136136
}
137137

138138
[Test]
139139
[ExpectedException(
140140
typeof(AttributeAssertionException),
141-
ExpectedMessage = "When testing WebApiController was expected to have RoutePrefixAttribute with '/api/another' prefix, but in fact found '/api/test'.")]
141+
ExpectedMessage = "When testing WebApiController was expected to have RoutePrefixAttribute with 'api/another' prefix, but in fact found 'api/test'.")]
142142
public void ChangingRoutePrefixToShouldThrowExceptionWithControllerWithTheAttributeAndWrongPrefix()
143143
{
144144
MyWebApi
145145
.Controller<WebApiController>()
146146
.ShouldHave()
147-
.Attributes(attributes => attributes.ChangingRoutePrefixTo("/api/another"));
147+
.Attributes(attributes => attributes.ChangingRoutePrefixTo("api/another"));
148148
}
149149

150150
[Test]
@@ -156,7 +156,7 @@ public void ChangingActionNameToShouldThrowExceptionWithActionWithoutTheAttribut
156156
MyWebApi
157157
.Controller<AttributesController>()
158158
.ShouldHave()
159-
.Attributes(attributes => attributes.ChangingRoutePrefixTo("/api/test"));
159+
.Attributes(attributes => attributes.ChangingRoutePrefixTo("api/test"));
160160
}
161161

162162
[Test]

src/MyTested.WebApi.Tests/BuildersTests/ControllersTests/ControllerBuilderTests.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ namespace MyTested.WebApi.Tests.BuildersTests.ControllersTests
1212
using System.Web.Http.Results;
1313
using Builders.Contracts.Actions;
1414
using Builders.Contracts.Base;
15+
using Common.Servers;
1516
using Exceptions;
1617
using NUnit.Framework;
1718
using Setups;
@@ -420,6 +421,39 @@ public void WithHttpConfigurationShouldOverrideTheDefaultOne()
420421
Assert.AreSame(config, controllerConfigFromApi);
421422
}
422423

424+
[Test]
425+
public void LinkGenerationShouldWorkCorrectlyWithDefaultConfiguration()
426+
{
427+
MyWebApi.IsUsingDefaultHttpConfiguration();
428+
429+
MyWebApi
430+
.Controller<WebApiController>()
431+
.Calling(c => c.WithGeneratedLink(1))
432+
.ShouldReturn()
433+
.Created()
434+
.AtLocation("http://localhost/api/test?id=1");
435+
436+
MyWebApi.IsUsing(TestObjectFactory.GetHttpConfigurationWithRoutes());
437+
}
438+
439+
[Test]
440+
public void LinkGenerationShouldWorkCorrectlyWithCustomBaseAddress()
441+
{
442+
MyWebApi
443+
.IsUsingDefaultHttpConfiguration()
444+
.WithBaseAddress("http://mytestedasp.net");
445+
446+
MyWebApi
447+
.Controller<WebApiController>()
448+
.Calling(c => c.WithGeneratedLink(1))
449+
.ShouldReturn()
450+
.Created()
451+
.AtLocation("http://mytestedasp.net/api/test?id=1");
452+
453+
RemoteServer.DisposeGlobal();
454+
MyWebApi.IsUsing(TestObjectFactory.GetHttpConfigurationWithRoutes());
455+
}
456+
423457
private void CheckActionResultTestBuilder<TActionResult>(
424458
IActionResultTestBuilder<TActionResult> actionResultTestBuilder,
425459
string expectedActionName)

src/MyTested.WebApi.Tests/BuildersTests/HttpConfigurationBuilderTests.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,28 @@ public void DefaultErrorDetailPolicyShouldBeAlways()
3838
MyWebApi.IsUsing(TestObjectFactory.GetHttpConfigurationWithRoutes());
3939
}
4040

41+
[Test]
42+
public void WithBaseAddressShouldChangedDefaultAddress()
43+
{
44+
Assert.IsFalse(RemoteServer.GlobalIsConfigured);
45+
Assert.AreEqual(MyWebApi.DefaultHost, MyWebApi.BaseAddress);
46+
47+
string address = "http://mytestedasp.net";
48+
49+
MyWebApi
50+
.IsUsingDefaultHttpConfiguration()
51+
.WithBaseAddress(address);
52+
53+
Assert.AreEqual(address, MyWebApi.BaseAddress);
54+
Assert.IsTrue(RemoteServer.GlobalIsConfigured);
55+
56+
MyWebApi.IsUsing(TestObjectFactory.GetHttpConfigurationWithRoutes());
57+
58+
Assert.AreEqual(MyWebApi.DefaultHost, MyWebApi.BaseAddress);
59+
60+
RemoteServer.DisposeGlobal();
61+
}
62+
4163
[Test]
4264
public void WithErrorDetailPolicyShouldSetCorrectErrorDetailPolicy()
4365
{

src/MyTested.WebApi.Tests/MyWebApiTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ public void IsUsingDefaultConfigurationShouldWorkCorrectly()
124124
MyWebApi.IsUsingDefaultHttpConfiguration();
125125

126126
Assert.IsNotNull(MyWebApi.Configuration);
127-
Assert.AreEqual(0, MyWebApi.Configuration.Routes.Count);
127+
Assert.IsTrue(MyWebApi.Configuration.Routes.ContainsKey("API Default"));
128128

129129
MyWebApi.IsUsing(TestObjectFactory.GetHttpConfigurationWithRoutes());
130130
}

src/MyTested.WebApi.Tests/Setups/Controllers/WebApiController.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ namespace MyTested.WebApi.Tests.Setups.Controllers
2020
using Services;
2121

2222
[Authorize(Roles = "Admin,Moderator", Users = "John,George")]
23-
[RoutePrefix("/api/test")]
23+
[RoutePrefix("api/test")]
2424
internal class WebApiController : ApiController
2525
{
2626
private readonly ICollection<ResponseModel> responseModel;
@@ -70,6 +70,12 @@ public ICollection<ResponseModel> ResponseModel
7070

7171
public RequestModel InjectedRequestModel { get; private set; }
7272

73+
public IHttpActionResult WithGeneratedLink(int id)
74+
{
75+
var link = this.Url.Link("TestRouteAttributes", new { id = 1 });
76+
return this.Created(link, "content");
77+
}
78+
7379
public IHttpActionResult CustomRequestAction()
7480
{
7581
if (this.Request.Method == HttpMethod.Post && this.Request.Headers.Contains("TestHeader"))

src/MyTested.WebApi/Builders/HttpConfigurationBuilder.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace MyTested.WebApi.Builders
66
{
77
using System.Web.Http;
8+
using Common.Servers;
89
using Contracts;
910
using Servers;
1011

@@ -53,6 +54,12 @@ public IHttpConfigurationBuilder WithErrorDetailPolicy(IncludeErrorDetailPolicy
5354
public IHttpConfigurationBuilder WithBaseAddress(string baseAddress)
5455
{
5556
MyWebApi.BaseAddress = baseAddress;
57+
58+
if (!RemoteServer.GlobalIsConfigured)
59+
{
60+
RemoteServer.ConfigureGlobal(baseAddress);
61+
}
62+
5663
return this;
5764
}
5865

src/MyTested.WebApi/MyWebApi.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,28 @@ static MyWebApi()
4444
/// <value>Instance of HttpConfiguration.</value>
4545
public static HttpConfiguration Configuration { get; private set; }
4646

47-
internal static string BaseAddress { get; set; }
47+
/// <summary>
48+
/// Gets the current base address used in the testing.
49+
/// </summary>
50+
/// <value>Instance of String.</value>
51+
public static string BaseAddress { get; internal set; }
4852

4953
/// <summary>
5054
/// Sets the default HttpConfiguration which will be used in all tests.
5155
/// </summary>
5256
/// <returns>HTTP configuration builder.</returns>
5357
public static IHttpConfigurationBuilder IsUsingDefaultHttpConfiguration()
5458
{
55-
return IsUsing(new HttpConfiguration());
59+
var config = new HttpConfiguration();
60+
61+
config.MapHttpAttributeRoutes();
62+
63+
config.Routes.MapHttpRoute(
64+
name: "API Default",
65+
routeTemplate: "api/{controller}/{id}",
66+
defaults: new { id = RouteParameter.Optional });
67+
68+
return IsUsing(config);
5669
}
5770

5871
/// <summary>
@@ -63,6 +76,7 @@ public static IHttpConfigurationBuilder IsUsingDefaultHttpConfiguration()
6376
public static IHttpConfigurationBuilder IsUsing(HttpConfiguration httpConfiguration)
6477
{
6578
Configuration = httpConfiguration;
79+
BaseAddress = DefaultHost;
6680
return new HttpConfigurationBuilder(httpConfiguration);
6781
}
6882

0 commit comments

Comments
 (0)