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
}
}
}
}