2020-03-13 12:08:25 +11:00
using System ;
using System.IO ;
2020-03-13 14:43:41 +11:00
using System.Reflection ;
2020-03-13 12:08:25 +11:00
using Moq ;
using Umbraco.Core ;
using Umbraco.Core.Cache ;
using Umbraco.Core.Composing ;
using Umbraco.Core.Configuration ;
using Umbraco.Core.Configuration.UmbracoSettings ;
using Umbraco.Core.Diagnostics ;
using Umbraco.Core.Hosting ;
using Umbraco.Core.IO ;
using Umbraco.Core.Logging ;
using Umbraco.Core.Models.PublishedContent ;
using Umbraco.Core.Persistence ;
using Umbraco.Core.Serialization ;
using Umbraco.Core.Strings ;
using Umbraco.Core.Sync ;
using Umbraco.Net ;
using Umbraco.Web ;
using Umbraco.Web.Routing ;
namespace Umbraco.Tests.Common
{
/// <summary>
/// Common helper properties and methods useful to testing
/// </summary>
public abstract class TestHelperBase
{
2020-03-13 14:43:41 +11:00
private readonly ITypeFinder _typeFinder ;
2020-03-13 14:45:54 +11:00
private readonly IConfigsFactory _configsFactory ;
2020-03-13 14:43:41 +11:00
private UriUtility _uriUtility ;
private IIOHelper _ioHelper ;
2020-03-13 14:45:54 +11:00
private Configs _configs ;
2020-03-13 14:43:41 +11:00
public TestHelperBase ( Assembly entryAssembly )
2020-03-13 12:08:25 +11:00
{
2020-03-13 14:45:54 +11:00
_configsFactory = new ConfigsFactory ( ) ;
2020-03-13 12:33:28 +11:00
SettingsForTests = new SettingsForTests ( ) ;
2020-03-13 14:43:41 +11:00
MainDom = new SimpleMainDom ( ) ;
_typeFinder = new TypeFinder ( Mock . Of < ILogger > ( ) , new DefaultUmbracoAssemblyProvider ( entryAssembly ) ) ;
2020-03-13 12:08:25 +11:00
}
2020-03-13 14:43:41 +11:00
public ITypeFinder GetTypeFinder ( ) = > _typeFinder ;
2020-03-13 12:08:25 +11:00
public TypeLoader GetMockedTypeLoader ( )
{
return new TypeLoader ( IOHelper , Mock . Of < ITypeFinder > ( ) , Mock . Of < IAppPolicyCache > ( ) , new DirectoryInfo ( IOHelper . MapPath ( "~/App_Data/TEMP" ) ) , Mock . Of < IProfilingLogger > ( ) ) ;
}
public Configs GetConfigs ( )
{
2020-03-13 14:45:54 +11:00
if ( _configs = = null )
2020-03-23 15:50:01 +11:00
_configs = GetConfigsFactory ( ) . Create ( ) ;
2020-03-13 14:45:54 +11:00
return _configs ;
2020-03-13 12:08:25 +11:00
}
public IRuntimeState GetRuntimeState ( )
{
return new RuntimeState (
Mock . Of < ILogger > ( ) ,
Mock . Of < IGlobalSettings > ( ) ,
new Lazy < IMainDom > ( ) ,
new Lazy < IServerRegistrar > ( ) ,
GetUmbracoVersion ( ) ,
GetHostingEnvironment ( ) ,
GetBackOfficeInfo ( )
) ;
}
public abstract IBackOfficeInfo GetBackOfficeInfo ( ) ;
2020-03-13 14:45:54 +11:00
public IConfigsFactory GetConfigsFactory ( ) = > _configsFactory ;
2020-03-13 12:08:25 +11:00
/// <summary>
/// Gets the current assembly directory.
/// </summary>
/// <value>The assembly directory.</value>
public string CurrentAssemblyDirectory
{
get
{
var codeBase = typeof ( TestHelperBase ) . Assembly . CodeBase ;
var uri = new Uri ( codeBase ) ;
var path = uri . LocalPath ;
return Path . GetDirectoryName ( path ) ;
}
}
public IShortStringHelper ShortStringHelper { get ; } = new DefaultShortStringHelper ( new DefaultShortStringHelperConfig ( ) ) ;
public IJsonSerializer JsonSerializer { get ; } = new JsonNetSerializer ( ) ;
public IVariationContextAccessor VariationContextAccessor { get ; } = new TestVariationContextAccessor ( ) ;
public abstract IDbProviderFactoryCreator DbProviderFactoryCreator { get ; }
public abstract IBulkSqlInsertProvider BulkSqlInsertProvider { get ; }
public abstract IMarchal Marchal { get ; }
2020-03-16 14:02:08 +01:00
public ICoreDebugSettings CoreDebugSettings { get ; } = new CoreDebugSettings ( ) ;
2020-03-13 12:08:25 +11:00
2020-03-13 14:43:41 +11:00
public IIOHelper IOHelper
{
get
{
if ( _ioHelper = = null )
2020-03-23 15:50:01 +11:00
_ioHelper = new IOHelper ( GetHostingEnvironment ( ) , SettingsForTests . GenerateMockGlobalSettings ( ) ) ;
2020-03-13 14:43:41 +11:00
return _ioHelper ;
}
}
2020-03-13 12:08:25 +11:00
public IMainDom MainDom { get ; }
2020-03-13 14:43:41 +11:00
public UriUtility UriUtility
{
get
{
if ( _uriUtility = = null )
_uriUtility = new UriUtility ( GetHostingEnvironment ( ) ) ;
return _uriUtility ;
}
}
2020-03-13 12:08:25 +11:00
public SettingsForTests SettingsForTests { get ; }
public IWebRoutingSettings WebRoutingSettings = > SettingsForTests . GenerateMockWebRoutingSettings ( ) ;
/// <summary>
/// Maps the given <paramref name="relativePath"/> making it rooted on <see cref="CurrentAssemblyDirectory"/>. <paramref name="relativePath"/> must start with <code>~/</code>
/// </summary>
/// <param name="relativePath">The relative path.</param>
/// <returns></returns>
public string MapPathForTest ( string relativePath )
{
if ( ! relativePath . StartsWith ( "~/" ) )
throw new ArgumentException ( "relativePath must start with '~/'" , "relativePath" ) ;
return relativePath . Replace ( "~/" , CurrentAssemblyDirectory + "/" ) ;
}
public IUmbracoVersion GetUmbracoVersion ( )
{
return new UmbracoVersion ( GetConfigs ( ) . Global ( ) ) ;
}
public IRegister GetRegister ( )
{
return RegisterFactory . Create ( GetConfigs ( ) . Global ( ) ) ;
}
public abstract IHostingEnvironment GetHostingEnvironment ( ) ;
public abstract IIpResolver GetIpResolver ( ) ;
public IRequestCache GetRequestCache ( )
{
return new DictionaryAppCache ( ) ;
}
public IPublishedUrlProvider GetPublishedUrlProvider ( )
{
var mock = new Mock < IPublishedUrlProvider > ( ) ;
return mock . Object ;
}
}
}