using Moq; using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.Hosting; using Umbraco.Core.Logging; using Umbraco.Core.Services; using Umbraco.Core.WebAssets; using Umbraco.Examine; using Umbraco.Web.Compose; using Umbraco.Web.PublishedCache.NuCache; using Umbraco.Web.Scheduling; using Umbraco.Web.Search; namespace Umbraco.Tests.Integration.Testing { /// /// This is used to replace certain services that are normally registered from our Core / Infrastructure that /// we do not want active within integration tests /// /// /// This is a IUserComposer so that it runs after all core composers /// [RuntimeLevel(MinLevel = RuntimeLevel.Boot)] public class IntegrationTestComposer : ComponentComposer { public override void Compose(Composition composition) { base.Compose(composition); composition.Components().Remove(); composition.Components().Remove(); composition.RegisterUnique(); composition.RegisterUnique(factory => Mock.Of()); // we don't want persisted nucache files in tests composition.Register(factory => new PublishedSnapshotServiceOptions { IgnoreLocalDb = true }); // ensure all lucene indexes are using RAM directory (no file system) composition.RegisterUnique(); } // replace the default so there is no background index rebuilder private class TestBackgroundIndexRebuilder : BackgroundIndexRebuilder { public TestBackgroundIndexRebuilder(IMainDom mainDom, IProfilingLogger logger, IApplicationShutdownRegistry hostingEnvironment, IndexRebuilder indexRebuilder) : base(mainDom, logger, hostingEnvironment, indexRebuilder) { } public override void RebuildIndexes(bool onlyEmptyIndexes, int waitMilliseconds = 0) { // noop } } } }