Created
May 24, 2012 11:07
-
-
Save lars-erik/2780846 to your computer and use it in GitHub Desktop.
Umbraco Test Helpers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[TestFixture] | |
public class TestStub: UmbracoTestBase | |
{ | |
[SetUp] | |
public void Setup() | |
{ | |
SetupFakeEnvironment(); | |
SetupRootContent(); | |
} | |
[TearDown] | |
public void Teardown() | |
{ | |
ClearCaches(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Collections.Specialized; | |
using System.Linq; | |
using Umbraco.Cms.Web.DependencyManagement; | |
using Umbraco.Cms.Web.Mapping; | |
using Umbraco.Cms.Web.Security; | |
using Umbraco.Framework; | |
using Umbraco.Framework.Persistence; | |
using Umbraco.Framework.Persistence.Model.Constants; | |
using Umbraco.Framework.Persistence.Model.Constants.Entities; | |
using Umbraco.Framework.Persistence.Model.Constants.Schemas; | |
using Umbraco.Framework.Security; | |
using Umbraco.Framework.Security.Configuration; | |
using Umbraco.Framework.Security.Model.Entities; | |
using Umbraco.Framework.TypeMapping; | |
using Umbraco.Hive; | |
using Umbraco.Hive.Configuration; | |
using Umbraco.Hive.RepositoryTypes; | |
using Umbraco.Tests.Extensions; | |
namespace Umbraco.Test.Helpers | |
{ | |
public class UmbracoTestBase | |
{ | |
protected IHiveManager Hive; | |
protected IMembershipService<Member> MembershipService; | |
protected IPublicAccessService PublicAccessService; | |
protected NhibernateTestSetupHelper NhibernateTestSetup; | |
protected FakeUmbracoApplicationContext AppContext; | |
protected void SetupFakeEnvironment() | |
{ | |
// TODO: Prettify and extract smaller methods | |
NhibernateTestSetup = new NhibernateTestSetupHelper(); | |
var storageProvider = new IoHiveTestSetupHelper(NhibernateTestSetup.FakeFrameworkContext); | |
Hive = new HiveManager( | |
new[] | |
{ | |
new ProviderMappingGroup( | |
"test", | |
new WildcardUriMatch("content://"), | |
NhibernateTestSetup.ReadonlyProviderSetup, | |
NhibernateTestSetup.ProviderSetup, | |
NhibernateTestSetup.FakeFrameworkContext), | |
storageProvider.CreateGroup("uploader", "storage://file-uploader"), | |
}, | |
NhibernateTestSetup.FakeFrameworkContext); | |
AppContext = new FakeUmbracoApplicationContext(Hive, false); | |
var resolverContext = new MockedMapResolverContext(NhibernateTestSetup.FakeFrameworkContext, Hive, | |
new MockedPropertyEditorFactory(AppContext), | |
new MockedParameterEditorFactory()); | |
var webmModelMapper = new CmsModelMapper(resolverContext); | |
var renderModelMapper = new RenderTypesModelMapper(resolverContext); | |
NhibernateTestSetup.FakeFrameworkContext.SetTypeMappers( | |
new FakeTypeMapperCollection(new AbstractMappingEngine[] | |
{ | |
webmModelMapper, renderModelMapper, | |
new FrameworkModelMapper(NhibernateTestSetup.FakeFrameworkContext) | |
})); | |
var membersMembershipProvider = new MembersMembershipProvider { AppContext = AppContext }; | |
membersMembershipProvider.Initialize("MembersMembershipProvider", new NameValueCollection()); | |
MembershipService = new MembershipService<Member, MemberProfile>(AppContext.FrameworkContext, Hive, | |
"security://member-profiles", | |
"security://member-groups", | |
Umbraco.Framework.Security.Model.FixedHiveIds. | |
MemberProfileVirtualRoot, | |
membersMembershipProvider, | |
Enumerable.Empty<MembershipProviderElement>()); | |
PublicAccessService = new PublicAccessService(Hive, MembershipService, AppContext.FrameworkContext); | |
} | |
protected void TeardownFakeEnvironment() | |
{ | |
ClearCaches(); | |
NhibernateTestSetup.Dispose(); | |
Hive.Dispose(); | |
} | |
protected void ClearCaches() | |
{ | |
NhibernateTestSetup.SessionForTest.Clear(); | |
Hive.Context.GenerationScopedCache.IfNotNull(x => x.Clear()); | |
} | |
protected void SetupRootContent() | |
{ | |
AttributeTypeRegistry.SetCurrent(new CmsAttributeTypeRegistry()); | |
// Ensure parent schema and content root exists for this test | |
var contentVirtualRoot = FixedEntities.ContentVirtualRoot; | |
var systemRoot = new SystemRoot(); | |
var contentRootSchema = new ContentRootSchema(); | |
Hive.AutoCommitTo<IContentStore>( | |
x => | |
{ | |
x.Repositories.AddOrUpdate(systemRoot); | |
x.Repositories.AddOrUpdate(contentVirtualRoot); | |
x.Repositories.Schemas.AddOrUpdate(contentRootSchema); | |
}); | |
} | |
} | |
public class FakeControllerContext : ControllerContext | |
{ | |
private readonly IUmbracoApplicationContext context; | |
private readonly Content page; | |
public FakeControllerContext(IUmbracoApplicationContext context, Content page) | |
{ | |
this.context = context; | |
this.page = page; | |
} | |
public override RouteData RouteData | |
{ | |
get | |
{ | |
var data = new RouteData(); | |
data.DataTokens.Add("umbraco-route-def", new RouteDefinition | |
{ | |
RenderModel = new UmbracoRenderModel(context, page) | |
}); | |
return data; | |
} | |
set | |
{ | |
base.RouteData = value; | |
} | |
} | |
} | |
public static class SurfaceControllerTestExtensions | |
{ | |
/// <summary> | |
/// ATTENTION: Your controller's ControllerContext will be set to a FakeControllerContext | |
/// </summary> | |
/// <param name="controller"></param> | |
/// <param name="context"></param> | |
/// <param name="currentPage"></param> | |
public static void SetCurrentPage(this SurfaceController controller, IUmbracoApplicationContext context, Content currentPage) | |
{ | |
controller.ControllerContext = new FakeControllerContext(context, currentPage); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment