Skip to content

Commit bb65ba8

Browse files
committed
Add tests for web api configuration
1 parent 04ff0a5 commit bb65ba8

6 files changed

Lines changed: 135 additions & 21 deletions

File tree

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
using BeekmanLabs.UnitTesting;
2+
using IntegrationEngine.Api;
3+
using IntegrationEngine.Core.Configuration;
4+
using Microsoft.Owin.Hosting;
5+
using Microsoft.Practices.Unity;
6+
using NUnit.Framework;
7+
using Owin;
8+
using System;
9+
using System.Collections.Generic;
10+
using System.Linq;
11+
using System.Web.Http;
12+
using System.Web.Http.Cors;
13+
using Moq;
14+
using System.Web.Http.Routing;
15+
16+
namespace IntegrationEngine.Tests
17+
{
18+
public class WebApiApplicationTest : TestBase<WebApiApplication>
19+
{
20+
21+
[Test]
22+
public void ShouldSetDependencyResolver()
23+
{
24+
var expected = new ContainerResolver();
25+
Subject.ContainerResolver = expected;
26+
27+
var httpConfiguration = Subject.HttpConfigurationFactory();
28+
29+
Assert.That(httpConfiguration.DependencyResolver, Is.SameAs(expected));
30+
}
31+
32+
[Test]
33+
public void ShouldConfigureCors()
34+
{
35+
var webApiConfiguration = new WebApiConfiguration() {
36+
Origins = new List<string> { "*" },
37+
};
38+
Subject.WebApiConfiguration = webApiConfiguration;
39+
Subject.ContainerResolver = new ContainerResolver();
40+
41+
var httpConfiguration = Subject.HttpConfigurationFactory();
42+
43+
var policyProviderFactory = (httpConfiguration.GetCorsPolicyProviderFactory() as AttributeBasedPolicyProviderFactory);
44+
Assert.That(policyProviderFactory.DefaultPolicyProvider, Is.Not.Null);
45+
}
46+
47+
[Test]
48+
public void ShouldConfigureRoutes()
49+
{
50+
var expected = new ContainerResolver();
51+
Subject.ContainerResolver = expected;
52+
53+
var httpConfiguration = Subject.HttpConfigurationFactory();
54+
55+
Assert.That(httpConfiguration.Routes.Count, Is.EqualTo(2));
56+
IHttpRoute defaultHttpRoute;
57+
httpConfiguration.Routes.TryGetValue("DefaultApi", out defaultHttpRoute);
58+
Assert.That(defaultHttpRoute.RouteTemplate, Is.EqualTo("api/{controller}/{id}"));
59+
Assert.That(defaultHttpRoute.Defaults.Keys.Contains("id"), Is.True);
60+
Assert.That(httpConfiguration.Routes.ContainsKey("MS_attributerouteWebApi"), Is.True);
61+
}
62+
}
63+
}

IntegrationEngine.Tests/IntegrationEngine.Tests.csproj

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,27 @@
105105
<Reference Include="NLog">
106106
<HintPath>..\packages\NLog.3.2.0.0\lib\net45\NLog.dll</HintPath>
107107
</Reference>
108+
<Reference Include="Owin">
109+
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
110+
</Reference>
111+
<Reference Include="Microsoft.Owin">
112+
<HintPath>..\packages\Microsoft.Owin.3.0.1\lib\net45\Microsoft.Owin.dll</HintPath>
113+
</Reference>
114+
<Reference Include="System.Web.Cors">
115+
<HintPath>..\packages\Microsoft.AspNet.Cors.5.2.3\lib\net45\System.Web.Cors.dll</HintPath>
116+
</Reference>
117+
<Reference Include="System.Web.Http.Cors">
118+
<HintPath>..\packages\Microsoft.AspNet.WebApi.Cors.5.2.3\lib\net45\System.Web.Http.Cors.dll</HintPath>
119+
</Reference>
120+
<Reference Include="System.Web.Http.Owin">
121+
<HintPath>..\packages\Microsoft.AspNet.WebApi.Owin.5.2.3\lib\net45\System.Web.Http.Owin.dll</HintPath>
122+
</Reference>
123+
<Reference Include="Microsoft.Owin.Hosting">
124+
<HintPath>..\packages\Microsoft.Owin.Hosting.3.0.0\lib\net45\Microsoft.Owin.Hosting.dll</HintPath>
125+
</Reference>
126+
<Reference Include="Microsoft.Owin.Host.HttpListener">
127+
<HintPath>..\packages\Microsoft.Owin.Host.HttpListener.3.0.1\lib\net45\Microsoft.Owin.Host.HttpListener.dll</HintPath>
128+
</Reference>
108129
</ItemGroup>
109130
<ItemGroup>
110131
<Compile Include="Properties\AssemblyInfo.cs" />
@@ -115,6 +136,7 @@
115136
<Compile Include="Api\TriggerStub.cs" />
116137
<Compile Include="EngineHostCompositionRootTest.cs" />
117138
<Compile Include="JobProcessor\ThreadedListenerManagerTest.cs" />
139+
<Compile Include="Api\WebApiApplicationTest.cs" />
118140
</ItemGroup>
119141
<ItemGroup>
120142
<None Include="..\configuration\IntegrationEngine.json">

IntegrationEngine.Tests/packages.config

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,21 @@
77
<package id="Elasticsearch.Net" version="1.4.1" targetFramework="net45" />
88
<package id="EntityFramework" version="6.1.2" targetFramework="net45" />
99
<package id="FX.Configuration" version="0.4.1" targetFramework="net45" />
10+
<package id="Microsoft.AspNet.Cors" version="5.2.3" targetFramework="net45" />
1011
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net45" />
1112
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" />
13+
<package id="Microsoft.AspNet.WebApi.Cors" version="5.2.3" targetFramework="net45" />
14+
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net45" />
15+
<package id="Microsoft.AspNet.WebApi.OwinSelfHost" version="5.2.3" targetFramework="net45" />
16+
<package id="Microsoft.Owin" version="3.0.1" targetFramework="net45" />
17+
<package id="Microsoft.Owin.Host.HttpListener" version="3.0.1" targetFramework="net45" />
18+
<package id="Microsoft.Owin.Hosting" version="3.0.0" targetFramework="net45" />
1219
<package id="Moq" version="4.2.1502.0911" targetFramework="net45" />
1320
<package id="NEST" version="1.4.1" targetFramework="net45" />
1421
<package id="Newtonsoft.Json" version="6.0.8" targetFramework="net45" />
1522
<package id="NLog" version="3.2.0.0" targetFramework="net45" />
1623
<package id="NUnit" version="2.6.4" targetFramework="net45" />
24+
<package id="Owin" version="1.0" targetFramework="net45" />
1725
<package id="Quartz" version="2.3.1" targetFramework="net45" />
1826
<package id="RabbitMQ.Client" version="3.4.3" targetFramework="net45" />
1927
<package id="Unity" version="3.5.1404.0" targetFramework="net45" />

IntegrationEngine.userprefs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,30 @@
11
<Properties StartupItem="IntegrationServer/IntegrationServer.csproj">
22
<MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" />
3-
<MonoDevelop.Ide.Workbench>
3+
<MonoDevelop.Ide.Workbench ActiveDocument="IntegrationEngine.Tests/Api/WebApiApplicationTest.cs">
4+
<Files>
5+
<File FileName="IntegrationEngine/Api/WebApiApplication.cs" Line="1" Column="1" />
6+
<File FileName="IntegrationEngine.Tests/Api/WebApiApplicationTest.cs" Line="11" Column="11" />
7+
</Files>
48
<Pads>
59
<Pad Id="MonoDevelop.NUnit.TestPad">
6-
<State expanded="True" selected="True" />
10+
<State expanded="True">
11+
<Node name="IntegrationEngine.Tests" expanded="True">
12+
<Node name="IntegrationEngine" expanded="True">
13+
<Node name="Tests" expanded="True">
14+
<Node name="WebApiApplicationTest" expanded="True">
15+
<Node name="ShouldConfigureRoutes" selected="True" />
16+
</Node>
17+
</Node>
18+
</Node>
19+
</Node>
20+
</State>
721
</Pad>
822
</Pads>
923
</MonoDevelop.Ide.Workbench>
1024
<MonoDevelop.Ide.DebuggingService.Breakpoints>
11-
<BreakpointStore />
25+
<BreakpointStore>
26+
<Breakpoint file="/Users/ethanhann/Projects/IntegrationEngine/IntegrationEngine.Tests/Api/WebApiApplicationTest.cs" line="55" column="67" />
27+
</BreakpointStore>
1228
</MonoDevelop.Ide.DebuggingService.Breakpoints>
1329
<MonoDevelop.Ide.DebuggingService.PinnedWatches />
1430
</Properties>

IntegrationEngine/Api/WebApiApplication.cs

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
using IntegrationEngine.Core.Configuration;
22
using Microsoft.Owin.Hosting;
3-
using System;
4-
using System.Web.Http;
53
using Microsoft.Practices.Unity;
4+
using Owin;
5+
using System;
66
using System.Linq;
7+
using System.Web.Http;
78
using System.Web.Http.Cors;
8-
using Owin;
99

1010
namespace IntegrationEngine.Api
1111
{
@@ -18,23 +18,25 @@ public class WebApiApplication : IWebApiApplication
1818
public WebApiApplication()
1919
{}
2020

21+
public HttpConfiguration HttpConfigurationFactory()
22+
{
23+
var config = new HttpConfiguration();
24+
config.DependencyResolver = ContainerResolver;
25+
if (WebApiConfiguration != null && WebApiConfiguration.Origins.Any())
26+
config.EnableCors(new EnableCorsAttribute(string.Join(",", WebApiConfiguration.Origins), "*", "*"));
27+
config.Routes.MapHttpRoute(
28+
name: "DefaultApi",
29+
routeTemplate: "api/{controller}/{id}",
30+
defaults: new { id = RouteParameter.Optional }
31+
);
32+
config.MapHttpAttributeRoutes();
33+
return config;
34+
}
35+
2136
public void Start()
2237
{
2338
var baseAddress = (new UriBuilder("http", WebApiConfiguration.HostName, WebApiConfiguration.Port)).Uri.AbsoluteUri;
24-
Action<Owin.IAppBuilder> startup = x => {
25-
var config = new HttpConfiguration();
26-
config.DependencyResolver = ContainerResolver;
27-
// if (WebApiConfiguration != null && WebApiConfiguration.Origins.Any())
28-
// config.EnableCors(new EnableCorsAttribute(string.Join(",", WebApiConfiguration.Origins), "*", "*"));
29-
config.Routes.MapHttpRoute(
30-
name: "DefaultApi",
31-
routeTemplate: "api/{controller}/{id}",
32-
defaults: new { id = RouteParameter.Optional }
33-
);
34-
config.MapHttpAttributeRoutes();
35-
x.UseWebApi(config);
36-
};
37-
webApi = WebApp.Start(baseAddress, startup);
39+
webApi = WebApp.Start(baseAddress, x => x.UseWebApi(HttpConfigurationFactory()));
3840
}
3941

4042
public void Dispose()

IntegrationEngine/ContainerResolver.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ public class ContainerResolver : IDependencyResolver
99
{
1010
protected IUnityContainer container;
1111

12-
public ContainerResolver(IUnityContainer container)
12+
public ContainerResolver()
13+
{}
14+
15+
public ContainerResolver(IUnityContainer container) : this()
1316
{
1417
if (container == null)
1518
throw new ArgumentNullException("container");

0 commit comments

Comments
 (0)