Skip to content

Instantly share code, notes, and snippets.

@lars-erik
Created May 24, 2012 11:07
Show Gist options
  • Save lars-erik/2780846 to your computer and use it in GitHub Desktop.
Save lars-erik/2780846 to your computer and use it in GitHub Desktop.
Umbraco Test Helpers
[TestFixture]
public class TestStub: UmbracoTestBase
{
[SetUp]
public void Setup()
{
SetupFakeEnvironment();
SetupRootContent();
}
[TearDown]
public void Teardown()
{
ClearCaches();
}
}
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