IHttpController IHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) { // default if (!typeof(UmbracoApiControllerBase).IsAssignableFrom(controllerType)) { return(base.Create(request, controllerDescriptor, controllerType)); } var owinContext = request.TryGetOwinContext().Result; var mockedUserService = Mock.Of <IUserService>(); var mockedContentService = Mock.Of <IContentService>(); var mockedMediaService = Mock.Of <IMediaService>(); var mockedEntityService = Mock.Of <IEntityService>(); var mockedMemberService = Mock.Of <IMemberService>(); var mockedMemberTypeService = Mock.Of <IMemberTypeService>(); var mockedDataTypeService = Mock.Of <IDataTypeService>(); var mockedContentTypeService = Mock.Of <IContentTypeService>(); var serviceContext = ServiceContext.CreatePartial( userService: mockedUserService, contentService: mockedContentService, mediaService: mockedMediaService, entityService: mockedEntityService, memberService: mockedMemberService, memberTypeService: mockedMemberTypeService, dataTypeService: mockedDataTypeService, contentTypeService: mockedContentTypeService, localizedTextService: Mock.Of <ILocalizedTextService>()); var globalSettings = new GlobalSettings(); // FIXME: v8? ////new app context //var dbCtx = new Mock<DatabaseContext>(Mock.Of<IDatabaseFactory>(), Mock.Of<ILogger>(), Mock.Of<ISqlSyntaxProvider>(), "test"); ////ensure these are set so that the appctx is 'Configured' //dbCtx.Setup(x => x.CanConnect).Returns(true); //dbCtx.Setup(x => x.IsDatabaseConfigured).Returns(true); //var appCtx = ApplicationContext.EnsureContext( // dbCtx.Object, // //pass in mocked services // serviceContext, // CacheHelper.CreateDisabledCacheHelper(), // new ProfilingLogger(Mock.Of<ILogger>(), Mock.Of<IProfiler>()), // true); var httpContextItems = new Dictionary <string, object> { //add the special owin environment to the httpcontext items, this is how the GetOwinContext works ["owin.Environment"] = new Dictionary <string, object>() }; //httpcontext with an auth'd user var httpContext = Mock.Of <HttpContextBase>( http => http.User == owinContext.Authentication.User //ensure the request exists with a cookies collection && http.Request == Mock.Of <HttpRequestBase>(r => r.Cookies == new HttpCookieCollection() && r.RequestContext == new System.Web.Routing.RequestContext { RouteData = new System.Web.Routing.RouteData() }) //ensure the request exists with an items collection && http.Items == httpContextItems); //chuck it into the props since this is what MS does when hosted and it's needed there request.Properties["MS_HttpContext"] = httpContext; var backofficeIdentity = (ClaimsIdentity)owinContext.Authentication.User.Identity; var backofficeSecurity = new Mock <IBackOfficeSecurity>(); //mock CurrentUser var groups = new List <ReadOnlyUserGroup>(); for (var index = 0; index < backofficeIdentity.GetRoles().Length; index++) { var role = backofficeIdentity.GetRoles()[index]; groups.Add(new ReadOnlyUserGroup(index + 1, role, "icon-user", null, null, role, new string[0], new string[0])); } var mockUser = MockedUser.GetUserMock(); mockUser.Setup(x => x.IsApproved).Returns(true); mockUser.Setup(x => x.IsLockedOut).Returns(false); mockUser.Setup(x => x.AllowedSections).Returns(backofficeIdentity.GetAllowedApplications()); mockUser.Setup(x => x.Groups).Returns(groups); mockUser.Setup(x => x.Email).Returns("*****@*****.**"); mockUser.Setup(x => x.Id).Returns((int)backofficeIdentity.GetId()); mockUser.Setup(x => x.Language).Returns("en"); mockUser.Setup(x => x.Name).Returns(backofficeIdentity.GetRealName()); mockUser.Setup(x => x.StartContentIds).Returns(backofficeIdentity.GetStartContentNodes()); mockUser.Setup(x => x.StartMediaIds).Returns(backofficeIdentity.GetStartMediaNodes()); mockUser.Setup(x => x.Username).Returns(backofficeIdentity.GetUsername()); backofficeSecurity.Setup(x => x.CurrentUser) .Returns(mockUser.Object); //mock Validate backofficeSecurity.Setup(x => x.UserHasSectionAccess(It.IsAny <string>(), It.IsAny <IUser>())) .Returns(() => true); var publishedSnapshot = new Mock <IPublishedSnapshot>(); publishedSnapshot.Setup(x => x.Members).Returns(Mock.Of <IPublishedMemberCache>()); var publishedSnapshotService = new Mock <IPublishedSnapshotService>(); publishedSnapshotService.Setup(x => x.CreatePublishedSnapshot(It.IsAny <string>())).Returns(publishedSnapshot.Object); var umbracoContextAccessor = Umbraco.Web.Composing.Current.UmbracoContextAccessor; var httpContextAccessor = TestHelper.GetHttpContextAccessor(httpContext); var umbCtx = new UmbracoContext(httpContextAccessor, publishedSnapshotService.Object, backofficeSecurity.Object, globalSettings, TestHelper.GetHostingEnvironment(), new TestVariationContextAccessor(), TestHelper.UriUtility, new AspNetCookieManager(httpContextAccessor)); //replace it umbracoContextAccessor.UmbracoContext = umbCtx; var urlHelper = new Mock <IUrlProvider>(); urlHelper.Setup(provider => provider.GetUrl(It.IsAny <IPublishedContent>(), It.IsAny <UrlMode>(), It.IsAny <string>(), It.IsAny <Uri>())) .Returns(UrlInfo.Url("/hello/world/1234")); return(CreateController(controllerType, request, umbracoContextAccessor)); }