Skip to content

Commit 0c14f46

Browse files
author
Mantas Janulionis
committed
Fixed unit tests
1 parent 13ef33e commit 0c14f46

File tree

5 files changed

+124
-50
lines changed

5 files changed

+124
-50
lines changed

BetterModules.Core.Web.Tests/BetterModules.Core.Web.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@
113113
<Compile Include="Properties\AssemblyInfo.cs" />
114114
<Compile Include="Security\DefaultWebPrincipalProviderTests.cs" />
115115
<Compile Include="Services\Caching\HttpRuntimeCacheServiceTests.cs" />
116+
<Compile Include="TestHelpers\ContextScopeProviderHelper.cs" />
116117
<Compile Include="TestHelpers\HttpContextMoq.cs" />
117118
<Compile Include="TestHelpers\RandomTestDataProvider.cs" />
118119
<Compile Include="TestBase.cs" />
Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
using System.Collections.Generic;
2-
using System.Linq;
32
using System.Web;
43
using System.Web.Routing;
54

6-
using BetterModules.Core.DataAccess.DataContext.Migrations;
7-
using BetterModules.Core.Modules;
8-
using BetterModules.Core.Modules.Registration;
5+
using BetterModules.Core.Tests.TestHelpers;
96
using BetterModules.Core.Web.Environment.Host;
107
using BetterModules.Core.Web.Modules.Registration;
118

@@ -24,58 +21,40 @@ public class DefaultWebApplicationHostTests : TestBase
2421
private bool eventFired;
2522

2623
[Test]
27-
public void ShouldExecute_OnApplicationStart_Correctly()
24+
public void ShouldExecute_Init_Correctly()
2825
{
2926
eventFired = false;
3027
var routesRegistered = false;
31-
var databaseMigrated = false;
32-
33-
var registration = new Mock<IWebModulesRegistration>();
34-
registration
35-
.Setup(r => r.RegisterKnownModuleRoutes(It.IsAny<RouteCollection>()))
36-
.Callback<RouteCollection>(rc => routesRegistered = true);
37-
38-
var moduleDescriptor1 = new ModuleRegistrationContext(new Mock<ModuleDescriptor>().Object);
39-
var moduleDescriptor2 = new ModuleRegistrationContext(new Mock<ModuleDescriptor>().Object);
40-
41-
registration
42-
.Setup(r => r.GetModules())
43-
.Returns(() => new[] { moduleDescriptor1, moduleDescriptor2 });
44-
45-
var migrationRunner = new Mock<IMigrationRunner>();
46-
migrationRunner
47-
.Setup(r => r.MigrateStructure(It.IsAny<IList<ModuleDescriptor>>()))
48-
.Callback<IList<ModuleDescriptor>>(
49-
descriptors =>
50-
{
51-
Assert.AreEqual(descriptors.Count, 2);
52-
Assert.IsTrue(descriptors.Any(d => d == moduleDescriptor1.ModuleDescriptor));
53-
Assert.IsTrue(descriptors.Any(d => d == moduleDescriptor2.ModuleDescriptor));
54-
55-
databaseMigrated = true;
56-
});
57-
58-
var host = new DefaultWebApplicationHost(registration.Object, migrationRunner.Object);
59-
CreateApplication();
6028

61-
WebCoreEvents.Instance.HostStart += Instance_Fired;
62-
host.OnApplicationStart(application);
63-
WebCoreEvents.Instance.HostStart -= Instance_Fired;
29+
using (var fakeProvider = new ContextScopeProviderHelper())
30+
{
31+
32+
var registration = new Mock<IWebModulesRegistration>();
33+
registration
34+
.Setup(r => r.RegisterKnownModuleRoutes(It.IsAny<RouteCollection>()))
35+
.Callback<RouteCollection>(rc => routesRegistered = true);
36+
fakeProvider.RegisterFakeServiceInstance(registration.Object, typeof (IWebModulesRegistration));
37+
38+
var host = new UtilityHost();
39+
CreateApplication();
6440

41+
WebCoreEvents.Instance.HostStart += Instance_Fired;
42+
host.Init(application);
43+
WebCoreEvents.Instance.HostStart -= Instance_Fired;
44+
}
6545
Assert.IsTrue(eventFired);
6646
Assert.IsTrue(routesRegistered);
67-
Assert.IsTrue(databaseMigrated);
6847
}
6948

7049
[Test]
71-
public void ShouldExecute_OnApplicationEnd_Correctly()
50+
public void ShouldExecute_Dispose_Correctly()
7251
{
73-
var host = CreateHost();
52+
var host = new UtilityHost();
7453
CreateApplication();
7554
eventFired = false;
76-
55+
host.Init(application);
7756
WebCoreEvents.Instance.HostStop += Instance_Fired;
78-
host.OnApplicationEnd(application);
57+
host.Dispose();
7958
WebCoreEvents.Instance.HostStop -= Instance_Fired;
8059

8160
Assert.IsTrue(eventFired);
@@ -119,17 +98,38 @@ void Instance_Fired(SingleItemEventArgs<HttpApplication> args)
11998

12099
private IWebApplicationHost CreateHost()
121100
{
122-
var registration = new Mock<IWebModulesRegistration>();
123-
var migrationRunner = new Mock<IMigrationRunner>();
124-
125-
var host = new DefaultWebApplicationHost(registration.Object, migrationRunner.Object);
126-
101+
var host = new UtilityHost();
127102
return host;
128103
}
129104

130105
private void CreateApplication()
131106
{
132107
application = new Mock<HttpApplication>().Object;
133108
}
109+
110+
private class EventTestApplicationAutoHost : DefaultWebApplicationAutoHost
111+
{
112+
public List<string> Results = new List<string>();
113+
114+
public override void OnAuthenticateRequest(HttpApplication application)
115+
{
116+
Results.Add("OnAuthenticateRequest");
117+
}
118+
119+
public override void OnBeginRequest(HttpApplication application)
120+
{
121+
Results.Add("OnBeginRequest");
122+
}
123+
124+
public override void OnEndRequest(HttpApplication application)
125+
{
126+
Results.Add("OnEndRequest");
127+
}
128+
129+
public override void OnApplicationError(HttpApplication application)
130+
{
131+
Results.Add("OnApplicationError");
132+
}
133+
}
134134
}
135135
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using Autofac;
5+
using BetterModules.Core.Dependencies;
6+
7+
namespace BetterModules.Core.Tests.TestHelpers
8+
{
9+
public class ContextScopeProviderHelper : IDisposable
10+
{
11+
private IDictionary<Type, Type> originalObjects = new Dictionary<Type, Type>();
12+
13+
public void RegisterFakeService(Type type, Type interfaceType)
14+
{
15+
using (var container = ContextScopeProvider.CreateChildContainer())
16+
{
17+
var service = container.Resolve(interfaceType);
18+
if (!originalObjects.ContainsKey(interfaceType))
19+
{
20+
originalObjects.Add(interfaceType, service.GetType());
21+
}
22+
}
23+
24+
var builder = new ContainerBuilder();
25+
builder.RegisterType(type).As(interfaceType).InstancePerLifetimeScope();
26+
27+
ContextScopeProvider.RegisterTypes(builder);
28+
}
29+
30+
public void RegisterFakeServiceInstance(Object type, Type interfaceType)
31+
{
32+
using (var container = ContextScopeProvider.CreateChildContainer())
33+
{
34+
var service = container.Resolve(interfaceType);
35+
if (!originalObjects.ContainsKey(interfaceType))
36+
{
37+
originalObjects.Add(interfaceType, service.GetType());
38+
}
39+
}
40+
41+
var builder = new ContainerBuilder();
42+
builder.RegisterInstance(type).As(interfaceType).SingleInstance();
43+
44+
ContextScopeProvider.RegisterTypes(builder);
45+
}
46+
47+
public void Dispose()
48+
{
49+
if (!originalObjects.Any())
50+
{
51+
return;
52+
}
53+
54+
var builder = new ContainerBuilder();
55+
foreach (var keyValue in originalObjects)
56+
{
57+
builder.RegisterType(keyValue.Value).As(keyValue.Key).InstancePerLifetimeScope();
58+
}
59+
60+
ContextScopeProvider.RegisterTypes(builder);
61+
}
62+
}
63+
}

BetterModules.Core.Web/Environment/Host/DefaultWebApplicationAutoHost.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,14 @@ protected int InitializedCount
5959

6060
private HttpApplication _application;
6161

62-
protected HttpApplication Application { get { return _application; } }
62+
protected HttpApplication Application
63+
{
64+
get
65+
{
66+
return _application;
67+
}
68+
set { _application = value; }
69+
}
6370

6471
public object Lock
6572
{
@@ -92,7 +99,7 @@ public virtual void Dispose()
9299
}
93100
}
94101

95-
private void AttachApplicationEvents(HttpApplication application)
102+
protected void AttachApplicationEvents(HttpApplication application)
96103
{
97104
application.AuthenticateRequest += Application_AuthenticateRequest;
98105
application.BeginRequest += Application_BeginRequest;

BetterModules.Core.Web/Environment/Host/UtilityHost.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public sealed class UtilityHost : DefaultWebApplicationAutoHost
1515
{
1616
public override void Init(HttpApplication context)
1717
{
18+
Application = context;
1819
lock (Lock)
1920
{
2021
if (InitializedCount++ == 0)
@@ -35,7 +36,9 @@ public override void Dispose()
3536
lock (Lock)
3637
{
3738
if (--InitializedCount == 0)
38-
WebCoreEvents.Instance.OnHostStop(Application);
39+
{
40+
WebCoreEvents.Instance.OnHostStop(Application);
41+
}
3942
}
4043
}
4144

0 commit comments

Comments
 (0)