diff --git a/src/Umbraco.Core/ContentVariationExtensions.cs b/src/Umbraco.Abstractions/ContentVariationExtensions.cs similarity index 98% rename from src/Umbraco.Core/ContentVariationExtensions.cs rename to src/Umbraco.Abstractions/ContentVariationExtensions.cs index bdcf300f3f..f3e8943172 100644 --- a/src/Umbraco.Core/ContentVariationExtensions.cs +++ b/src/Umbraco.Abstractions/ContentVariationExtensions.cs @@ -44,7 +44,7 @@ namespace Umbraco.Core /// /// Determines whether the property type is invariant. /// - public static bool VariesByNothing(this PropertyType propertyType) => propertyType.Variations.VariesByNothing(); + public static bool VariesByNothing(this IPropertyType propertyType) => propertyType.Variations.VariesByNothing(); /// /// Determines whether the property type varies by culture. diff --git a/src/Umbraco.Core/Deploy/ArtifactDependency.cs b/src/Umbraco.Abstractions/Deploy/ArtifactDependency.cs similarity index 100% rename from src/Umbraco.Core/Deploy/ArtifactDependency.cs rename to src/Umbraco.Abstractions/Deploy/ArtifactDependency.cs diff --git a/src/Umbraco.Core/Deploy/ArtifactDependencyCollection.cs b/src/Umbraco.Abstractions/Deploy/ArtifactDependencyCollection.cs similarity index 100% rename from src/Umbraco.Core/Deploy/ArtifactDependencyCollection.cs rename to src/Umbraco.Abstractions/Deploy/ArtifactDependencyCollection.cs diff --git a/src/Umbraco.Core/Deploy/ArtifactDependencyMode.cs b/src/Umbraco.Abstractions/Deploy/ArtifactDependencyMode.cs similarity index 100% rename from src/Umbraco.Core/Deploy/ArtifactDependencyMode.cs rename to src/Umbraco.Abstractions/Deploy/ArtifactDependencyMode.cs diff --git a/src/Umbraco.Core/Deploy/ArtifactDeployState.cs b/src/Umbraco.Abstractions/Deploy/ArtifactDeployState.cs similarity index 100% rename from src/Umbraco.Core/Deploy/ArtifactDeployState.cs rename to src/Umbraco.Abstractions/Deploy/ArtifactDeployState.cs diff --git a/src/Umbraco.Core/Deploy/ArtifactDeployStateOfTArtifactTEntity.cs b/src/Umbraco.Abstractions/Deploy/ArtifactDeployStateOfTArtifactTEntity.cs similarity index 100% rename from src/Umbraco.Core/Deploy/ArtifactDeployStateOfTArtifactTEntity.cs rename to src/Umbraco.Abstractions/Deploy/ArtifactDeployStateOfTArtifactTEntity.cs diff --git a/src/Umbraco.Core/Deploy/ArtifactSignature.cs b/src/Umbraco.Abstractions/Deploy/ArtifactSignature.cs similarity index 100% rename from src/Umbraco.Core/Deploy/ArtifactSignature.cs rename to src/Umbraco.Abstractions/Deploy/ArtifactSignature.cs diff --git a/src/Umbraco.Core/Deploy/Difference.cs b/src/Umbraco.Abstractions/Deploy/Difference.cs similarity index 100% rename from src/Umbraco.Core/Deploy/Difference.cs rename to src/Umbraco.Abstractions/Deploy/Difference.cs diff --git a/src/Umbraco.Core/Deploy/Direction.cs b/src/Umbraco.Abstractions/Deploy/Direction.cs similarity index 100% rename from src/Umbraco.Core/Deploy/Direction.cs rename to src/Umbraco.Abstractions/Deploy/Direction.cs diff --git a/src/Umbraco.Core/Deploy/IArtifact.cs b/src/Umbraco.Abstractions/Deploy/IArtifact.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IArtifact.cs rename to src/Umbraco.Abstractions/Deploy/IArtifact.cs diff --git a/src/Umbraco.Core/Deploy/IArtifactSignature.cs b/src/Umbraco.Abstractions/Deploy/IArtifactSignature.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IArtifactSignature.cs rename to src/Umbraco.Abstractions/Deploy/IArtifactSignature.cs diff --git a/src/Umbraco.Core/Deploy/IDataTypeConfigurationConnector.cs b/src/Umbraco.Abstractions/Deploy/IDataTypeConfigurationConnector.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IDataTypeConfigurationConnector.cs rename to src/Umbraco.Abstractions/Deploy/IDataTypeConfigurationConnector.cs diff --git a/src/Umbraco.Core/Deploy/IDeployContext.cs b/src/Umbraco.Abstractions/Deploy/IDeployContext.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IDeployContext.cs rename to src/Umbraco.Abstractions/Deploy/IDeployContext.cs diff --git a/src/Umbraco.Core/Deploy/IFileSource.cs b/src/Umbraco.Abstractions/Deploy/IFileSource.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IFileSource.cs rename to src/Umbraco.Abstractions/Deploy/IFileSource.cs diff --git a/src/Umbraco.Core/Deploy/IFileType.cs b/src/Umbraco.Abstractions/Deploy/IFileType.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IFileType.cs rename to src/Umbraco.Abstractions/Deploy/IFileType.cs diff --git a/src/Umbraco.Core/Deploy/IFileTypeCollection.cs b/src/Umbraco.Abstractions/Deploy/IFileTypeCollection.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IFileTypeCollection.cs rename to src/Umbraco.Abstractions/Deploy/IFileTypeCollection.cs diff --git a/src/Umbraco.Core/Deploy/IImageSourceParser.cs b/src/Umbraco.Abstractions/Deploy/IImageSourceParser.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IImageSourceParser.cs rename to src/Umbraco.Abstractions/Deploy/IImageSourceParser.cs diff --git a/src/Umbraco.Core/Deploy/ILocalLinkParser.cs b/src/Umbraco.Abstractions/Deploy/ILocalLinkParser.cs similarity index 100% rename from src/Umbraco.Core/Deploy/ILocalLinkParser.cs rename to src/Umbraco.Abstractions/Deploy/ILocalLinkParser.cs diff --git a/src/Umbraco.Core/Deploy/IMacroParser.cs b/src/Umbraco.Abstractions/Deploy/IMacroParser.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IMacroParser.cs rename to src/Umbraco.Abstractions/Deploy/IMacroParser.cs diff --git a/src/Umbraco.Core/Deploy/IServiceConnector.cs b/src/Umbraco.Abstractions/Deploy/IServiceConnector.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IServiceConnector.cs rename to src/Umbraco.Abstractions/Deploy/IServiceConnector.cs diff --git a/src/Umbraco.Core/Deploy/IUniqueIdentifyingServiceConnector.cs b/src/Umbraco.Abstractions/Deploy/IUniqueIdentifyingServiceConnector.cs similarity index 100% rename from src/Umbraco.Core/Deploy/IUniqueIdentifyingServiceConnector.cs rename to src/Umbraco.Abstractions/Deploy/IUniqueIdentifyingServiceConnector.cs diff --git a/src/Umbraco.Core/Deploy/IValueConnector.cs b/src/Umbraco.Abstractions/Deploy/IValueConnector.cs similarity index 88% rename from src/Umbraco.Core/Deploy/IValueConnector.cs rename to src/Umbraco.Abstractions/Deploy/IValueConnector.cs index 7d9f43b5fe..5329725663 100644 --- a/src/Umbraco.Core/Deploy/IValueConnector.cs +++ b/src/Umbraco.Abstractions/Deploy/IValueConnector.cs @@ -23,7 +23,7 @@ namespace Umbraco.Core.Deploy /// The value property type /// The content dependencies. /// The deploy property value. - string ToArtifact(object value, PropertyType propertyType, ICollection dependencies); + string ToArtifact(object value, IPropertyType propertyType, ICollection dependencies); /// /// Gets the content property value corresponding to a deploy property value. @@ -32,6 +32,6 @@ namespace Umbraco.Core.Deploy /// The value property type< /// The current content property value. /// The content property value. - object FromArtifact(string value, PropertyType propertyType, object currentValue); + object FromArtifact(string value, IPropertyType propertyType, object currentValue); } } diff --git a/src/Umbraco.Abstractions/GuidUtils.cs b/src/Umbraco.Abstractions/GuidUtils.cs index d878cee16b..ba07d09236 100644 --- a/src/Umbraco.Abstractions/GuidUtils.cs +++ b/src/Umbraco.Abstractions/GuidUtils.cs @@ -7,7 +7,7 @@ namespace Umbraco.Core /// /// Utility methods for the struct. /// - internal static class GuidUtils + public static class GuidUtils { /// /// Combines two guid instances utilizing an exclusive disjunction. diff --git a/src/Umbraco.Abstractions/IO/FileSystems.cs b/src/Umbraco.Abstractions/IO/FileSystems.cs index 2416883c64..00fe0b551b 100644 --- a/src/Umbraco.Abstractions/IO/FileSystems.cs +++ b/src/Umbraco.Abstractions/IO/FileSystems.cs @@ -151,10 +151,10 @@ namespace Umbraco.Core.IO #region Providers private readonly Dictionary _paths = new Dictionary(); - private IGlobalSettings _globalSettings; // internal for tests internal IReadOnlyDictionary Paths => _paths; + private IGlobalSettings _globalSettings; /// /// Gets a strongly-typed filesystem. diff --git a/src/Umbraco.Core/Models/ContentBase.cs b/src/Umbraco.Abstractions/Models/ContentBase.cs similarity index 98% rename from src/Umbraco.Core/Models/ContentBase.cs rename to src/Umbraco.Abstractions/Models/ContentBase.cs index e5adddad72..59693efe53 100644 --- a/src/Umbraco.Core/Models/ContentBase.cs +++ b/src/Umbraco.Abstractions/Models/ContentBase.cs @@ -44,7 +44,7 @@ namespace Umbraco.Core.Models /// /// Initializes a new instance of the class. /// - protected ContentBase(string name, int parentId, IContentTypeComposition contentType, PropertyCollection properties, string culture = null) + protected ContentBase(string name, int parentId, IContentTypeComposition contentType, IPropertyCollection properties, string culture = null) : this(name, contentType, properties, culture) { if (parentId == 0) throw new ArgumentOutOfRangeException(nameof(parentId)); @@ -54,14 +54,14 @@ namespace Umbraco.Core.Models /// /// Initializes a new instance of the class. /// - protected ContentBase(string name, IContentBase parent, IContentTypeComposition contentType, PropertyCollection properties, string culture = null) + protected ContentBase(string name, IContentBase parent, IContentTypeComposition contentType, IPropertyCollection properties, string culture = null) : this(name, contentType, properties, culture) { if (parent == null) throw new ArgumentNullException(nameof(parent)); SetParent(parent); } - private ContentBase(string name, IContentTypeComposition contentType, PropertyCollection properties, string culture = null) + private ContentBase(string name, IContentTypeComposition contentType, IPropertyCollection properties, string culture = null) { ContentType = contentType?.ToSimple() ?? throw new ArgumentNullException(nameof(contentType)); @@ -84,7 +84,7 @@ namespace Umbraco.Core.Models [IgnoreDataMember] public ISimpleContentType ContentType { get; private set; } - internal void ChangeContentType(ISimpleContentType contentType) + public void ChangeContentType(ISimpleContentType contentType) { ContentType = contentType; ContentTypeId = contentType.Id; diff --git a/src/Umbraco.Abstractions/Models/ContentExtensions.cs b/src/Umbraco.Abstractions/Models/ContentExtensions.cs new file mode 100644 index 0000000000..5fd5e576b8 --- /dev/null +++ b/src/Umbraco.Abstractions/Models/ContentExtensions.cs @@ -0,0 +1,19 @@ +using System.Linq; + +namespace Umbraco.Core.Models +{ + public static class ContentExtensions + { + public static bool IsAnyUserPropertyDirty(this IContentBase entity) + { + return entity.Properties.Any(x => x.IsDirty()); + } + + public static bool WasAnyUserPropertyDirty(this IContentBase entity) + { + return entity.Properties.Any(x => x.WasDirty()); + } + + + } +} diff --git a/src/Umbraco.Abstractions/Models/ContentRepositoryExtensions.cs b/src/Umbraco.Abstractions/Models/ContentRepositoryExtensions.cs new file mode 100644 index 0000000000..8bc41e1190 --- /dev/null +++ b/src/Umbraco.Abstractions/Models/ContentRepositoryExtensions.cs @@ -0,0 +1,58 @@ +using System; +using System.Linq; +using Umbraco.Core.Exceptions; + +namespace Umbraco.Core.Models +{ + public static class ContentRepositoryExtensions + { + public static void SetCultureInfo(this IContentBase content, string culture, string name, DateTime date) + { + if (name.IsNullOrWhiteSpace()) + throw new ArgumentNullOrEmptyException(nameof(name)); + + if (culture.IsNullOrWhiteSpace()) + throw new ArgumentNullOrEmptyException(nameof(culture)); + + content.CultureInfos.AddOrUpdate(culture, name, date); + } + + /// + /// Updates a culture date, if the culture exists. + /// + public static void TouchCulture(this IContentBase content, string culture) + { + if (culture.IsNullOrWhiteSpace()) return; + if (!content.CultureInfos.TryGetValue(culture, out var infos)) return; + content.CultureInfos.AddOrUpdate(culture, infos.Name, DateTime.Now); + } + + /// + /// Used to synchronize all culture dates to the same date if they've been modified + /// + /// + /// + /// + /// This is so that in an operation where (for example) 2 languages are updates like french and english, it is possible that + /// these dates assigned to them differ by a couple of Ticks, but we need to ensure they are persisted at the exact same time. + /// + public static void AdjustDates(this IContent content, DateTime date) + { + foreach (var culture in content.PublishedCultures.ToList()) + { + if (!content.PublishCultureInfos.TryGetValue(culture, out var publishInfos)) + continue; + + // if it's not dirty, it means it hasn't changed so there's nothing to adjust + if (!publishInfos.IsDirty()) + continue; + + content.PublishCultureInfos.AddOrUpdate(culture, publishInfos.Name, date); + + if (content.CultureInfos.TryGetValue(culture, out var infos)) + SetCultureInfo(content, culture, infos.Name, date); + } + } + } + +} diff --git a/src/Umbraco.Core/Models/ContentTypeAvailableCompositionsResult.cs b/src/Umbraco.Abstractions/Models/ContentTypeAvailableCompositionsResult.cs similarity index 100% rename from src/Umbraco.Core/Models/ContentTypeAvailableCompositionsResult.cs rename to src/Umbraco.Abstractions/Models/ContentTypeAvailableCompositionsResult.cs diff --git a/src/Umbraco.Core/Models/ContentTypeAvailableCompositionsResults.cs b/src/Umbraco.Abstractions/Models/ContentTypeAvailableCompositionsResults.cs similarity index 100% rename from src/Umbraco.Core/Models/ContentTypeAvailableCompositionsResults.cs rename to src/Umbraco.Abstractions/Models/ContentTypeAvailableCompositionsResults.cs diff --git a/src/Umbraco.Core/Models/ContentTypeBaseExtensions.cs b/src/Umbraco.Abstractions/Models/ContentTypeBaseExtensions.cs similarity index 96% rename from src/Umbraco.Core/Models/ContentTypeBaseExtensions.cs rename to src/Umbraco.Abstractions/Models/ContentTypeBaseExtensions.cs index 121fb7a5d1..35c7b8e164 100644 --- a/src/Umbraco.Core/Models/ContentTypeBaseExtensions.cs +++ b/src/Umbraco.Abstractions/Models/ContentTypeBaseExtensions.cs @@ -27,7 +27,7 @@ namespace Umbraco.Core.Models /// /// /// - internal static bool WasPropertyTypeVariationChanged(this IContentTypeBase contentType) + public static bool WasPropertyTypeVariationChanged(this IContentTypeBase contentType) { return contentType.WasPropertyTypeVariationChanged(out var _); } diff --git a/src/Umbraco.Core/Models/DataTypeExtensions.cs b/src/Umbraco.Abstractions/Models/DataTypeExtensions.cs similarity index 100% rename from src/Umbraco.Core/Models/DataTypeExtensions.cs rename to src/Umbraco.Abstractions/Models/DataTypeExtensions.cs diff --git a/src/Umbraco.Core/Models/SimpleContentType.cs b/src/Umbraco.Abstractions/Models/SimpleContentType.cs similarity index 100% rename from src/Umbraco.Core/Models/SimpleContentType.cs rename to src/Umbraco.Abstractions/Models/SimpleContentType.cs diff --git a/src/Umbraco.Core/PublishedModelFactoryExtensions.cs b/src/Umbraco.Abstractions/PublishedModelFactoryExtensions.cs similarity index 100% rename from src/Umbraco.Core/PublishedModelFactoryExtensions.cs rename to src/Umbraco.Abstractions/PublishedModelFactoryExtensions.cs diff --git a/src/Umbraco.Core/Services/ContentServiceExtensions.cs b/src/Umbraco.Abstractions/Services/ContentServiceExtensions.cs similarity index 100% rename from src/Umbraco.Core/Services/ContentServiceExtensions.cs rename to src/Umbraco.Abstractions/Services/ContentServiceExtensions.cs diff --git a/src/Umbraco.Core/Services/ContentTypeServiceExtensions.cs b/src/Umbraco.Abstractions/Services/ContentTypeServiceExtensions.cs similarity index 100% rename from src/Umbraco.Core/Services/ContentTypeServiceExtensions.cs rename to src/Umbraco.Abstractions/Services/ContentTypeServiceExtensions.cs diff --git a/src/Umbraco.Core/Services/DateTypeServiceExtensions.cs b/src/Umbraco.Abstractions/Services/DateTypeServiceExtensions.cs similarity index 100% rename from src/Umbraco.Core/Services/DateTypeServiceExtensions.cs rename to src/Umbraco.Abstractions/Services/DateTypeServiceExtensions.cs diff --git a/src/Umbraco.Core/Services/IContentTypeBaseServiceProvider.cs b/src/Umbraco.Abstractions/Services/IContentTypeBaseServiceProvider.cs similarity index 100% rename from src/Umbraco.Core/Services/IContentTypeBaseServiceProvider.cs rename to src/Umbraco.Abstractions/Services/IContentTypeBaseServiceProvider.cs diff --git a/src/Umbraco.Core/Services/IContentTypeService.cs b/src/Umbraco.Abstractions/Services/IContentTypeService.cs similarity index 100% rename from src/Umbraco.Core/Services/IContentTypeService.cs rename to src/Umbraco.Abstractions/Services/IContentTypeService.cs diff --git a/src/Umbraco.Core/Services/IContentTypeServiceBase.cs b/src/Umbraco.Abstractions/Services/IContentTypeServiceBase.cs similarity index 100% rename from src/Umbraco.Core/Services/IContentTypeServiceBase.cs rename to src/Umbraco.Abstractions/Services/IContentTypeServiceBase.cs diff --git a/src/Umbraco.Core/Services/IDataTypeService.cs b/src/Umbraco.Abstractions/Services/IDataTypeService.cs similarity index 100% rename from src/Umbraco.Core/Services/IDataTypeService.cs rename to src/Umbraco.Abstractions/Services/IDataTypeService.cs diff --git a/src/Umbraco.Core/Services/IEntityXmlSerializer.cs b/src/Umbraco.Abstractions/Services/IEntityXmlSerializer.cs similarity index 100% rename from src/Umbraco.Core/Services/IEntityXmlSerializer.cs rename to src/Umbraco.Abstractions/Services/IEntityXmlSerializer.cs diff --git a/src/Umbraco.Core/Services/IMediaService.cs b/src/Umbraco.Abstractions/Services/IMediaService.cs similarity index 99% rename from src/Umbraco.Core/Services/IMediaService.cs rename to src/Umbraco.Abstractions/Services/IMediaService.cs index 48345bc88c..6de2765644 100644 --- a/src/Umbraco.Core/Services/IMediaService.cs +++ b/src/Umbraco.Abstractions/Services/IMediaService.cs @@ -1,11 +1,8 @@ using System; using System.Collections.Generic; using System.ComponentModel; -using System.Xml.Linq; -using Umbraco.Core.Configuration; using System.IO; using Umbraco.Core.Models; -using Umbraco.Core.Persistence.DatabaseModelDefinitions; using Umbraco.Core.Persistence.Querying; namespace Umbraco.Core.Services diff --git a/src/Umbraco.Core/Services/IMediaTypeService.cs b/src/Umbraco.Abstractions/Services/IMediaTypeService.cs similarity index 100% rename from src/Umbraco.Core/Services/IMediaTypeService.cs rename to src/Umbraco.Abstractions/Services/IMediaTypeService.cs diff --git a/src/Umbraco.Core/Services/IMemberTypeService.cs b/src/Umbraco.Abstractions/Services/IMemberTypeService.cs similarity index 100% rename from src/Umbraco.Core/Services/IMemberTypeService.cs rename to src/Umbraco.Abstractions/Services/IMemberTypeService.cs diff --git a/src/Umbraco.Core/Services/MediaServiceExtensions.cs b/src/Umbraco.Abstractions/Services/MediaServiceExtensions.cs similarity index 100% rename from src/Umbraco.Core/Services/MediaServiceExtensions.cs rename to src/Umbraco.Abstractions/Services/MediaServiceExtensions.cs diff --git a/src/Umbraco.Abstractions/TypeExtensions.cs b/src/Umbraco.Abstractions/TypeExtensions.cs new file mode 100644 index 0000000000..4f55b6458c --- /dev/null +++ b/src/Umbraco.Abstractions/TypeExtensions.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Umbraco.Core +{ + public static class TypeExtensions + { + public static T GetCustomAttribute(this Type type, bool inherit) + where T : Attribute + { + return type.GetCustomAttributes(inherit).SingleOrDefault(); + } + + public static IEnumerable GetCustomAttributes(this Type type, bool inherited) + where T : Attribute + { + if (type == null) return Enumerable.Empty(); + return type.GetCustomAttributes(typeof (T), inherited).OfType(); + } + + } +} diff --git a/src/Umbraco.Core/UdiEntityTypeHelper.cs b/src/Umbraco.Abstractions/UdiEntityTypeHelper.cs similarity index 100% rename from src/Umbraco.Core/UdiEntityTypeHelper.cs rename to src/Umbraco.Abstractions/UdiEntityTypeHelper.cs diff --git a/src/Umbraco.Core/UdiGetterExtensions.cs b/src/Umbraco.Abstractions/UdiGetterExtensions.cs similarity index 100% rename from src/Umbraco.Core/UdiGetterExtensions.cs rename to src/Umbraco.Abstractions/UdiGetterExtensions.cs diff --git a/src/Umbraco.Core/UdiParserServiceConnectors.cs b/src/Umbraco.Abstractions/UdiParserServiceConnectors.cs similarity index 100% rename from src/Umbraco.Core/UdiParserServiceConnectors.cs rename to src/Umbraco.Abstractions/UdiParserServiceConnectors.cs diff --git a/src/Umbraco.Configuration/GlobalSettings.cs b/src/Umbraco.Configuration/GlobalSettings.cs index 0d1bb2a494..440940cb85 100644 --- a/src/Umbraco.Configuration/GlobalSettings.cs +++ b/src/Umbraco.Configuration/GlobalSettings.cs @@ -15,7 +15,6 @@ namespace Umbraco.Core.Configuration public class GlobalSettings : IGlobalSettings { private readonly IIOHelper _ioHelper; - private string _localTempPath; // TODO these should not be static private static string _reservedPaths; @@ -230,6 +229,10 @@ namespace Umbraco.Core.Configuration } } + /// + /// Gets a value indicating whether umbraco is running in [debug mode]. + /// + /// true if [debug mode]; otherwise, false. public bool DebugMode { get diff --git a/src/Umbraco.Core/Compose/ManifestWatcherComponent.cs b/src/Umbraco.Core/Compose/ManifestWatcherComponent.cs index 97e27e9e23..bb6df42c13 100644 --- a/src/Umbraco.Core/Compose/ManifestWatcherComponent.cs +++ b/src/Umbraco.Core/Compose/ManifestWatcherComponent.cs @@ -10,15 +10,17 @@ namespace Umbraco.Core.Compose { private readonly IRuntimeState _runtimeState; private readonly ILogger _logger; + private readonly IIOHelper _ioHelper; // if configured and in debug mode, a ManifestWatcher watches App_Plugins folders for // package.manifest chances and restarts the application on any change private ManifestWatcher _mw; - public ManifestWatcherComponent(IRuntimeState runtimeState, ILogger logger) + public ManifestWatcherComponent(IRuntimeState runtimeState, ILogger logger, IIOHelper ioHelper) { _runtimeState = runtimeState; _logger = logger; + _ioHelper = ioHelper; } public void Initialize() @@ -28,7 +30,7 @@ namespace Umbraco.Core.Compose //if (ApplicationContext.Current.IsConfigured == false || GlobalSettings.DebugMode == false) // return; - var appPlugins = Current.IOHelper.MapPath("~/App_Plugins/"); + var appPlugins = _ioHelper.MapPath("~/App_Plugins/"); if (Directory.Exists(appPlugins) == false) return; _mw = new ManifestWatcher(_logger); diff --git a/src/Umbraco.Core/Composing/CompositionExtensions/FileSystems.cs b/src/Umbraco.Core/Composing/CompositionExtensions/FileSystems.cs index 90a0f10fba..0fdcd0ae29 100644 --- a/src/Umbraco.Core/Composing/CompositionExtensions/FileSystems.cs +++ b/src/Umbraco.Core/Composing/CompositionExtensions/FileSystems.cs @@ -1,5 +1,4 @@ -using Umbraco.Core.Compose; -using Umbraco.Core.IO; +using Umbraco.Core.IO; using Umbraco.Core.IO.MediaPathSchemes; using Umbraco.Core.Logging; diff --git a/src/Umbraco.Core/Composing/CompositionExtensions/Services.cs b/src/Umbraco.Core/Composing/CompositionExtensions/Services.cs index 74cbab715f..c9fa8d1304 100644 --- a/src/Umbraco.Core/Composing/CompositionExtensions/Services.cs +++ b/src/Umbraco.Core/Composing/CompositionExtensions/Services.cs @@ -2,6 +2,7 @@ using System.IO; using System.Linq; using Umbraco.Core.Cache; +using Umbraco.Core.Configuration; using Umbraco.Core.Events; using Umbraco.Core.IO; using Umbraco.Core.Logging; @@ -71,7 +72,7 @@ namespace Umbraco.Core.Composing.CompositionExtensions new PackageInstallation( factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), - new DirectoryInfo(Current.IOHelper.GetRootDirectorySafe()))); + new DirectoryInfo( factory.GetInstance().GetRootDirectorySafe()))); return composition; } @@ -84,14 +85,16 @@ namespace Umbraco.Core.Composing.CompositionExtensions /// private static PackagesRepository CreatePackageRepository(IFactory factory, string packageRepoFileName) => new PackagesRepository( - factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), + factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), packageRepoFileName); private static LocalizedTextServiceFileSources SourcesFactory(IFactory container) { - var mainLangFolder = new DirectoryInfo(Current.IOHelper.MapPath(Current.Configs.Global().UmbracoPath + "/config/lang/")); - var appPlugins = new DirectoryInfo(Current.IOHelper.MapPath(Constants.SystemDirectories.AppPlugins)); - var configLangFolder = new DirectoryInfo(Current.IOHelper.MapPath(Constants.SystemDirectories.Config + "/lang/")); + var ioHelper = container.GetInstance(); + var globalSettings = container.GetInstance(); + var mainLangFolder = new DirectoryInfo(ioHelper.MapPath(globalSettings.UmbracoPath + "/config/lang/")); + var appPlugins = new DirectoryInfo(ioHelper.MapPath(Constants.SystemDirectories.AppPlugins)); + var configLangFolder = new DirectoryInfo(ioHelper.MapPath(Constants.SystemDirectories.Config + "/lang/")); var pluginLangFolders = appPlugins.Exists == false ? Enumerable.Empty() diff --git a/src/Umbraco.Core/ContentExtensions.cs b/src/Umbraco.Core/ContentExtensions.cs index 6732fd9394..f9d06b70a3 100644 --- a/src/Umbraco.Core/ContentExtensions.cs +++ b/src/Umbraco.Core/ContentExtensions.cs @@ -148,7 +148,9 @@ namespace Umbraco.Core if (filename == null || filestream == null) return; // get a safe & clean filename - filename = Current.IOHelper.SafeFileName(filename); + var ioHelper = Current.Factory.GetInstance(); + + filename = ioHelper.SafeFileName(filename); if (string.IsNullOrWhiteSpace(filename)) return; filename = filename.ToLower(); @@ -326,15 +328,7 @@ namespace Umbraco.Core return entity.Properties.Where(x => x.IsDirty()).Select(x => x.Alias); } - public static bool IsAnyUserPropertyDirty(this IContentBase entity) - { - return entity.Properties.Any(x => x.IsDirty()); - } - public static bool WasAnyUserPropertyDirty(this IContentBase entity) - { - return entity.Properties.Any(x => x.WasDirty()); - } #endregion } diff --git a/src/Umbraco.Core/Diagnostics/MiniDump.cs b/src/Umbraco.Core/Diagnostics/MiniDump.cs index 92b6e8cbda..6534ad705c 100644 --- a/src/Umbraco.Core/Diagnostics/MiniDump.cs +++ b/src/Umbraco.Core/Diagnostics/MiniDump.cs @@ -110,11 +110,13 @@ namespace Umbraco.Core.Diagnostics // filter everywhere in our code = not! var stacktrace = withException ? Environment.StackTrace : string.Empty; - var filepath = Current.IOHelper.MapPath("~/App_Data/MiniDump"); + var ioHelper = Current.Factory.GetInstance(); + + var filepath = ioHelper.MapPath("~/App_Data/MiniDump"); if (Directory.Exists(filepath) == false) Directory.CreateDirectory(filepath); - var filename = Path.Combine(filepath, string.Format("{0:yyyyMMddTHHmmss}.{1}.dmp", DateTime.UtcNow, Guid.NewGuid().ToString("N").Substring(0, 4))); + var filename = Path.Combine(filepath, $"{DateTime.UtcNow:yyyyMMddTHHmmss}.{Guid.NewGuid().ToString("N").Substring(0, 4)}.dmp"); using (var stream = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite, FileShare.Write)) { return Write(stream.SafeFileHandle, options, withException); @@ -126,7 +128,8 @@ namespace Umbraco.Core.Diagnostics { lock (LockO) { - var filepath = Current.IOHelper.MapPath("~/App_Data/MiniDump"); + var ioHelper = Current.Factory.GetInstance(); + var filepath = ioHelper.MapPath("~/App_Data/MiniDump"); if (Directory.Exists(filepath) == false) return true; var count = Directory.GetFiles(filepath, "*.dmp").Length; return count < 8; diff --git a/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs b/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs index bbe2f3704d..aea1c8fae4 100644 --- a/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs +++ b/src/Umbraco.Core/Logging/Viewer/JsonLogViewer.cs @@ -5,6 +5,7 @@ using System.Linq; using Newtonsoft.Json; using Serilog.Events; using Serilog.Formatting.Compact.Reader; +using Umbraco.Core.IO; namespace Umbraco.Core.Logging.Viewer { @@ -13,7 +14,7 @@ namespace Umbraco.Core.Logging.Viewer private readonly string _logsPath; private readonly ILogger _logger; - public JsonLogViewer(ILogger logger, string logsPath = "", string searchPath = "") : base(searchPath) + public JsonLogViewer(ILogger logger, IIOHelper ioHelper, string logsPath = "", string searchPath = "") : base(ioHelper, searchPath) { if (string.IsNullOrEmpty(logsPath)) logsPath = $@"{AppDomain.CurrentDomain.BaseDirectory}\App_Data\Logs\"; diff --git a/src/Umbraco.Core/Logging/Viewer/LogViewerComposer.cs b/src/Umbraco.Core/Logging/Viewer/LogViewerComposer.cs index 8eb835b4d9..f92ca0140a 100644 --- a/src/Umbraco.Core/Logging/Viewer/LogViewerComposer.cs +++ b/src/Umbraco.Core/Logging/Viewer/LogViewerComposer.cs @@ -1,5 +1,6 @@ using Umbraco.Core.Compose; using Umbraco.Core.Composing; +using Umbraco.Core.IO; namespace Umbraco.Core.Logging.Viewer { @@ -9,7 +10,7 @@ namespace Umbraco.Core.Logging.Viewer { public void Compose(Composition composition) { - composition.SetLogViewer(_ => new JsonLogViewer(composition.Logger)); + composition.SetLogViewer(factory => new JsonLogViewer(composition.Logger, factory.GetInstance())); } } } diff --git a/src/Umbraco.Core/Logging/Viewer/LogViewerSourceBase.cs b/src/Umbraco.Core/Logging/Viewer/LogViewerSourceBase.cs index c2d9dbb46c..4cc70eaf42 100644 --- a/src/Umbraco.Core/Logging/Viewer/LogViewerSourceBase.cs +++ b/src/Umbraco.Core/Logging/Viewer/LogViewerSourceBase.cs @@ -15,17 +15,19 @@ namespace Umbraco.Core.Logging.Viewer { public abstract class LogViewerSourceBase : ILogViewer { - protected LogViewerSourceBase(string pathToSearches = "") + private readonly string _searchesConfigPath; + private readonly IIOHelper _ioHelper; + + protected LogViewerSourceBase(IIOHelper ioHelper, string pathToSearches = "") { if (string.IsNullOrEmpty(pathToSearches)) // ReSharper disable once StringLiteralTypo - pathToSearches = Current.IOHelper.MapPath("~/Config/logviewer.searches.config.js"); + pathToSearches = ioHelper.MapPath("~/Config/logviewer.searches.config.js"); _searchesConfigPath = pathToSearches; + _ioHelper = ioHelper; } - private readonly string _searchesConfigPath; - public abstract bool CanHandleLargeLogs { get; } /// @@ -40,7 +42,7 @@ namespace Umbraco.Core.Logging.Viewer //Our default implementation //If file does not exist - lets create it with an empty array - EnsureFileExists(_searchesConfigPath, "[]"); + EnsureFileExists(_searchesConfigPath, "[]", _ioHelper); var rawJson = System.IO.File.ReadAllText(_searchesConfigPath); return JsonConvert.DeserializeObject(rawJson); @@ -58,7 +60,7 @@ namespace Umbraco.Core.Logging.Viewer var rawJson = JsonConvert.SerializeObject(searches, Formatting.Indented); //If file does not exist - lets create it with an empty array - EnsureFileExists(_searchesConfigPath, "[]"); + EnsureFileExists(_searchesConfigPath, "[]", _ioHelper); //Write it back down to file System.IO.File.WriteAllText(_searchesConfigPath, rawJson); @@ -180,9 +182,9 @@ namespace Umbraco.Core.Logging.Viewer }; } - private static void EnsureFileExists(string path, string contents) + private static void EnsureFileExists(string path, string contents, IIOHelper ioHelper) { - var absolutePath = Current.IOHelper.MapPath(path); + var absolutePath = ioHelper.MapPath(path); if (System.IO.File.Exists(absolutePath)) return; using (var writer = System.IO.File.CreateText(absolutePath)) diff --git a/src/Umbraco.Core/Manifest/ManifestParser.cs b/src/Umbraco.Core/Manifest/ManifestParser.cs index 75fdde487c..e493acd507 100644 --- a/src/Umbraco.Core/Manifest/ManifestParser.cs +++ b/src/Umbraco.Core/Manifest/ManifestParser.cs @@ -53,6 +53,8 @@ namespace Umbraco.Core.Manifest _localizationService = localizationService; _validators = validators ?? throw new ArgumentNullException(nameof(validators)); _filters = filters ?? throw new ArgumentNullException(nameof(filters)); + _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _ioHelper = ioHelper; if (string.IsNullOrWhiteSpace(path)) throw new ArgumentNullOrEmptyException(nameof(path)); Path = path; diff --git a/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs b/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs index 100aaf6478..533c6cbbe7 100644 --- a/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs +++ b/src/Umbraco.Core/Migrations/Install/DatabaseBuilder.cs @@ -6,6 +6,7 @@ using System.Xml.Linq; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.Exceptions; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Migrations.Upgrade; using Umbraco.Core.Persistence; @@ -27,13 +28,24 @@ namespace Umbraco.Core.Migrations.Install private readonly IMigrationBuilder _migrationBuilder; private readonly IKeyValueService _keyValueService; private readonly ILogger _logger; + private readonly IIOHelper _ioHelper; + private readonly IUmbracoVersion _umbracoVersion; private DatabaseSchemaResult _databaseSchemaValidationResult; /// /// Initializes a new instance of the class. /// - public DatabaseBuilder(IScopeProvider scopeProvider, IGlobalSettings globalSettings, IUmbracoDatabaseFactory databaseFactory, IRuntimeState runtime, ILogger logger, IMigrationBuilder migrationBuilder, IKeyValueService keyValueService) + public DatabaseBuilder( + IScopeProvider scopeProvider, + IGlobalSettings globalSettings, + IUmbracoDatabaseFactory databaseFactory, + IRuntimeState runtime, + ILogger logger, + IMigrationBuilder migrationBuilder, + IKeyValueService keyValueService, + IIOHelper ioHelper, + IUmbracoVersion umbracoVersion) { _scopeProvider = scopeProvider; _globalSettings = globalSettings; @@ -42,6 +54,8 @@ namespace Umbraco.Core.Migrations.Install _logger = logger; _migrationBuilder = migrationBuilder; _keyValueService = keyValueService; + _ioHelper = ioHelper; + _umbracoVersion = umbracoVersion; } #region Status @@ -123,14 +137,14 @@ namespace Umbraco.Core.Migrations.Install /// public void ConfigureEmbeddedDatabaseConnection() { - ConfigureEmbeddedDatabaseConnection(_databaseFactory, _logger); + ConfigureEmbeddedDatabaseConnection(_databaseFactory, _ioHelper, _logger); } - private static void ConfigureEmbeddedDatabaseConnection(IUmbracoDatabaseFactory factory, ILogger logger) + private static void ConfigureEmbeddedDatabaseConnection(IUmbracoDatabaseFactory factory, IIOHelper ioHelper, ILogger logger) { - SaveConnectionString(EmbeddedDatabaseConnectionString, Constants.DbProviderNames.SqlCe, logger); + SaveConnectionString(EmbeddedDatabaseConnectionString, Constants.DbProviderNames.SqlCe, ioHelper, logger); - var path = Path.Combine(Current.IOHelper.GetRootDirectorySafe(), "App_Data", "Umbraco.sdf"); + var path = Path.Combine(ioHelper.GetRootDirectorySafe(), "App_Data", "Umbraco.sdf"); if (File.Exists(path) == false) { // this should probably be in a "using (new SqlCeEngine)" clause but not sure @@ -152,7 +166,7 @@ namespace Umbraco.Core.Migrations.Install { const string providerName = Constants.DbProviderNames.SqlServer; - SaveConnectionString(connectionString, providerName, _logger); + SaveConnectionString(connectionString, providerName, _ioHelper, _logger); _databaseFactory.Configure(connectionString, providerName); } @@ -168,7 +182,7 @@ namespace Umbraco.Core.Migrations.Install { var connectionString = GetDatabaseConnectionString(server, databaseName, user, password, databaseProvider, out var providerName); - SaveConnectionString(connectionString, providerName, _logger); + SaveConnectionString(connectionString, providerName, _ioHelper, _logger); _databaseFactory.Configure(connectionString, providerName); } @@ -199,7 +213,7 @@ namespace Umbraco.Core.Migrations.Install public void ConfigureIntegratedSecurityDatabaseConnection(string server, string databaseName) { var connectionString = GetIntegratedSecurityDatabaseConnectionString(server, databaseName); - SaveConnectionString(connectionString, Constants.DbProviderNames.SqlServer, _logger); + SaveConnectionString(connectionString, Constants.DbProviderNames.SqlServer, _ioHelper, _logger); _databaseFactory.Configure(connectionString, Constants.DbProviderNames.SqlServer); } @@ -275,13 +289,13 @@ namespace Umbraco.Core.Migrations.Install /// The connection string. /// The provider name. /// A logger. - private static void SaveConnectionString(string connectionString, string providerName, ILogger logger) + private static void SaveConnectionString(string connectionString, string providerName, IIOHelper ioHelper, ILogger logger) { if (string.IsNullOrWhiteSpace(connectionString)) throw new ArgumentNullOrEmptyException(nameof(connectionString)); if (string.IsNullOrWhiteSpace(providerName)) throw new ArgumentNullOrEmptyException(nameof(providerName)); var fileSource = "web.config"; - var fileName = Current.IOHelper.MapPath(Current.IOHelper.Root +"/" + fileSource); + var fileName = ioHelper.MapPath(ioHelper.Root +"/" + fileSource); var xml = XDocument.Load(fileName, LoadOptions.PreserveWhitespace); if (xml.Root == null) throw new Exception($"Invalid {fileSource} file (no root)."); @@ -294,7 +308,7 @@ namespace Umbraco.Core.Migrations.Install if (configSourceAttribute != null) { fileSource = configSourceAttribute.Value; - fileName = Current.IOHelper.MapPath(Current.IOHelper.Root + "/" + fileSource); + fileName = ioHelper.MapPath(ioHelper.Root + "/" + fileSource); if (!File.Exists(fileName)) throw new Exception($"Invalid configSource \"{fileSource}\" (no such file)."); @@ -366,7 +380,7 @@ namespace Umbraco.Core.Migrations.Install return _databaseSchemaValidationResult; var database = scope.Database; - var dbSchema = new DatabaseSchemaCreator(database, _logger); + var dbSchema = new DatabaseSchemaCreator(database, _logger, _umbracoVersion); _databaseSchemaValidationResult = dbSchema.ValidateSchema(); scope.Complete(); return _databaseSchemaValidationResult; @@ -416,7 +430,7 @@ namespace Umbraco.Core.Migrations.Install if (_runtime.Level == RuntimeLevel.Run) throw new Exception("Umbraco is already configured!"); - var creator = new DatabaseSchemaCreator(database, _logger); + var creator = new DatabaseSchemaCreator(database, _logger, _umbracoVersion); creator.InitializeDatabaseSchema(); message = message + "

Installation completed!

"; diff --git a/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs b/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs index 94d8cfbc62..5dc937822b 100644 --- a/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs +++ b/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs @@ -15,11 +15,13 @@ namespace Umbraco.Core.Migrations.Install { private readonly IDatabase _database; private readonly ILogger _logger; + private readonly IUmbracoVersion _umbracoVersion; - public DatabaseDataCreator(IDatabase database, ILogger logger) + public DatabaseDataCreator(IDatabase database, ILogger logger, IUmbracoVersion umbracoVersion) { _database = database; _logger = logger; + _umbracoVersion = umbracoVersion; } /// @@ -324,7 +326,7 @@ namespace Umbraco.Core.Migrations.Install { // on install, initialize the umbraco migration plan with the final state - var upgrader = new Upgrader(new UmbracoPlan()); + var upgrader = new Upgrader(new UmbracoPlan(_umbracoVersion)); var stateValueKey = upgrader.StateValueKey; var finalState = upgrader.Plan.FinalState; diff --git a/src/Umbraco.Core/Migrations/Install/DatabaseSchemaCreator.cs b/src/Umbraco.Core/Migrations/Install/DatabaseSchemaCreator.cs index eab7afe308..7181460eeb 100644 --- a/src/Umbraco.Core/Migrations/Install/DatabaseSchemaCreator.cs +++ b/src/Umbraco.Core/Migrations/Install/DatabaseSchemaCreator.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using NPoco; +using Umbraco.Core.Configuration; using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Persistence; @@ -18,11 +19,13 @@ namespace Umbraco.Core.Migrations.Install { private readonly IUmbracoDatabase _database; private readonly ILogger _logger; + private readonly IUmbracoVersion _umbracoVersion; - public DatabaseSchemaCreator(IUmbracoDatabase database, ILogger logger) + public DatabaseSchemaCreator(IUmbracoDatabase database, ILogger logger, IUmbracoVersion umbracoVersion) { _database = database; _logger = logger; + _umbracoVersion = umbracoVersion; } private ISqlSyntaxProvider SqlSyntax => _database.SqlContext.SqlSyntax; @@ -125,7 +128,7 @@ namespace Umbraco.Core.Migrations.Install if (e.Cancel == false) { - var dataCreation = new DatabaseDataCreator(_database, _logger); + var dataCreation = new DatabaseDataCreator(_database, _logger,_umbracoVersion); foreach (var table in OrderedTables) CreateTable(false, table, dataCreation); } @@ -395,7 +398,7 @@ namespace Umbraco.Core.Migrations.Install where T : new() { var tableType = typeof(T); - CreateTable(overwrite, tableType, new DatabaseDataCreator(_database, _logger)); + CreateTable(overwrite, tableType, new DatabaseDataCreator(_database, _logger, _umbracoVersion)); } /// diff --git a/src/Umbraco.Core/Migrations/Upgrade/UmbracoPlan.cs b/src/Umbraco.Core/Migrations/Upgrade/UmbracoPlan.cs index 070f4bdf6a..c657d0d9e7 100644 --- a/src/Umbraco.Core/Migrations/Upgrade/UmbracoPlan.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/UmbracoPlan.cs @@ -14,16 +14,16 @@ namespace Umbraco.Core.Migrations.Upgrade /// public class UmbracoPlan : MigrationPlan { + private readonly IUmbracoVersion _umbracoVersion; private const string InitPrefix = "{init-"; private const string InitSuffix = "}"; - - private IUmbracoVersion UmbracoVersion => Current.UmbracoVersion; /// /// Initializes a new instance of the class. /// - public UmbracoPlan() + public UmbracoPlan(IUmbracoVersion umbracoVersion) : base(Constants.System.UmbracoUpgradePlanName) { + _umbracoVersion = umbracoVersion; DefinePlan(); } @@ -66,13 +66,13 @@ namespace Umbraco.Core.Migrations.Upgrade throw new InvalidOperationException($"Could not get current version from web.config {Constants.AppSettings.ConfigurationStatus} appSetting."); // cannot go back in time - if (currentVersion > UmbracoVersion.SemanticVersion) - throw new InvalidOperationException($"Version {currentVersion} cannot be downgraded to {UmbracoVersion.SemanticVersion}."); + if (currentVersion > _umbracoVersion.SemanticVersion) + throw new InvalidOperationException($"Version {currentVersion} cannot be downgraded to {_umbracoVersion.SemanticVersion}."); // only from 7.14.0 and above var minVersion = new SemVersion(7, 14); if (currentVersion < minVersion) - throw new InvalidOperationException($"Version {currentVersion} cannot be migrated to {UmbracoVersion.SemanticVersion}." + throw new InvalidOperationException($"Version {currentVersion} cannot be migrated to {_umbracoVersion.SemanticVersion}." + $" Please upgrade first to at least {minVersion}."); // Force versions between 7.14.*-7.15.* into into 7.14 initial state. Because there is no db-changes, @@ -89,7 +89,7 @@ namespace Umbraco.Core.Migrations.Upgrade { if (TryGetInitStateVersion(state, out var initVersion)) { - throw new InvalidOperationException($"Version {UmbracoVersion.SemanticVersion} does not support migrating from {initVersion}." + throw new InvalidOperationException($"Version {_umbracoVersion.SemanticVersion} does not support migrating from {initVersion}." + $" Please verify which versions support migrating from {initVersion}."); } diff --git a/src/Umbraco.Core/Models/ContentRepositoryExtensions.cs b/src/Umbraco.Core/Models/ContentRepositoryExtensions.cs index f9efc60142..db557e1905 100644 --- a/src/Umbraco.Core/Models/ContentRepositoryExtensions.cs +++ b/src/Umbraco.Core/Models/ContentRepositoryExtensions.cs @@ -88,7 +88,7 @@ namespace Umbraco.Core.Models { content.CultureInfos.Clear(); content.CultureInfos = null; - } + } if (culture == null || culture == "*") content.Name = other.Name; @@ -112,32 +112,7 @@ namespace Umbraco.Core.Models content.PublishCultureInfos.AddOrUpdate(culture, name, date); } - /// - /// Used to synchronize all culture dates to the same date if they've been modified - /// - /// - /// - /// - /// This is so that in an operation where (for example) 2 languages are updates like french and english, it is possible that - /// these dates assigned to them differ by a couple of Ticks, but we need to ensure they are persisted at the exact same time. - /// - public static void AdjustDates(this IContent content, DateTime date) - { - foreach (var culture in content.PublishedCultures.ToList()) - { - if (!content.PublishCultureInfos.TryGetValue(culture, out var publishInfos)) - continue; - // if it's not dirty, it means it hasn't changed so there's nothing to adjust - if (!publishInfos.IsDirty()) - continue; - - content.PublishCultureInfos.AddOrUpdate(culture, publishInfos.Name, date); - - if (content.CultureInfos.TryGetValue(culture, out var infos)) - SetCultureInfo(content, culture, infos.Name, date); - } - } // sets the edited cultures on the content public static void SetCultureEdited(this IContent content, IEnumerable cultures) @@ -151,17 +126,6 @@ namespace Umbraco.Core.Models } } - public static void SetCultureInfo(this IContentBase content, string culture, string name, DateTime date) - { - if (name.IsNullOrWhiteSpace()) - throw new ArgumentNullOrEmptyException(nameof(name)); - - if (culture.IsNullOrWhiteSpace()) - throw new ArgumentNullOrEmptyException(nameof(culture)); - - content.CultureInfos.AddOrUpdate(culture, name, date); - } - /// /// Sets the publishing values for names and properties. /// @@ -249,7 +213,7 @@ namespace Umbraco.Core.Models // one single culture keepProcessing = content.ClearPublishInfo(culture); } - + if (keepProcessing) { @@ -288,14 +252,6 @@ namespace Umbraco.Core.Models return removed; } - /// - /// Updates a culture date, if the culture exists. - /// - public static void TouchCulture(this IContentBase content, string culture) - { - if (culture.IsNullOrWhiteSpace()) return; - if (!content.CultureInfos.TryGetValue(culture, out var infos)) return; - content.CultureInfos.AddOrUpdate(culture, infos.Name, DateTime.Now); - } + } } diff --git a/src/Umbraco.Core/Models/Media.cs b/src/Umbraco.Core/Models/Media.cs index 002611c09c..452bb615d1 100644 --- a/src/Umbraco.Core/Models/Media.cs +++ b/src/Umbraco.Core/Models/Media.cs @@ -27,7 +27,7 @@ namespace Umbraco.Core.Models /// Parent object /// MediaType for the current Media object /// Collection of properties - public Media(string name, IMedia parent, IMediaType contentType, PropertyCollection properties) + public Media(string name, IMedia parent, IMediaType contentType, IPropertyCollection properties) : base(name, parent, contentType, properties) { } @@ -48,7 +48,7 @@ namespace Umbraco.Core.Models /// Id of the Parent IMedia /// MediaType for the current Media object /// Collection of properties - public Media(string name, int parentId, IMediaType contentType, PropertyCollection properties) + public Media(string name, int parentId, IMediaType contentType, IPropertyCollection properties) : base(name, parentId, contentType, properties) { } diff --git a/src/Umbraco.Core/Packaging/PackageFileInstallation.cs b/src/Umbraco.Core/Packaging/PackageFileInstallation.cs index 45e40b8e5f..01bb316612 100644 --- a/src/Umbraco.Core/Packaging/PackageFileInstallation.cs +++ b/src/Umbraco.Core/Packaging/PackageFileInstallation.cs @@ -20,12 +20,14 @@ namespace Umbraco.Core.Packaging internal class PackageFileInstallation { private readonly CompiledPackageXmlParser _parser; + private readonly IIOHelper _ioHelper; private readonly IProfilingLogger _logger; private readonly PackageExtraction _packageExtraction; - public PackageFileInstallation(CompiledPackageXmlParser parser, IProfilingLogger logger) + public PackageFileInstallation(CompiledPackageXmlParser parser, IIOHelper ioHelper, IProfilingLogger logger) { _parser = parser; + _ioHelper = ioHelper; _logger = logger; _packageExtraction = new PackageExtraction(); } @@ -60,15 +62,15 @@ namespace Umbraco.Core.Packaging foreach (var item in package.Files.ToArray()) { - removedFiles.Add(Current.IOHelper.GetRelativePath(item)); + removedFiles.Add(_ioHelper.GetRelativePath(item)); //here we need to try to find the file in question as most packages does not support the tilde char - var file = Current.IOHelper.FindFile(item); + var file = _ioHelper.FindFile(item); if (file != null) { // TODO: Surely this should be ~/ ? file = file.EnsureStartsWith("/"); - var filePath = Current.IOHelper.MapPath(file); + var filePath = _ioHelper.MapPath(file); if (File.Exists(filePath)) File.Delete(filePath); diff --git a/src/Umbraco.Core/Packaging/PackagesRepository.cs b/src/Umbraco.Core/Packaging/PackagesRepository.cs index 1dfd6488ba..50a8ba6769 100644 --- a/src/Umbraco.Core/Packaging/PackagesRepository.cs +++ b/src/Umbraco.Core/Packaging/PackagesRepository.cs @@ -29,11 +29,13 @@ namespace Umbraco.Core.Packaging private readonly ILocalizationService _languageService; private readonly IEntityXmlSerializer _serializer; private readonly ILogger _logger; + private readonly IIOHelper _ioHelper; private readonly string _packageRepositoryFileName; private readonly string _mediaFolderPath; private readonly string _packagesFolderPath; private readonly string _tempFolderPath; private readonly PackageDefinitionXmlParser _parser; + private readonly IUmbracoVersion _umbracoVersion; /// /// Constructor @@ -44,6 +46,7 @@ namespace Umbraco.Core.Packaging /// /// /// + /// /// /// /// @@ -55,7 +58,9 @@ namespace Umbraco.Core.Packaging public PackagesRepository(IContentService contentService, IContentTypeService contentTypeService, IDataTypeService dataTypeService, IFileService fileService, IMacroService macroService, ILocalizationService languageService, + IIOHelper ioHelper, IEntityXmlSerializer serializer, ILogger logger, + IUmbracoVersion umbracoVersion, string packageRepositoryFileName, string tempFolderPath = null, string packagesFolderPath = null, string mediaFolderPath = null) { @@ -68,6 +73,7 @@ namespace Umbraco.Core.Packaging _languageService = languageService; _serializer = serializer; _logger = logger; + _ioHelper = ioHelper; _packageRepositoryFileName = packageRepositoryFileName; _tempFolderPath = tempFolderPath ?? Constants.SystemDirectories.TempData.EnsureEndsWith('/') + "PackageFiles"; @@ -75,6 +81,7 @@ namespace Umbraco.Core.Packaging _mediaFolderPath = mediaFolderPath ?? Current.Configs.Global().UmbracoMediaPath + "/created-packages"; _parser = new PackageDefinitionXmlParser(logger); + _umbracoVersion = umbracoVersion; } private string CreatedPackagesFile => _packagesFolderPath.EnsureEndsWith('/') + _packageRepositoryFileName; @@ -155,7 +162,7 @@ namespace Umbraco.Core.Packaging ValidatePackage(definition); //Create a folder for building this package - var temporaryPath = Current.IOHelper.MapPath(_tempFolderPath.EnsureEndsWith('/') + Guid.NewGuid()); + var temporaryPath = _ioHelper.MapPath(_tempFolderPath.EnsureEndsWith('/') + Guid.NewGuid()); if (Directory.Exists(temporaryPath) == false) Directory.CreateDirectory(temporaryPath); @@ -165,7 +172,7 @@ namespace Umbraco.Core.Packaging var compiledPackageXml = CreateCompiledPackageXml(out var root, out var filesXml); //Info section - root.Add(GetPackageInfoXml(definition)); + root.Add(GetPackageInfoXml(definition, _umbracoVersion)); PackageDocumentsAndTags(definition, root); PackageDocumentTypes(definition, root); @@ -178,13 +185,13 @@ namespace Umbraco.Core.Packaging //Files foreach (var fileName in definition.Files) - AppendFileToPackage(fileName, temporaryPath, filesXml); + AppendFileToPackage(fileName, temporaryPath, filesXml, _ioHelper); //Load view on install... if (!string.IsNullOrEmpty(definition.PackageView)) { var control = new XElement("view", definition.PackageView); - AppendFileToPackage(definition.PackageView, temporaryPath, filesXml); + AppendFileToPackage(definition.PackageView, temporaryPath, filesXml, _ioHelper); root.Add(control); } @@ -214,11 +221,11 @@ namespace Umbraco.Core.Packaging // check if there's a packages directory below media - if (Directory.Exists(Current.IOHelper.MapPath(_mediaFolderPath)) == false) - Directory.CreateDirectory(Current.IOHelper.MapPath(_mediaFolderPath)); + if (Directory.Exists(_ioHelper.MapPath(_mediaFolderPath)) == false) + Directory.CreateDirectory(_ioHelper.MapPath(_mediaFolderPath)); var packPath = _mediaFolderPath.EnsureEndsWith('/') + (definition.Name + "_" + definition.Version).Replace(' ', '_') + ".zip"; - ZipPackage(temporaryPath, Current.IOHelper.MapPath(packPath)); + ZipPackage(temporaryPath, _ioHelper.MapPath(packPath)); //we need to update the package path and save it definition.PackagePath = packPath; @@ -294,7 +301,7 @@ namespace Umbraco.Core.Packaging macros.Add(macroXml); //if the macro has a file copy it to the xml if (!string.IsNullOrEmpty(macro.MacroSource)) - AppendFileToPackage(macro.MacroSource, temporaryPath, filesXml); + AppendFileToPackage(macro.MacroSource, temporaryPath, filesXml,_ioHelper); } root.Add(macros); } @@ -444,12 +451,12 @@ namespace Umbraco.Core.Packaging /// The path. /// The package directory. /// The files xml node - private static void AppendFileToPackage(string path, string packageDirectory, XContainer filesXml) + private static void AppendFileToPackage(string path, string packageDirectory, XContainer filesXml, IIOHelper ioHelper) { if (!path.StartsWith("~/") && !path.StartsWith("/")) path = "~/" + path; - var serverPath = Current.IOHelper.MapPath(path); + var serverPath = ioHelper.MapPath(path); if (File.Exists(serverPath)) AppendFileXml(new FileInfo(serverPath), path, packageDirectory, filesXml); @@ -546,7 +553,7 @@ namespace Umbraco.Core.Packaging dtl.Add(dt); } - private static XElement GetPackageInfoXml(PackageDefinition definition) + private static XElement GetPackageInfoXml(PackageDefinition definition, IUmbracoVersion umbracoVersion) { var info = new XElement("info"); @@ -565,9 +572,9 @@ namespace Umbraco.Core.Packaging var requirements = new XElement("requirements"); - requirements.Add(new XElement("major", definition.UmbracoVersion == null ? Current.UmbracoVersion.SemanticVersion.Major.ToInvariantString() : definition.UmbracoVersion.Major.ToInvariantString())); - requirements.Add(new XElement("minor", definition.UmbracoVersion == null ? Current.UmbracoVersion.SemanticVersion.Minor.ToInvariantString() : definition.UmbracoVersion.Minor.ToInvariantString())); - requirements.Add(new XElement("patch", definition.UmbracoVersion == null ? Current.UmbracoVersion.SemanticVersion.Patch.ToInvariantString() : definition.UmbracoVersion.Build.ToInvariantString())); + requirements.Add(new XElement("major", definition.UmbracoVersion == null ? umbracoVersion.SemanticVersion.Major.ToInvariantString() : definition.UmbracoVersion.Major.ToInvariantString())); + requirements.Add(new XElement("minor", definition.UmbracoVersion == null ? umbracoVersion.SemanticVersion.Minor.ToInvariantString() : definition.UmbracoVersion.Minor.ToInvariantString())); + requirements.Add(new XElement("patch", definition.UmbracoVersion == null ? umbracoVersion.SemanticVersion.Patch.ToInvariantString() : definition.UmbracoVersion.Build.ToInvariantString())); if (definition.UmbracoVersion != null) requirements.Add(new XAttribute("type", RequirementsType.Strict.ToString())); @@ -609,11 +616,11 @@ namespace Umbraco.Core.Packaging private XDocument EnsureStorage(out string packagesFile) { - var packagesFolder = Current.IOHelper.MapPath(_packagesFolderPath); + var packagesFolder = _ioHelper.MapPath(_packagesFolderPath); //ensure it exists Directory.CreateDirectory(packagesFolder); - packagesFile = Current.IOHelper.MapPath(CreatedPackagesFile); + packagesFile = _ioHelper.MapPath(CreatedPackagesFile); if (!File.Exists(packagesFile)) { var xml = new XDocument(new XElement("packages")); diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewMacroRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewMacroRepository.cs index d707bcee10..03de23004e 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewMacroRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewMacroRepository.cs @@ -5,8 +5,8 @@ namespace Umbraco.Core.Persistence.Repositories.Implement { internal class PartialViewMacroRepository : PartialViewRepository, IPartialViewMacroRepository { - public PartialViewMacroRepository(IFileSystems fileSystems) - : base(fileSystems.MacroPartialsFileSystem) + public PartialViewMacroRepository(IFileSystems fileSystems, IIOHelper ioHelper) + : base(fileSystems.MacroPartialsFileSystem, ioHelper) { } protected override PartialViewType ViewType => PartialViewType.PartialViewMacro; diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewRepository.cs index fc6f60eb1d..d327cdd78c 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewRepository.cs @@ -10,13 +10,19 @@ namespace Umbraco.Core.Persistence.Repositories.Implement { internal class PartialViewRepository : FileRepository, IPartialViewRepository { - public PartialViewRepository(IFileSystems fileSystems) - : base(fileSystems.PartialViewsFileSystem) - { } + private readonly IIOHelper _ioHelper; - protected PartialViewRepository(IFileSystem fileSystem) + public PartialViewRepository(IFileSystems fileSystems, IIOHelper ioHelper) + : base(fileSystems.PartialViewsFileSystem) + { + _ioHelper = ioHelper; + } + + protected PartialViewRepository(IFileSystem fileSystem, IIOHelper ioHelper) : base(fileSystem) - { } + { + _ioHelper = ioHelper; + } protected virtual PartialViewType ViewType => PartialViewType.PartialView; @@ -104,8 +110,8 @@ namespace Umbraco.Core.Persistence.Repositories.Implement // validate path & extension var validDir = Constants.SystemDirectories.MvcViews; - var isValidPath = Current.IOHelper.VerifyEditPath(fullPath, validDir); - var isValidExtension = Current.IOHelper.VerifyFileExtension(fullPath, ValidExtensions); + var isValidPath = _ioHelper.VerifyEditPath(fullPath, validDir); + var isValidExtension = _ioHelper.VerifyFileExtension(fullPath, ValidExtensions); return isValidPath && isValidExtension; } diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/TemplateRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/TemplateRepository.cs index ac91134d2b..aa3d02bd30 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Implement/TemplateRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Implement/TemplateRepository.cs @@ -23,12 +23,14 @@ namespace Umbraco.Core.Persistence.Repositories.Implement /// internal class TemplateRepository : NPocoRepositoryBase, ITemplateRepository { + private readonly IIOHelper _ioHelper; private readonly IFileSystem _viewsFileSystem; private readonly ViewHelper _viewHelper; - public TemplateRepository(IScopeAccessor scopeAccessor, AppCaches cache, ILogger logger, IFileSystems fileSystems) + public TemplateRepository(IScopeAccessor scopeAccessor, AppCaches cache, ILogger logger, IFileSystems fileSystems, IIOHelper ioHelper) : base(scopeAccessor, cache, logger) { + _ioHelper = ioHelper; _viewsFileSystem = fileSystems.MvcViewsFileSystem; _viewHelper = new ViewHelper(_viewsFileSystem); } @@ -593,8 +595,8 @@ namespace Umbraco.Core.Persistence.Repositories.Implement validExts.Add("vbhtml"); // validate path and extension - var validFile = Current.IOHelper.VerifyEditPath(path, validDirs); - var validExtension = Current.IOHelper.VerifyFileExtension(path, validExts); + var validFile = _ioHelper.VerifyEditPath(path, validDirs); + var validExtension = _ioHelper.VerifyFileExtension(path, validExts); return validFile && validExtension; } diff --git a/src/Umbraco.Core/Runtime/CoreInitialComponent.cs b/src/Umbraco.Core/Runtime/CoreInitialComponent.cs index ac390a4e1e..40dd4575dc 100644 --- a/src/Umbraco.Core/Runtime/CoreInitialComponent.cs +++ b/src/Umbraco.Core/Runtime/CoreInitialComponent.cs @@ -5,15 +5,22 @@ namespace Umbraco.Core.Runtime { public class CoreInitialComponent : IComponent { + private readonly IIOHelper _ioHelper; + + public CoreInitialComponent(IIOHelper ioHelper) + { + _ioHelper = ioHelper; + } + public void Initialize() { // ensure we have some essential directories // every other component can then initialize safely - Current.IOHelper.EnsurePathExists(Constants.SystemDirectories.Data); - Current.IOHelper.EnsurePathExists(Current.Configs.Global().UmbracoMediaPath); - Current.IOHelper.EnsurePathExists(Constants.SystemDirectories.MvcViews); - Current.IOHelper.EnsurePathExists(Constants.SystemDirectories.PartialViews); - Current.IOHelper.EnsurePathExists(Constants.SystemDirectories.MacroPartials); + _ioHelper.EnsurePathExists(Constants.SystemDirectories.Data); + _ioHelper.EnsurePathExists(Current.Configs.Global().UmbracoMediaPath); + _ioHelper.EnsurePathExists(Constants.SystemDirectories.MvcViews); + _ioHelper.EnsurePathExists(Constants.SystemDirectories.PartialViews); + _ioHelper.EnsurePathExists(Constants.SystemDirectories.MacroPartials); } public void Terminate() diff --git a/src/Umbraco.Core/Runtime/CoreInitialComposer.cs b/src/Umbraco.Core/Runtime/CoreInitialComposer.cs index 61a9f472fe..2ab0de14ce 100644 --- a/src/Umbraco.Core/Runtime/CoreInitialComposer.cs +++ b/src/Umbraco.Core/Runtime/CoreInitialComposer.cs @@ -4,6 +4,7 @@ using Umbraco.Core.Composing; using Umbraco.Core.Composing.CompositionExtensions; using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Manifest; using Umbraco.Core.Migrations; @@ -102,7 +103,8 @@ namespace Umbraco.Core.Runtime factory.GetInstance(), factory.GetInstance(), factory.GetInstance(), - true, new DatabaseServerMessengerOptions())); + true, new DatabaseServerMessengerOptions(), + factory.GetInstance())); composition.WithCollectionBuilder() .Add(() => composition.TypeLoader.GetCacheRefreshers()); diff --git a/src/Umbraco.Core/Runtime/CoreRuntime.cs b/src/Umbraco.Core/Runtime/CoreRuntime.cs index 6e99cffc60..98d245c04e 100644 --- a/src/Umbraco.Core/Runtime/CoreRuntime.cs +++ b/src/Umbraco.Core/Runtime/CoreRuntime.cs @@ -246,7 +246,7 @@ namespace Umbraco.Core.Runtime { var path = GetApplicationRootPath(); if (string.IsNullOrWhiteSpace(path) == false) - Current.IOHelper.SetRootDirectory(path); + IOHelper.SetRootDirectory(path); } private bool AcquireMainDom(MainDom mainDom) diff --git a/src/Umbraco.Core/RuntimeState.cs b/src/Umbraco.Core/RuntimeState.cs index e0ce17f769..42a48579df 100644 --- a/src/Umbraco.Core/RuntimeState.cs +++ b/src/Umbraco.Core/RuntimeState.cs @@ -249,7 +249,7 @@ namespace Umbraco.Core protected virtual bool EnsureUmbracoUpgradeState(IUmbracoDatabaseFactory databaseFactory, ILogger logger) { - var upgrader = new Upgrader(new UmbracoPlan()); + var upgrader = new Upgrader(new UmbracoPlan(_umbracoVersion)); var stateValueKey = upgrader.StateValueKey; // no scope, no service - just directly accessing the database diff --git a/src/Umbraco.Core/Services/Implement/FileService.cs b/src/Umbraco.Core/Services/Implement/FileService.cs index 1d2694b18a..bf6fd6bb74 100644 --- a/src/Umbraco.Core/Services/Implement/FileService.cs +++ b/src/Umbraco.Core/Services/Implement/FileService.cs @@ -19,6 +19,7 @@ namespace Umbraco.Core.Services.Implement /// public class FileService : ScopeRepositoryService, IFileService { + private readonly IIOHelper _ioHelper; private readonly IStylesheetRepository _stylesheetRepository; private readonly IScriptRepository _scriptRepository; private readonly ITemplateRepository _templateRepository; @@ -29,12 +30,13 @@ namespace Umbraco.Core.Services.Implement private const string PartialViewHeader = "@inherits Umbraco.Web.Mvc.UmbracoViewPage"; private const string PartialViewMacroHeader = "@inherits Umbraco.Web.Macros.PartialViewMacroPage"; - public FileService(IScopeProvider uowProvider, ILogger logger, IEventMessagesFactory eventMessagesFactory, + public FileService(IScopeProvider uowProvider, IIOHelper ioHelper, ILogger logger, IEventMessagesFactory eventMessagesFactory, IStylesheetRepository stylesheetRepository, IScriptRepository scriptRepository, ITemplateRepository templateRepository, IPartialViewRepository partialViewRepository, IPartialViewMacroRepository partialViewMacroRepository, IAuditRepository auditRepository) : base(uowProvider, logger, eventMessagesFactory) { + _ioHelper = ioHelper; _stylesheetRepository = stylesheetRepository; _scriptRepository = scriptRepository; _templateRepository = templateRepository; @@ -664,7 +666,7 @@ namespace Umbraco.Core.Services.Implement public IEnumerable GetPartialViewSnippetNames(params string[] filterNames) { - var snippetPath = Current.IOHelper.MapPath($"{Current.Configs.Global().UmbracoPath}/PartialViewMacros/Templates/"); + var snippetPath = _ioHelper.MapPath($"{Current.Configs.Global().UmbracoPath}/PartialViewMacros/Templates/"); var files = Directory.GetFiles(snippetPath, "*.cshtml") .Select(Path.GetFileNameWithoutExtension) .Except(filterNames, StringComparer.InvariantCultureIgnoreCase) @@ -898,7 +900,7 @@ namespace Umbraco.Core.Services.Implement fileName += ".cshtml"; } - var snippetPath = Current.IOHelper.MapPath($"{Current.Configs.Global().UmbracoPath}/PartialViewMacros/Templates/{fileName}"); + var snippetPath = _ioHelper.MapPath($"{Current.Configs.Global().UmbracoPath}/PartialViewMacros/Templates/{fileName}"); return System.IO.File.Exists(snippetPath) ? Attempt.Succeed(snippetPath) : Attempt.Fail(); diff --git a/src/Umbraco.Core/Services/Implement/NotificationService.cs b/src/Umbraco.Core/Services/Implement/NotificationService.cs index a57b3a6d29..c89cb27623 100644 --- a/src/Umbraco.Core/Services/Implement/NotificationService.cs +++ b/src/Umbraco.Core/Services/Implement/NotificationService.cs @@ -30,9 +30,10 @@ namespace Umbraco.Core.Services.Implement private readonly IGlobalSettings _globalSettings; private readonly IContentSection _contentSection; private readonly ILogger _logger; + private readonly IIOHelper _ioHelper; public NotificationService(IScopeProvider provider, IUserService userService, IContentService contentService, ILocalizationService localizationService, - ILogger logger, INotificationsRepository notificationsRepository, IGlobalSettings globalSettings, IContentSection contentSection) + ILogger logger, IIOHelper ioHelper, INotificationsRepository notificationsRepository, IGlobalSettings globalSettings, IContentSection contentSection) { _notificationsRepository = notificationsRepository; _globalSettings = globalSettings; @@ -42,6 +43,7 @@ namespace Umbraco.Core.Services.Implement _contentService = contentService ?? throw new ArgumentNullException(nameof(contentService)); _localizationService = localizationService; _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _ioHelper = ioHelper; } /// @@ -384,7 +386,7 @@ namespace Umbraco.Core.Services.Implement var protocol = _globalSettings.UseHttps ? "https" : "http"; var subjectVars = new NotificationEmailSubjectParams( - string.Concat(siteUri.Authority, Current.IOHelper.ResolveUrl(Current.Configs.Global().UmbracoPath)), + string.Concat(siteUri.Authority, _ioHelper.ResolveUrl(Current.Configs.Global().UmbracoPath)), actionName, content.Name); @@ -400,7 +402,7 @@ namespace Umbraco.Core.Services.Implement string.Concat(content.Id, ".aspx"), protocol), performingUser.Name, - string.Concat(siteUri.Authority, Current.IOHelper.ResolveUrl(Current.Configs.Global().UmbracoPath)), + string.Concat(siteUri.Authority, _ioHelper.ResolveUrl(Current.Configs.Global().UmbracoPath)), summary.ToString()); // create the mail message diff --git a/src/Umbraco.Core/Services/Implement/PackagingService.cs b/src/Umbraco.Core/Services/Implement/PackagingService.cs index 6744b3234a..7fd9be6dee 100644 --- a/src/Umbraco.Core/Services/Implement/PackagingService.cs +++ b/src/Umbraco.Core/Services/Implement/PackagingService.cs @@ -23,6 +23,7 @@ namespace Umbraco.Core.Services.Implement { private readonly IPackageInstallation _packageInstallation; + private readonly IIOHelper _ioHelper; private readonly IAuditService _auditService; private readonly ICreatedPackagesRepository _createdPackages; private readonly IInstalledPackagesRepository _installedPackages; @@ -32,12 +33,14 @@ namespace Umbraco.Core.Services.Implement IAuditService auditService, ICreatedPackagesRepository createdPackages, IInstalledPackagesRepository installedPackages, - IPackageInstallation packageInstallation) + IPackageInstallation packageInstallation, + IIOHelper ioHelper) { _auditService = auditService; _createdPackages = createdPackages; _installedPackages = installedPackages; _packageInstallation = packageInstallation; + _ioHelper = ioHelper; } #region Package Files @@ -64,7 +67,7 @@ namespace Umbraco.Core.Services.Implement //successful if (bytes.Length > 0) { - var packagePath = Current.IOHelper.MapPath(Constants.SystemDirectories.Packages); + var packagePath = _ioHelper.MapPath(Constants.SystemDirectories.Packages); // Check for package directory if (Directory.Exists(packagePath) == false) diff --git a/src/Umbraco.Core/StringExtensions.cs b/src/Umbraco.Core/StringExtensions.cs index 027b5fc928..854a96a51f 100644 --- a/src/Umbraco.Core/StringExtensions.cs +++ b/src/Umbraco.Core/StringExtensions.cs @@ -112,7 +112,9 @@ namespace Umbraco.Core if (isValid) { - var resolvedUrlResult = Current.IOHelper.TryResolveUrl(input); + var ioHelper = Current.Factory.GetInstance(); + + var resolvedUrlResult = ioHelper.TryResolveUrl(input); //if the resolution was success, return it, otherwise just return the path, we've detected // it's a path but maybe it's relative and resolution has failed, etc... in which case we're just // returning what was given to us. diff --git a/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs b/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs index 118080feb6..f616007f73 100644 --- a/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs +++ b/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs @@ -34,6 +34,7 @@ namespace Umbraco.Core.Sync private readonly ManualResetEvent _syncIdle; private readonly object _locko = new object(); private readonly IProfilingLogger _profilingLogger; + private readonly IIOHelper _ioHelper; private readonly ISqlContext _sqlContext; private readonly Lazy _distCacheFilePath; private int _lastId = -1; @@ -47,13 +48,14 @@ namespace Umbraco.Core.Sync public DatabaseServerMessenger( IRuntimeState runtime, IScopeProvider scopeProvider, ISqlContext sqlContext, IProfilingLogger proflog, IGlobalSettings globalSettings, - bool distributedEnabled, DatabaseServerMessengerOptions options) + bool distributedEnabled, DatabaseServerMessengerOptions options, IIOHelper ioHelper) : base(distributedEnabled) { ScopeProvider = scopeProvider ?? throw new ArgumentNullException(nameof(scopeProvider)); _sqlContext = sqlContext; _runtime = runtime; _profilingLogger = proflog ?? throw new ArgumentNullException(nameof(proflog)); + _ioHelper = ioHelper; Logger = proflog; Options = options ?? throw new ArgumentNullException(nameof(options)); _lastPruned = _lastSync = DateTime.UtcNow; @@ -534,7 +536,7 @@ namespace Umbraco.Core.Sync { var fileName = HttpRuntime.AppDomainAppId.ReplaceNonAlphanumericChars(string.Empty) + "-lastsynced.txt"; - var distCacheFilePath = Path.Combine(globalSettings.LocalTempPath(Current.IOHelper), "DistCache", fileName); + var distCacheFilePath = Path.Combine(globalSettings.LocalTempPath(_ioHelper), "DistCache", fileName); //ensure the folder exists var folder = Path.GetDirectoryName(distCacheFilePath); diff --git a/src/Umbraco.Core/TypeExtensions.cs b/src/Umbraco.Core/TypeExtensions.cs index f867b1cd14..9d4d196bb5 100644 --- a/src/Umbraco.Core/TypeExtensions.cs +++ b/src/Umbraco.Core/TypeExtensions.cs @@ -97,19 +97,7 @@ namespace Umbraco.Core && (type.Attributes & TypeAttributes.NotPublic) == TypeAttributes.NotPublic; } - public static T GetCustomAttribute(this Type type, bool inherit) - where T : Attribute - { - return type.GetCustomAttributes(inherit).SingleOrDefault(); - } - - public static IEnumerable GetCustomAttributes(this Type type, bool inherited) - where T : Attribute - { - if (type == null) return Enumerable.Empty(); - return type.GetCustomAttributes(typeof (T), inherited).OfType(); - } - + /// /// Determines whether the specified type is enumerable. diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 3481c71d98..ed18c23ef6 100755 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -151,6 +151,7 @@ + @@ -199,6 +200,7 @@ + @@ -218,7 +220,6 @@ - @@ -230,15 +231,14 @@ - + - + - @@ -247,8 +247,6 @@ - - @@ -307,11 +305,8 @@ - - - @@ -369,27 +364,6 @@ - - - - - - - - - - - - - - - - - - - - - @@ -410,18 +384,14 @@ - - - - @@ -850,17 +820,13 @@ - - - - @@ -868,13 +834,7 @@ - - - - - - @@ -907,9 +867,6 @@ - - - Component diff --git a/src/Umbraco.Examine/LuceneIndexCreator.cs b/src/Umbraco.Examine/LuceneIndexCreator.cs index d6bf8c262c..ccc0248868 100644 --- a/src/Umbraco.Examine/LuceneIndexCreator.cs +++ b/src/Umbraco.Examine/LuceneIndexCreator.cs @@ -18,10 +18,12 @@ namespace Umbraco.Examine public abstract class LuceneIndexCreator : IIndexCreator { private readonly ITypeFinder _typeFinder; + private readonly IIOHelper _ioHelper; - protected LuceneIndexCreator(ITypeFinder typeFinder) + protected LuceneIndexCreator(ITypeFinder typeFinder, IIOHelper ioHelper) { _typeFinder = typeFinder; + _ioHelper = ioHelper; } public abstract IEnumerable Create(); @@ -36,7 +38,7 @@ namespace Umbraco.Examine public virtual Lucene.Net.Store.Directory CreateFileSystemLuceneDirectory(string folderName) { - var dirInfo = new DirectoryInfo(Path.Combine(Current.IOHelper.MapPath(Constants.SystemDirectories.TempData), "ExamineIndexes", folderName)); + var dirInfo = new DirectoryInfo(Path.Combine(_ioHelper.MapPath(Constants.SystemDirectories.TempData), "ExamineIndexes", folderName)); if (!dirInfo.Exists) System.IO.Directory.CreateDirectory(dirInfo.FullName); diff --git a/src/Umbraco.Examine/LuceneIndexDiagnostics.cs b/src/Umbraco.Examine/LuceneIndexDiagnostics.cs index 3b23b57709..81ec7e3dcb 100644 --- a/src/Umbraco.Examine/LuceneIndexDiagnostics.cs +++ b/src/Umbraco.Examine/LuceneIndexDiagnostics.cs @@ -13,11 +13,11 @@ namespace Umbraco.Examine { private IIOHelper _ioHelper; - public LuceneIndexDiagnostics(LuceneIndex index, ILogger logger) + public LuceneIndexDiagnostics(LuceneIndex index, ILogger logger, IIOHelper ioHelper) { Index = index; Logger = logger; - _ioHelper = Current.IOHelper; + _ioHelper = ioHelper; } public LuceneIndex Index { get; } diff --git a/src/Umbraco.Examine/Umbraco.Examine.csproj b/src/Umbraco.Examine/Umbraco.Examine.csproj index 3b77b20d42..ca2a9cec22 100644 --- a/src/Umbraco.Examine/Umbraco.Examine.csproj +++ b/src/Umbraco.Examine/Umbraco.Examine.csproj @@ -116,4 +116,4 @@ - + \ No newline at end of file diff --git a/src/Umbraco.Examine/UmbracoContentIndex.cs b/src/Umbraco.Examine/UmbracoContentIndex.cs index e266ca789d..33fd2d0ee7 100644 --- a/src/Umbraco.Examine/UmbracoContentIndex.cs +++ b/src/Umbraco.Examine/UmbracoContentIndex.cs @@ -11,6 +11,7 @@ using Lucene.Net.Store; using Umbraco.Core.Composing; using Umbraco.Core.Logging; using Examine.LuceneEngine; +using Umbraco.Core.IO; namespace Umbraco.Examine { @@ -32,6 +33,8 @@ namespace Umbraco.Examine /// /// /// + /// + /// /// /// /// @@ -41,10 +44,12 @@ namespace Umbraco.Examine FieldDefinitionCollection fieldDefinitions, Analyzer defaultAnalyzer, IProfilingLogger profilingLogger, + IIOHelper ioHelper, + IRuntimeState runtimeState, ILocalizationService languageService, IContentValueSetValidator validator, IReadOnlyDictionary indexValueTypes = null) - : base(name, luceneDirectory, fieldDefinitions, defaultAnalyzer, profilingLogger, validator, indexValueTypes) + : base(name, luceneDirectory, fieldDefinitions, defaultAnalyzer, profilingLogger, ioHelper, runtimeState, validator, indexValueTypes) { if (validator == null) throw new ArgumentNullException(nameof(validator)); LanguageService = languageService ?? throw new ArgumentNullException(nameof(languageService)); diff --git a/src/Umbraco.Examine/UmbracoExamineIndex.cs b/src/Umbraco.Examine/UmbracoExamineIndex.cs index e1dd77b994..f7dfcf6375 100644 --- a/src/Umbraco.Examine/UmbracoExamineIndex.cs +++ b/src/Umbraco.Examine/UmbracoExamineIndex.cs @@ -9,7 +9,7 @@ using Umbraco.Core; using Examine; using Examine.LuceneEngine; using Lucene.Net.Store; -using Umbraco.Core.Composing; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Directory = Lucene.Net.Store.Directory; @@ -21,6 +21,7 @@ namespace Umbraco.Examine /// public abstract class UmbracoExamineIndex : LuceneIndex, IUmbracoIndex, IIndexDiagnostics { + private readonly IRuntimeState _runtimeState; // note // wrapping all operations that end up calling base.SafelyProcessQueueItems in a safe call // context because they will fork a thread/task/whatever which should *not* capture our @@ -49,6 +50,8 @@ namespace Umbraco.Examine /// /// /// + /// + /// /// /// protected UmbracoExamineIndex( @@ -57,17 +60,20 @@ namespace Umbraco.Examine FieldDefinitionCollection fieldDefinitions, Analyzer defaultAnalyzer, IProfilingLogger profilingLogger, + IIOHelper ioHelper, + IRuntimeState runtimeState, IValueSetValidator validator = null, IReadOnlyDictionary indexValueTypes = null) : base(name, luceneDirectory, fieldDefinitions, defaultAnalyzer, validator, indexValueTypes) { + _runtimeState = runtimeState; ProfilingLogger = profilingLogger ?? throw new ArgumentNullException(nameof(profilingLogger)); //try to set the value of `LuceneIndexFolder` for diagnostic reasons if (luceneDirectory is FSDirectory fsDir) LuceneIndexFolder = fsDir.Directory; - _diagnostics = new UmbracoExamineIndexDiagnostics(this, ProfilingLogger); + _diagnostics = new UmbracoExamineIndexDiagnostics(this, ProfilingLogger, ioHelper); } private readonly bool _configBased = false; @@ -114,7 +120,7 @@ namespace Umbraco.Examine { // only affects indexers that are config file based, if an index was created via code then // this has no effect, it is assumed the index would not be created if it could not be initialized - return _configBased == false || Current.RuntimeState.Level == RuntimeLevel.Run; + return _configBased == false || _runtimeState.Level == RuntimeLevel.Run; } /// @@ -185,7 +191,7 @@ namespace Umbraco.Examine e.ValueSet.Values[IconFieldName] = icon; } } - + #region IIndexDiagnostics private readonly UmbracoExamineIndexDiagnostics _diagnostics; diff --git a/src/Umbraco.Examine/UmbracoExamineIndexDiagnostics.cs b/src/Umbraco.Examine/UmbracoExamineIndexDiagnostics.cs index 4a926deebe..2ac8fde960 100644 --- a/src/Umbraco.Examine/UmbracoExamineIndexDiagnostics.cs +++ b/src/Umbraco.Examine/UmbracoExamineIndexDiagnostics.cs @@ -11,8 +11,8 @@ namespace Umbraco.Examine { private readonly UmbracoExamineIndex _index; - public UmbracoExamineIndexDiagnostics(UmbracoExamineIndex index, ILogger logger) - : base(index, logger) + public UmbracoExamineIndexDiagnostics(UmbracoExamineIndex index, ILogger logger, IIOHelper ioHelper) + : base(index, logger, ioHelper) { _index = index; } diff --git a/src/Umbraco.Examine/UmbracoIndexConfig.cs b/src/Umbraco.Examine/UmbracoIndexConfig.cs index 7ad9c638d3..a840c730ea 100644 --- a/src/Umbraco.Examine/UmbracoIndexConfig.cs +++ b/src/Umbraco.Examine/UmbracoIndexConfig.cs @@ -1,6 +1,5 @@ using Examine; using Umbraco.Core.Services; -using Umbraco.Core.Services.Implement; namespace Umbraco.Examine { diff --git a/src/Umbraco.Examine/UmbracoMemberIndex.cs b/src/Umbraco.Examine/UmbracoMemberIndex.cs index 445707ab0c..494c661062 100644 --- a/src/Umbraco.Examine/UmbracoMemberIndex.cs +++ b/src/Umbraco.Examine/UmbracoMemberIndex.cs @@ -2,6 +2,8 @@ using Examine; using Examine.LuceneEngine; using Lucene.Net.Analysis; +using Umbraco.Core; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Directory = Lucene.Net.Store.Directory; @@ -20,6 +22,7 @@ namespace Umbraco.Examine /// /// /// + /// /// /// public UmbracoMemberIndex( @@ -28,8 +31,10 @@ namespace Umbraco.Examine Directory luceneDirectory, Analyzer analyzer, IProfilingLogger profilingLogger, + IIOHelper ioHelper, + IRuntimeState runtimeState, IValueSetValidator validator = null) : - base(name, luceneDirectory, fieldDefinitions, analyzer, profilingLogger, validator) + base(name, luceneDirectory, fieldDefinitions, analyzer, profilingLogger, ioHelper, runtimeState, validator) { } diff --git a/src/Umbraco.Tests.Benchmarks/BulkInsertBenchmarks.cs b/src/Umbraco.Tests.Benchmarks/BulkInsertBenchmarks.cs index dc260c4a3b..aab1528987 100644 --- a/src/Umbraco.Tests.Benchmarks/BulkInsertBenchmarks.cs +++ b/src/Umbraco.Tests.Benchmarks/BulkInsertBenchmarks.cs @@ -5,6 +5,7 @@ using System.IO; using System.Linq; using BenchmarkDotNet.Attributes; using Umbraco.Core; +using Umbraco.Core.Configuration; using Umbraco.Core.Logging; using Umbraco.Core.Migrations.Install; using Umbraco.Core.Persistence; @@ -51,8 +52,8 @@ namespace Umbraco.Tests.Benchmarks { var logger = new DebugDiagnosticsLogger(new MessageTemplates()); var path = TestHelper.CurrentAssemblyDirectory; - - SetupSqlCe(path, logger); + var umbracoVersion = TestHelper.GetUmbracoVersion(); + SetupSqlCe(path, logger, umbracoVersion); SetupSqlServer(logger); @@ -83,7 +84,7 @@ namespace Umbraco.Tests.Benchmarks )"); } - private void SetupSqlCe(string path, ILogger logger) + private void SetupSqlCe(string path, ILogger logger, IUmbracoVersion umbracoVersion) { var dbName = string.Concat("Umb", Guid.NewGuid(), ".sdf"); AppDomain.CurrentDomain.SetData("DataDirectory", path); @@ -102,7 +103,7 @@ namespace Umbraco.Tests.Benchmarks //use the db to create the initial schema so we can reuse in each bench using (_dbSqlCe = GetSqlCeDatabase(sqlCeConnectionString, logger)) { - var creation = new DatabaseSchemaCreator(_dbSqlCe, logger); + var creation = new DatabaseSchemaCreator(_dbSqlCe, logger, umbracoVersion); creation.InitializeDatabaseSchema(); } _initDbBytes = File.ReadAllBytes(_dbFile); diff --git a/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs b/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs index 65027edc73..fba922b2c4 100644 --- a/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs +++ b/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs @@ -1,9 +1,7 @@ using Moq; using NUnit.Framework; -using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; -using Umbraco.Core.IO; using Umbraco.Tests.TestHelpers; namespace Umbraco.Tests.Configurations @@ -26,13 +24,6 @@ namespace Umbraco.Tests.Configurations Current.IOHelper.Root = _root; } - [Ignore("fixme - ignored test")] - [Test] - public void Is_Version_From_Assembly_Correct() - { - Assert.That(Current.UmbracoVersion.SemanticVersion, Is.EqualTo("6.0.0")); - } - [TestCase("~/umbraco", "/", "umbraco")] [TestCase("~/umbraco", "/MyVirtualDir", "umbraco")] [TestCase("~/customPath", "/MyVirtualDir/", "custompath")] diff --git a/src/Umbraco.Tests/IO/FileSystemsTests.cs b/src/Umbraco.Tests/IO/FileSystemsTests.cs index 48ed9adbb1..8030927233 100644 --- a/src/Umbraco.Tests/IO/FileSystemsTests.cs +++ b/src/Umbraco.Tests/IO/FileSystemsTests.cs @@ -33,6 +33,7 @@ namespace Umbraco.Tests.IO composition.Register(_ => Mock.Of()); composition.Register(_ => Mock.Of()); composition.Register(_ => Mock.Of()); + composition.Register(_ => IOHelper.Default); composition.RegisterUnique(); composition.RegisterUnique(IOHelper.Default); @@ -106,7 +107,8 @@ namespace Umbraco.Tests.IO fs.AddFile(virtPath, ms); // ~/media/1234/file.txt exists - var physPath = Current.IOHelper.MapPath(Path.Combine("media", virtPath)); + var ioHelper = _factory.GetInstance(); + var physPath = ioHelper.MapPath(Path.Combine("media", virtPath)); Assert.IsTrue(File.Exists(physPath)); // ~/media/1234/file.txt is gone diff --git a/src/Umbraco.Tests/IO/IoHelperTests.cs b/src/Umbraco.Tests/IO/IoHelperTests.cs index 6c45f416b9..55bd34c14a 100644 --- a/src/Umbraco.Tests/IO/IoHelperTests.cs +++ b/src/Umbraco.Tests/IO/IoHelperTests.cs @@ -18,13 +18,15 @@ namespace Umbraco.Tests.IO [TestCase("../Scripts", "/Scripts", typeof(ArgumentException))] public void IOHelper_ResolveUrl(string input, string expected, Type expectedExceptionType) { + var ioHelper = new IOHelper(); + if (expectedExceptionType != null) { - Assert.Throws(expectedExceptionType, () => Current.IOHelper.ResolveUrl(input)); + Assert.Throws(expectedExceptionType, () =>ioHelper.ResolveUrl(input)); } else { - var result = Current.IOHelper.ResolveUrl(input); + var result = ioHelper.ResolveUrl(input); Assert.AreEqual(expected, result); } } diff --git a/src/Umbraco.Tests/IO/PhysicalFileSystemTests.cs b/src/Umbraco.Tests/IO/PhysicalFileSystemTests.cs index 5e826af5cc..d5429b2da0 100644 --- a/src/Umbraco.Tests/IO/PhysicalFileSystemTests.cs +++ b/src/Umbraco.Tests/IO/PhysicalFileSystemTests.cs @@ -3,8 +3,8 @@ using System.IO; using System.Text; using System.Threading; using NUnit.Framework; -using Umbraco.Core.Composing; using Umbraco.Core.IO; +using Umbraco.Web.Composing; namespace Umbraco.Tests.IO @@ -14,7 +14,7 @@ namespace Umbraco.Tests.IO public class PhysicalFileSystemTests : AbstractFileSystemTests { public PhysicalFileSystemTests() - : base(new PhysicalFileSystem(Current.IOHelper, Current.Logger, Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "FileSysTests"), + : base(new PhysicalFileSystem(IOHelper.Default, Current.Logger, Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "FileSysTests"), "/Media/")) { } diff --git a/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs b/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs index 8e204d1bfe..623628ed6f 100644 --- a/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs +++ b/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs @@ -26,7 +26,7 @@ namespace Umbraco.Tests.IO public void SetUp() { SafeCallContext.Clear(); - ClearFiles(); + ClearFiles(IOHelper.Default); FileSystems.ResetShadowId(); } @@ -34,14 +34,14 @@ namespace Umbraco.Tests.IO public void TearDown() { SafeCallContext.Clear(); - ClearFiles(); + ClearFiles(IOHelper.Default); FileSystems.ResetShadowId(); } - private static void ClearFiles() + private static void ClearFiles(IIOHelper ioHelper) { - TestHelper.DeleteDirectory(Current.IOHelper.MapPath("FileSysTests")); - TestHelper.DeleteDirectory(Current.IOHelper.MapPath(Constants.SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs")); + TestHelper.DeleteDirectory(ioHelper.MapPath("FileSysTests")); + TestHelper.DeleteDirectory(ioHelper.MapPath(Constants.SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs")); } private static string NormPath(string path) @@ -52,13 +52,15 @@ namespace Umbraco.Tests.IO [Test] public void ShadowDeleteDirectory() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); var ss = new ShadowFileSystem(fs, sfs); Directory.CreateDirectory(path + "/ShadowTests/d1"); @@ -86,13 +88,15 @@ namespace Umbraco.Tests.IO [Test] public void ShadowDeleteDirectoryInDir() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); var ss = new ShadowFileSystem(fs, sfs); Directory.CreateDirectory(path + "/ShadowTests/sub"); @@ -135,13 +139,15 @@ namespace Umbraco.Tests.IO [Test] public void ShadowDeleteFile() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); var ss = new ShadowFileSystem(fs, sfs); File.WriteAllText(path + "/ShadowTests/f1.txt", "foo"); @@ -174,13 +180,16 @@ namespace Umbraco.Tests.IO [Test] public void ShadowDeleteFileInDir() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); + Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); var ss = new ShadowFileSystem(fs, sfs); Directory.CreateDirectory(path + "/ShadowTests/sub"); @@ -229,13 +238,15 @@ namespace Umbraco.Tests.IO [Test] public void ShadowCantCreateFile() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); var ss = new ShadowFileSystem(fs, sfs); Assert.Throws(() => @@ -248,13 +259,15 @@ namespace Umbraco.Tests.IO [Test] public void ShadowCreateFile() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); var ss = new ShadowFileSystem(fs, sfs); File.WriteAllText(path + "/ShadowTests/f2.txt", "foo"); @@ -287,13 +300,15 @@ namespace Umbraco.Tests.IO [Test] public void ShadowCreateFileInDir() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); var ss = new ShadowFileSystem(fs, sfs); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) @@ -327,13 +342,15 @@ namespace Umbraco.Tests.IO [Test] public void ShadowAbort() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); var ss = new ShadowFileSystem(fs, sfs); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) @@ -349,13 +366,15 @@ namespace Umbraco.Tests.IO [Test] public void ShadowComplete() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); var ss = new ShadowFileSystem(fs, sfs); Directory.CreateDirectory(path + "/ShadowTests/sub/sub"); @@ -386,18 +405,19 @@ namespace Umbraco.Tests.IO public void ShadowScopeComplete() { var logger = Mock.Of(); + var ioHelper = IOHelper.Default; - var path = Current.IOHelper.MapPath("FileSysTests"); - var shadowfs = Current.IOHelper.MapPath(Constants.SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs"); + var path = ioHelper.MapPath("FileSysTests"); + var shadowfs = ioHelper.MapPath(Constants.SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs"); Directory.CreateDirectory(path); Directory.CreateDirectory(shadowfs); var scopedFileSystems = false; - var phy = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path, "ignore"); + var phy = new PhysicalFileSystem(ioHelper, Current.Logger, path, "ignore"); var container = Mock.Of(); - var fileSystems = new FileSystems(container, logger, IOHelper.Default, SettingsForTests.GenerateMockGlobalSettings()) { IsScoped = () => scopedFileSystems }; + var fileSystems = new FileSystems(container, logger, ioHelper, SettingsForTests.GenerateMockGlobalSettings()) { IsScoped = () => scopedFileSystems }; var fs = fileSystems.GetFileSystem(phy); var sw = (ShadowWrapper) fs.InnerFileSystem; @@ -408,7 +428,7 @@ namespace Umbraco.Tests.IO string id; // explicit shadow without scope does not work - sw.Shadow(id = ShadowWrapper.CreateShadowId(Current.IOHelper)); + sw.Shadow(id = ShadowWrapper.CreateShadowId(ioHelper)); Assert.IsTrue(Directory.Exists(shadowfs + "/" + id)); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) sw.AddFile("sub/f2.txt", ms); @@ -419,7 +439,7 @@ namespace Umbraco.Tests.IO // shadow with scope but no complete does not complete scopedFileSystems = true; // pretend we have a scope - var scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId(Current.IOHelper)); + var scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId(ioHelper)); Assert.IsTrue(Directory.Exists(shadowfs + "/" + id)); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) sw.AddFile("sub/f3.txt", ms); @@ -441,7 +461,7 @@ namespace Umbraco.Tests.IO // shadow with scope and complete does complete scopedFileSystems = true; // pretend we have a scope - scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId(Current.IOHelper)); + scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId(ioHelper)); Assert.IsTrue(Directory.Exists(shadowfs + "/" + id)); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) sw.AddFile("sub/f4.txt", ms); @@ -457,7 +477,7 @@ namespace Umbraco.Tests.IO // test scope for "another thread" scopedFileSystems = true; // pretend we have a scope - scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId(Current.IOHelper)); + scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId(ioHelper)); Assert.IsTrue(Directory.Exists(shadowfs + "/" + id)); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) sw.AddFile("sub/f5.txt", ms); @@ -481,17 +501,18 @@ namespace Umbraco.Tests.IO public void ShadowScopeCompleteWithFileConflict() { var logger = Mock.Of(); + var ioHelper = IOHelper.Default; - var path = Current.IOHelper.MapPath("FileSysTests"); - var shadowfs = Current.IOHelper.MapPath(Constants.SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs"); + var path = ioHelper.MapPath("FileSysTests"); + var shadowfs = ioHelper.MapPath(Constants.SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs"); Directory.CreateDirectory(path); var scopedFileSystems = false; - var phy = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path, "ignore"); + var phy = new PhysicalFileSystem(ioHelper, Current.Logger, path, "ignore"); var container = Mock.Of(); - var fileSystems = new FileSystems(container, logger, IOHelper.Default, SettingsForTests.GenerateMockGlobalSettings()) { IsScoped = () => scopedFileSystems }; + var fileSystems = new FileSystems(container, logger, ioHelper, SettingsForTests.GenerateMockGlobalSettings()) { IsScoped = () => scopedFileSystems }; var fs = fileSystems.GetFileSystem( phy); var sw = (ShadowWrapper) fs.InnerFileSystem; @@ -502,7 +523,7 @@ namespace Umbraco.Tests.IO string id; scopedFileSystems = true; // pretend we have a scope - var scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId(Current.IOHelper)); + var scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId(ioHelper)); Assert.IsTrue(Directory.Exists(shadowfs + "/" + id)); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) sw.AddFile("sub/f2.txt", ms); @@ -534,17 +555,18 @@ namespace Umbraco.Tests.IO public void ShadowScopeCompleteWithDirectoryConflict() { var logger = Mock.Of(); + var ioHelper = IOHelper.Default; - var path = Current.IOHelper.MapPath("FileSysTests"); - var shadowfs = Current.IOHelper.MapPath(Constants.SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs"); + var path = ioHelper.MapPath("FileSysTests"); + var shadowfs = ioHelper.MapPath(Constants.SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs"); Directory.CreateDirectory(path); var scopedFileSystems = false; - var phy = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path, "ignore"); + var phy = new PhysicalFileSystem(ioHelper, Current.Logger, path, "ignore"); var container = Mock.Of(); - var fileSystems = new FileSystems(container, logger, IOHelper.Default, SettingsForTests.GenerateMockGlobalSettings()) { IsScoped = () => scopedFileSystems }; + var fileSystems = new FileSystems(container, logger, ioHelper, SettingsForTests.GenerateMockGlobalSettings()) { IsScoped = () => scopedFileSystems }; var fs = fileSystems.GetFileSystem( phy); var sw = (ShadowWrapper)fs.InnerFileSystem; @@ -555,7 +577,7 @@ namespace Umbraco.Tests.IO string id; scopedFileSystems = true; // pretend we have a scope - var scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId(Current.IOHelper)); + var scope = new ShadowFileSystems(fileSystems, id = ShadowWrapper.CreateShadowId(ioHelper)); Assert.IsTrue(Directory.Exists(shadowfs + "/" + id)); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes("foo"))) sw.AddFile("sub/f2.txt", ms); @@ -603,7 +625,9 @@ namespace Umbraco.Tests.IO [Test] public void GetFilesReturnsChildrenOnly() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); File.WriteAllText(path + "/f1.txt", "foo"); Directory.CreateDirectory(path + "/test"); @@ -625,7 +649,9 @@ namespace Umbraco.Tests.IO [Test] public void DeleteDirectoryAndFiles() { - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); File.WriteAllText(path + "/f1.txt", "foo"); Directory.CreateDirectory(path + "/test"); @@ -646,13 +672,15 @@ namespace Umbraco.Tests.IO public void ShadowGetFiles() { // Arrange - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); var ss = new ShadowFileSystem(fs, sfs); // Act @@ -678,13 +706,15 @@ namespace Umbraco.Tests.IO public void ShadowGetFilesUsingEmptyFilter() { // Arrange - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); var ss = new ShadowFileSystem(fs, sfs); // Act @@ -713,13 +743,15 @@ namespace Umbraco.Tests.IO public void ShadowGetFilesUsingNullFilter() { // Arrange - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); var ss = new ShadowFileSystem(fs, sfs); // Act @@ -745,13 +777,15 @@ namespace Umbraco.Tests.IO public void ShadowGetFilesUsingWildcardFilter() { // Arrange - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); var ss = new ShadowFileSystem(fs, sfs); // Act @@ -780,13 +814,15 @@ namespace Umbraco.Tests.IO public void ShadowGetFilesUsingSingleCharacterFilter() { // Arrange - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); var ss = new ShadowFileSystem(fs, sfs); // Act @@ -827,13 +863,15 @@ namespace Umbraco.Tests.IO public void ShadowGetFullPath() { // Arrange - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); var ss = new ShadowFileSystem(fs, sfs); // Act @@ -861,13 +899,15 @@ namespace Umbraco.Tests.IO public void ShadowGetRelativePath() { // Arrange - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "ignore"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "ignore"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "ignore"); var ss = new ShadowFileSystem(fs, sfs); // Act @@ -900,13 +940,15 @@ namespace Umbraco.Tests.IO public void ShadowGetUrl() { // Arrange - var path = Current.IOHelper.MapPath("FileSysTests"); + var ioHelper = IOHelper.Default; + + var path = ioHelper.MapPath("FileSysTests"); Directory.CreateDirectory(path); Directory.CreateDirectory(path + "/ShadowTests"); Directory.CreateDirectory(path + "/ShadowSystem"); - var fs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowTests/", "rootUrl"); - var sfs = new PhysicalFileSystem(Current.IOHelper, Current.Logger, path + "/ShadowSystem/", "rootUrl"); + var fs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowTests/", "rootUrl"); + var sfs = new PhysicalFileSystem(ioHelper, Current.Logger, path + "/ShadowSystem/", "rootUrl"); var ss = new ShadowFileSystem(fs, sfs); // Act diff --git a/src/Umbraco.Tests/Logging/LogviewerTests.cs b/src/Umbraco.Tests/Logging/LogviewerTests.cs index 96a68beccb..d6e1c7ffae 100644 --- a/src/Umbraco.Tests/Logging/LogviewerTests.cs +++ b/src/Umbraco.Tests/Logging/LogviewerTests.cs @@ -33,6 +33,7 @@ namespace Umbraco.Tests.Logging { //Create an example JSON log file to check results //As a one time setup for all tets in this class/fixture + var ioHelper = new IOHelper(); var exampleLogfilePath = Path.Combine(TestContext.CurrentContext.TestDirectory, @"Logging\", _logfileName); _newLogfileDirPath = Path.Combine(TestContext.CurrentContext.TestDirectory, @"App_Data\Logs\"); @@ -43,15 +44,15 @@ namespace Umbraco.Tests.Logging _newSearchfilePath = Path.Combine(_newSearchfileDirPath, _searchfileName); //Create/ensure Directory exists - Current.IOHelper.EnsurePathExists(_newLogfileDirPath); - Current.IOHelper.EnsurePathExists(_newSearchfileDirPath); + ioHelper.EnsurePathExists(_newLogfileDirPath); + ioHelper.EnsurePathExists(_newSearchfileDirPath); //Copy the sample files File.Copy(exampleLogfilePath, _newLogfilePath, true); File.Copy(exampleSearchfilePath, _newSearchfilePath, true); var logger = Mock.Of(); - _logViewer = new JsonLogViewer(logger, logsPath: _newLogfileDirPath, searchPath: _newSearchfilePath); + _logViewer = new JsonLogViewer(logger, ioHelper, logsPath: _newLogfileDirPath, searchPath: _newSearchfilePath); } [OneTimeTearDown] diff --git a/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs b/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs index 01c93a40ec..82ccd21b80 100644 --- a/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs +++ b/src/Umbraco.Tests/Migrations/AdvancedMigrationTests.cs @@ -42,7 +42,7 @@ namespace Umbraco.Tests.Migrations upgrader.Execute(ScopeProvider, builder, Mock.Of(), logger); - var helper = new DatabaseSchemaCreator(scope.Database, logger); + var helper = new DatabaseSchemaCreator(scope.Database, logger, UmbracoVersion); var exists = helper.TableExists("umbracoUser"); Assert.IsTrue(exists); diff --git a/src/Umbraco.Tests/Migrations/MigrationPlanTests.cs b/src/Umbraco.Tests/Migrations/MigrationPlanTests.cs index ab065eb0a9..3241f78b62 100644 --- a/src/Umbraco.Tests/Migrations/MigrationPlanTests.cs +++ b/src/Umbraco.Tests/Migrations/MigrationPlanTests.cs @@ -12,6 +12,7 @@ using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Scoping; using Umbraco.Core.Services; +using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; namespace Umbraco.Tests.Migrations @@ -137,7 +138,7 @@ namespace Umbraco.Tests.Migrations [Test] public void ValidateUmbracoPlan() { - var plan = new UmbracoPlan(); + var plan = new UmbracoPlan(TestHelper.GetUmbracoVersion()); plan.Validate(); Console.WriteLine(plan.FinalState); Assert.IsFalse(plan.FinalState.IsNullOrWhiteSpace()); diff --git a/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs b/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs index ffa90e57da..b101f9f7fe 100644 --- a/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs +++ b/src/Umbraco.Tests/Packaging/CreatedPackagesRepositoryTests.cs @@ -34,13 +34,15 @@ namespace Umbraco.Tests.Packaging base.TearDown(); //clear out files/folders - Directory.Delete(Current.IOHelper.MapPath("~/" + _testBaseFolder), true); + Directory.Delete(IOHelper.MapPath("~/" + _testBaseFolder), true); } public ICreatedPackagesRepository PackageBuilder => new PackagesRepository( ServiceContext.ContentService, ServiceContext.ContentTypeService, ServiceContext.DataTypeService, ServiceContext.FileService, ServiceContext.MacroService, ServiceContext.LocalizationService, + IOHelper, Factory.GetInstance(), Logger, + UmbracoVersion, "createdPackages.config", //temp paths tempFolderPath: "~/" + _testBaseFolder + "/temp", diff --git a/src/Umbraco.Tests/Packaging/PackageInstallationTest.cs b/src/Umbraco.Tests/Packaging/PackageInstallationTest.cs index 14a7049195..8b33859e5b 100644 --- a/src/Umbraco.Tests/Packaging/PackageInstallationTest.cs +++ b/src/Umbraco.Tests/Packaging/PackageInstallationTest.cs @@ -35,7 +35,7 @@ namespace Umbraco.Tests.Packaging base.TearDown(); //clear out files/folders - var path = Current.IOHelper.MapPath("~/" + _testBaseFolder); + var path = IOHelper.MapPath("~/" + _testBaseFolder); if (Directory.Exists(path)) Directory.Delete(path, true); } @@ -51,9 +51,9 @@ namespace Umbraco.Tests.Packaging private IPackageInstallation PackageInstallation => new PackageInstallation( PackageDataInstallation, - new PackageFileInstallation(Parser, ProfilingLogger), + new PackageFileInstallation(Parser, IOHelper, ProfilingLogger), Parser, Mock.Of(), - applicationRootFolder: new DirectoryInfo(Current.IOHelper.MapPath("~/" + _testBaseFolder))); //we don't want to extract package files to the real root, so extract to a test folder + applicationRootFolder: new DirectoryInfo(IOHelper.MapPath("~/" + _testBaseFolder))); //we don't want to extract package files to the real root, so extract to a test folder private const string DocumentTypePickerPackage = "Document_Type_Picker_1.1.umb"; private const string HelloPackage = "Hello_1.0.0.zip"; @@ -63,7 +63,7 @@ namespace Umbraco.Tests.Packaging { var package = PackageInstallation.ReadPackage( //this is where our test zip file is - new FileInfo(Path.Combine(Current.IOHelper.MapPath("~/Packaging/packages"), DocumentTypePickerPackage))); + new FileInfo(Path.Combine(IOHelper.MapPath("~/Packaging/packages"), DocumentTypePickerPackage))); Assert.IsNotNull(package); Assert.AreEqual(1, package.Files.Count); Assert.AreEqual("095e064b-ba4d-442d-9006-3050983c13d8.dll", package.Files[0].UniqueFileName); @@ -86,7 +86,7 @@ namespace Umbraco.Tests.Packaging { var package = PackageInstallation.ReadPackage( //this is where our test zip file is - new FileInfo(Path.Combine(Current.IOHelper.MapPath("~/Packaging/packages"), HelloPackage))); + new FileInfo(Path.Combine(IOHelper.MapPath("~/Packaging/packages"), HelloPackage))); Assert.IsNotNull(package); Assert.AreEqual(0, package.Files.Count); Assert.AreEqual("Hello", package.Name); @@ -111,7 +111,7 @@ namespace Umbraco.Tests.Packaging public void Can_Read_Compiled_Package_Warnings() { //copy a file to the same path that the package will install so we can detect file conflicts - var path = Current.IOHelper.MapPath("~/" + _testBaseFolder); + var path = IOHelper.MapPath("~/" + _testBaseFolder); Console.WriteLine(path); var filePath = Path.Combine(path, "bin", "Auros.DocumentTypePicker.dll"); @@ -119,7 +119,7 @@ namespace Umbraco.Tests.Packaging File.WriteAllText(filePath, "test"); //this is where our test zip file is - var packageFile = Path.Combine(Current.IOHelper.MapPath("~/Packaging/packages"), DocumentTypePickerPackage); + var packageFile = Path.Combine(IOHelper.MapPath("~/Packaging/packages"), DocumentTypePickerPackage); Console.WriteLine(packageFile); var package = PackageInstallation.ReadPackage(new FileInfo(packageFile)); @@ -137,7 +137,7 @@ namespace Umbraco.Tests.Packaging { var package = PackageInstallation.ReadPackage( //this is where our test zip file is - new FileInfo(Path.Combine(Current.IOHelper.MapPath("~/Packaging/packages"), DocumentTypePickerPackage))); + new FileInfo(Path.Combine(IOHelper.MapPath("~/Packaging/packages"), DocumentTypePickerPackage))); var def = PackageDefinition.FromCompiledPackage(package); def.Id = 1; @@ -148,7 +148,7 @@ namespace Umbraco.Tests.Packaging Assert.AreEqual(1, result.Count); Assert.AreEqual("bin\\Auros.DocumentTypePicker.dll", result[0]); - Assert.IsTrue(File.Exists(Path.Combine(Current.IOHelper.MapPath("~/" + _testBaseFolder), result[0]))); + Assert.IsTrue(File.Exists(Path.Combine(IOHelper.MapPath("~/" + _testBaseFolder), result[0]))); //make sure the def is updated too Assert.AreEqual(result.Count, def.Files.Count); @@ -159,7 +159,7 @@ namespace Umbraco.Tests.Packaging { var package = PackageInstallation.ReadPackage( //this is where our test zip file is - new FileInfo(Path.Combine(Current.IOHelper.MapPath("~/Packaging/packages"), DocumentTypePickerPackage))); + new FileInfo(Path.Combine(IOHelper.MapPath("~/Packaging/packages"), DocumentTypePickerPackage))); var def = PackageDefinition.FromCompiledPackage(package); def.Id = 1; def.PackageId = Guid.NewGuid(); diff --git a/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs b/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs index 7ab9d2e28a..120ec6bc72 100644 --- a/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs +++ b/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs @@ -7,6 +7,7 @@ using Moq; using NPoco; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Configuration; using Umbraco.Core.Logging; using Umbraco.Core.Migrations.Install; using Umbraco.Core.Persistence; @@ -26,6 +27,7 @@ namespace Umbraco.Tests.Persistence private ILogger _logger; private SqlCeSyntaxProvider _sqlCeSyntaxProvider; private ISqlSyntaxProvider[] _sqlSyntaxProviders; + private IUmbracoVersion _umbracoVersion; [SetUp] public void Setup() @@ -34,6 +36,7 @@ namespace Umbraco.Tests.Persistence _sqlCeSyntaxProvider = new SqlCeSyntaxProvider(); _sqlSyntaxProviders = new[] { (ISqlSyntaxProvider) _sqlCeSyntaxProvider }; _logger = Mock.Of(); + _umbracoVersion = TestHelper.GetUmbracoVersion(); _databaseFactory = new UmbracoDatabaseFactory(_logger, new Lazy(() => Mock.Of()), TestHelper.GetConfigs()); } @@ -88,7 +91,7 @@ namespace Umbraco.Tests.Persistence using (var database = _databaseFactory.CreateDatabase()) using (var transaction = database.GetTransaction()) { - schemaHelper = new DatabaseSchemaCreator(database, _logger); + schemaHelper = new DatabaseSchemaCreator(database, _logger, _umbracoVersion); schemaHelper.InitializeDatabaseSchema(); transaction.Complete(); } diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs index f953b9cce6..4a9c8d4b71 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs @@ -30,7 +30,7 @@ namespace Umbraco.Tests.Persistence.Repositories private DocumentRepository CreateRepository(IScopeAccessor scopeAccessor, out ContentTypeRepository contentTypeRepository) { var langRepository = new LanguageRepository(scopeAccessor, AppCaches.Disabled, Logger); - var templateRepository = new TemplateRepository(scopeAccessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(scopeAccessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepository = new TagRepository(scopeAccessor, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository(scopeAccessor, templateRepository, AppCaches.Disabled); contentTypeRepository = new ContentTypeRepository(scopeAccessor, AppCaches.Disabled, Logger, commonRepository, langRepository); @@ -42,7 +42,7 @@ namespace Umbraco.Tests.Persistence.Repositories private ContentTypeRepository CreateRepository(IScopeAccessor scopeAccessor) { var langRepository = new LanguageRepository(scopeAccessor, AppCaches.Disabled, Logger); - var templateRepository = new TemplateRepository(scopeAccessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(scopeAccessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var commonRepository = new ContentTypeCommonRepository(scopeAccessor, templateRepository, AppCaches.Disabled); var contentTypeRepository = new ContentTypeRepository(scopeAccessor, AppCaches.Disabled, Logger, commonRepository, langRepository); return contentTypeRepository; @@ -50,7 +50,7 @@ namespace Umbraco.Tests.Persistence.Repositories private MediaTypeRepository CreateMediaTypeRepository(IScopeAccessor scopeAccessor) { - var templateRepository = new TemplateRepository(scopeAccessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(scopeAccessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var commonRepository = new ContentTypeCommonRepository(scopeAccessor, templateRepository, AppCaches.Disabled); var langRepository = new LanguageRepository(scopeAccessor, AppCaches.Disabled, Logger); var contentTypeRepository = new MediaTypeRepository(scopeAccessor, AppCaches.Disabled, Logger, commonRepository, langRepository); @@ -71,7 +71,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var templateRepo = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepo = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var repository = CreateRepository((IScopeAccessor) provider); var templates = new[] { diff --git a/src/Umbraco.Tests/Persistence/Repositories/DocumentRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DocumentRepositoryTest.cs index af27d47f97..85588cbbdb 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DocumentRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DocumentRepositoryTest.cs @@ -64,7 +64,7 @@ namespace Umbraco.Tests.Persistence.Repositories { appCaches = appCaches ?? AppCaches; - templateRepository = new TemplateRepository(scopeAccessor, appCaches, Logger, TestObjects.GetFileSystemsMock()); + templateRepository = new TemplateRepository(scopeAccessor, appCaches, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepository = new TagRepository(scopeAccessor, appCaches, Logger); var commonRepository = new ContentTypeCommonRepository(scopeAccessor, templateRepository, appCaches); var languageRepository = new LanguageRepository(scopeAccessor, appCaches, Logger); diff --git a/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs index 628f8d75a7..a8be4f5c2a 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs @@ -20,7 +20,7 @@ namespace Umbraco.Tests.Persistence.Repositories private DomainRepository CreateRepository(IScopeProvider provider, out ContentTypeRepository contentTypeRepository, out DocumentRepository documentRepository, out LanguageRepository languageRepository) { var accessor = (IScopeAccessor) provider; - var templateRepository = new TemplateRepository(accessor, Core.Cache.AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(accessor, Core.Cache.AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepository = new TagRepository(accessor, Core.Cache.AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches); languageRepository = new LanguageRepository(accessor, Core.Cache.AppCaches.Disabled, Logger); diff --git a/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs index fa916b554d..56db88419a 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs @@ -34,7 +34,7 @@ namespace Umbraco.Tests.Persistence.Repositories appCaches = appCaches ?? AppCaches; var scopeAccessor = (IScopeAccessor) provider; - var templateRepository = new TemplateRepository(scopeAccessor, appCaches, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(scopeAccessor, appCaches, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var commonRepository = new ContentTypeCommonRepository(scopeAccessor, templateRepository, appCaches); var languageRepository = new LanguageRepository(scopeAccessor, appCaches, Logger); mediaTypeRepository = new MediaTypeRepository(scopeAccessor, appCaches, Logger, commonRepository, languageRepository); diff --git a/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs index bc23762fa9..4bda37c15c 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs @@ -21,7 +21,7 @@ namespace Umbraco.Tests.Persistence.Repositories private MediaTypeRepository CreateRepository(IScopeProvider provider) { var cacheHelper = AppCaches.Disabled; - var templateRepository = new TemplateRepository((IScopeAccessor)provider, cacheHelper, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository((IScopeAccessor)provider, cacheHelper, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var commonRepository = new ContentTypeCommonRepository((IScopeAccessor)provider, templateRepository, AppCaches); var languageRepository = new LanguageRepository((IScopeAccessor)provider, AppCaches, Logger); return new MediaTypeRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, commonRepository, languageRepository); diff --git a/src/Umbraco.Tests/Persistence/Repositories/PartialViewRepositoryTests.cs b/src/Umbraco.Tests/Persistence/Repositories/PartialViewRepositoryTests.cs index f21db872ed..2d799eeddd 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/PartialViewRepositoryTests.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/PartialViewRepositoryTests.cs @@ -43,7 +43,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = new PartialViewRepository(fileSystems); + var repository = new PartialViewRepository(fileSystems, IOHelper); var partialView = new PartialView(PartialViewType.PartialView, "test-path-1.cshtml") { Content = "// partialView" }; repository.Save(partialView); diff --git a/src/Umbraco.Tests/Persistence/Repositories/PublicAccessRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/PublicAccessRepositoryTest.cs index 56041c24aa..66d6bb9619 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/PublicAccessRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/PublicAccessRepositoryTest.cs @@ -305,7 +305,7 @@ namespace Umbraco.Tests.Persistence.Repositories private DocumentRepository CreateRepository(IScopeProvider provider, out ContentTypeRepository contentTypeRepository) { var accessor = (IScopeAccessor) provider; - var templateRepository = new TemplateRepository(accessor, AppCaches, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(accessor, AppCaches, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepository = new TagRepository(accessor, AppCaches, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches); var languageRepository = new LanguageRepository(accessor, AppCaches, Logger); diff --git a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs index d29899dc33..dc654a2c52 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs @@ -29,7 +29,7 @@ namespace Umbraco.Tests.Persistence.Repositories base.SetUp(); _fileSystems = Mock.Of(); - _fileSystem = new PhysicalFileSystem(Current.IOHelper, Current.Logger, SettingsForTests.GenerateMockGlobalSettings().UmbracoScriptsPath); + _fileSystem = new PhysicalFileSystem(IOHelper, Logger, SettingsForTests.GenerateMockGlobalSettings().UmbracoScriptsPath); Mock.Get(_fileSystems).Setup(x => x.ScriptsFileSystem).Returns(_fileSystem); using (var stream = CreateStream("Umbraco.Sys.registerNamespace(\"Umbraco.Utils\");")) { diff --git a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs index 064562f548..3106c1692c 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs @@ -28,7 +28,7 @@ namespace Umbraco.Tests.Persistence.Repositories base.SetUp(); _fileSystems = Mock.Of(); - _fileSystem = new PhysicalFileSystem(Current.IOHelper, Current.Logger, SettingsForTests.GenerateMockGlobalSettings().UmbracoCssPath); + _fileSystem = new PhysicalFileSystem(IOHelper, Logger, SettingsForTests.GenerateMockGlobalSettings().UmbracoCssPath); Mock.Get(_fileSystems).Setup(x => x.StylesheetsFileSystem).Returns(_fileSystem); var stream = CreateStream("body {background:#EE7600; color:#FFF;}"); _fileSystem.AddFile("styles.css", stream); diff --git a/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs index e3de2c2892..b186e344ae 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/TagRepositoryTest.cs @@ -953,7 +953,7 @@ namespace Umbraco.Tests.Persistence.Repositories private DocumentRepository CreateContentRepository(IScopeProvider provider, out ContentTypeRepository contentTypeRepository) { var accessor = (IScopeAccessor) provider; - var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepository = new TagRepository(accessor, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches.Disabled); var languageRepository = new LanguageRepository(accessor, AppCaches.Disabled, Logger); @@ -965,7 +965,7 @@ namespace Umbraco.Tests.Persistence.Repositories private MediaRepository CreateMediaRepository(IScopeProvider provider, out MediaTypeRepository mediaTypeRepository) { var accessor = (IScopeAccessor) provider; - var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepository = new TagRepository(accessor, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches.Disabled); var languageRepository = new LanguageRepository(accessor, AppCaches.Disabled, Logger); diff --git a/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs index 00c80ee75f..0bb761a2ac 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/TemplateRepositoryTest.cs @@ -28,7 +28,7 @@ namespace Umbraco.Tests.Persistence.Repositories private ITemplateRepository CreateRepository(IScopeProvider provider) { - return new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, _fileSystems); + return new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, _fileSystems, IOHelper); } public override void SetUp() @@ -36,7 +36,7 @@ namespace Umbraco.Tests.Persistence.Repositories base.SetUp(); _fileSystems = Mock.Of(); - var viewsFileSystem = new PhysicalFileSystem(Current.IOHelper, Current.Logger, Constants.SystemDirectories.MvcViews); + var viewsFileSystem = new PhysicalFileSystem(IOHelper, Logger, Constants.SystemDirectories.MvcViews); Mock.Get(_fileSystems).Setup(x => x.MvcViewsFileSystem).Returns(viewsFileSystem); } @@ -527,7 +527,7 @@ namespace Umbraco.Tests.Persistence.Repositories _fileSystems = null; //Delete all files - var fsViews = new PhysicalFileSystem(Current.IOHelper, Current.Logger, Constants.SystemDirectories.MvcViews); + var fsViews = new PhysicalFileSystem(IOHelper, Logger, Constants.SystemDirectories.MvcViews); var views = fsViews.GetFiles("", "*.cshtml"); foreach (var file in views) fsViews.DeleteFile(file); diff --git a/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs index 3e5919d7f3..e856cedbd6 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs @@ -24,7 +24,7 @@ namespace Umbraco.Tests.Persistence.Repositories private MediaRepository CreateMediaRepository(IScopeProvider provider, out IMediaTypeRepository mediaTypeRepository) { var accessor = (IScopeAccessor) provider; - var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches); var languageRepository = new LanguageRepository(accessor, AppCaches, Logger); mediaTypeRepository = new MediaTypeRepository(accessor, AppCaches, Mock.Of(), commonRepository, languageRepository); @@ -42,7 +42,7 @@ namespace Umbraco.Tests.Persistence.Repositories private DocumentRepository CreateContentRepository(IScopeProvider provider, out IContentTypeRepository contentTypeRepository, out ITemplateRepository templateRepository) { var accessor = (IScopeAccessor) provider; - templateRepository = new TemplateRepository(accessor, AppCaches, Logger, TestObjects.GetFileSystemsMock()); + templateRepository = new TemplateRepository(accessor, AppCaches, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepository = new TagRepository(accessor, AppCaches, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches); var languageRepository = new LanguageRepository(accessor, AppCaches, Logger); diff --git a/src/Umbraco.Tests/Persistence/SchemaValidationTest.cs b/src/Umbraco.Tests/Persistence/SchemaValidationTest.cs index c7118dac79..99254edd77 100644 --- a/src/Umbraco.Tests/Persistence/SchemaValidationTest.cs +++ b/src/Umbraco.Tests/Persistence/SchemaValidationTest.cs @@ -22,7 +22,7 @@ namespace Umbraco.Tests.Persistence using (var scope = ScopeProvider.CreateScope()) { - var schema = new DatabaseSchemaCreator(scope.Database, Logger); + var schema = new DatabaseSchemaCreator(scope.Database, Logger, UmbracoVersion); result = schema.ValidateSchema( //TODO: When we remove the xml cache from tests we can remove this too DatabaseSchemaCreator.OrderedTables.Concat(new []{typeof(ContentXmlDto), typeof(PreviewXmlDto)})); diff --git a/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs b/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs index 2afbdaca8f..660783c784 100644 --- a/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs +++ b/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs @@ -1,6 +1,7 @@ using Moq; using NPoco; using NUnit.Framework; +using Umbraco.Core.Configuration; using Umbraco.Core.Logging; using Umbraco.Core.Migrations.Install; using Umbraco.Core.Persistence; @@ -20,7 +21,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); @@ -33,7 +34,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -47,7 +48,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -62,7 +63,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -76,7 +77,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -91,7 +92,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -105,7 +106,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -121,7 +122,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -137,7 +138,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -151,7 +152,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); @@ -164,7 +165,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -179,7 +180,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -193,7 +194,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -210,7 +211,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -226,7 +227,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -240,7 +241,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); @@ -253,7 +254,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); @@ -266,7 +267,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); @@ -279,7 +280,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -295,7 +296,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -312,7 +313,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -327,7 +328,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -344,7 +345,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -362,7 +363,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -379,7 +380,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -394,7 +395,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -409,20 +410,20 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); scope.Complete(); } } - + [Test] public void Can_Create_cmsTags_Table() { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); @@ -435,7 +436,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -456,7 +457,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); @@ -469,7 +470,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -483,7 +484,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -497,7 +498,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); @@ -512,7 +513,7 @@ namespace Umbraco.Tests.Persistence { using (var scope = ScopeProvider.CreateScope()) { - var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of()); + var helper = new DatabaseSchemaCreator(scope.Database, Mock.Of(), UmbracoVersion); helper.CreateTable(); helper.CreateTable(); diff --git a/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs b/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs index 68fd319cb4..ad9756fa6b 100644 --- a/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs +++ b/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs @@ -77,9 +77,9 @@ namespace Umbraco.Tests.PropertyEditors Current.Factory = composition.CreateFactory(); var logger = Mock.Of(); - var ioHelper = Mock.Of(); var scheme = Mock.Of(); var config = Mock.Of(); + var ioHelper = Mock.Of(); var mediaFileSystem = new MediaFileSystem(Mock.Of(), config, scheme, logger, ioHelper); diff --git a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs index f801d02c5b..8122113516 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs @@ -120,7 +120,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -149,7 +149,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, //include unpublished content since this uses the 'internal' indexer, it's up to the media cache to filter validator: new ContentValueSetValidator(false))) using (indexer.ProcessNonAsync()) @@ -197,7 +197,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -225,7 +225,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -253,7 +253,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -282,7 +282,7 @@ namespace Umbraco.Tests.PublishedContent using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { @@ -307,7 +307,7 @@ namespace Umbraco.Tests.PublishedContent var rebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(true))) using (indexer.ProcessNonAsync()) { diff --git a/src/Umbraco.Tests/Runtimes/StandaloneTests.cs b/src/Umbraco.Tests/Runtimes/StandaloneTests.cs index 119211225a..d11438d4f4 100644 --- a/src/Umbraco.Tests/Runtimes/StandaloneTests.cs +++ b/src/Umbraco.Tests/Runtimes/StandaloneTests.cs @@ -153,7 +153,7 @@ namespace Umbraco.Tests.Runtimes var scopeProvider = factory.GetInstance(); using (var scope = scopeProvider.CreateScope()) { - var creator = new DatabaseSchemaCreator(scope.Database, logger); + var creator = new DatabaseSchemaCreator(scope.Database, logger, umbracoVersion); creator.InitializeDatabaseSchema(); scope.Complete(); } diff --git a/src/Umbraco.Tests/Scoping/ScopeFileSystemsTests.cs b/src/Umbraco.Tests/Scoping/ScopeFileSystemsTests.cs index dcac00e1b9..f407ac40df 100644 --- a/src/Umbraco.Tests/Scoping/ScopeFileSystemsTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopeFileSystemsTests.cs @@ -21,7 +21,7 @@ namespace Umbraco.Tests.Scoping base.SetUp(); SafeCallContext.Clear(); - ClearFiles(); + ClearFiles(IOHelper); } protected override void ComposeApplication(bool withApplication) @@ -39,21 +39,21 @@ namespace Umbraco.Tests.Scoping base.TearDown(); SafeCallContext.Clear(); FileSystems.ResetShadowId(); - ClearFiles(); + ClearFiles(IOHelper); } - private static void ClearFiles() + private static void ClearFiles(IIOHelper ioHelper) { - TestHelper.DeleteDirectory(Current.IOHelper.MapPath("media")); - TestHelper.DeleteDirectory(Current.IOHelper.MapPath("FileSysTests")); - TestHelper.DeleteDirectory(Current.IOHelper.MapPath(Constants.SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs")); + TestHelper.DeleteDirectory(ioHelper.MapPath("media")); + TestHelper.DeleteDirectory(ioHelper.MapPath("FileSysTests")); + TestHelper.DeleteDirectory(ioHelper.MapPath(Constants.SystemDirectories.TempData.EnsureEndsWith('/') + "ShadowFs")); } [TestCase(true)] [TestCase(false)] public void CreateMediaTest(bool complete) { - var physMediaFileSystem = new PhysicalFileSystem(Current.IOHelper, Current.Logger, Current.IOHelper.MapPath("media"), "ignore"); + var physMediaFileSystem = new PhysicalFileSystem(IOHelper, Current.Logger, IOHelper.MapPath("media"), "ignore"); var mediaFileSystem = Current.MediaFileSystem; Assert.IsFalse(physMediaFileSystem.FileExists("f1.txt")); @@ -86,7 +86,7 @@ namespace Umbraco.Tests.Scoping [Test] public void MultiThread() { - var physMediaFileSystem = new PhysicalFileSystem(Current.IOHelper, Current.Logger, Current.IOHelper.MapPath("media"), "ignore"); + var physMediaFileSystem = new PhysicalFileSystem(IOHelper, Logger, IOHelper.MapPath("media"), "ignore"); var mediaFileSystem = Current.MediaFileSystem; var scopeProvider = ScopeProvider; diff --git a/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs b/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs index ace45fe356..9f55fe2e45 100644 --- a/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs +++ b/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs @@ -163,7 +163,7 @@ namespace Umbraco.Tests.Services var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepo = new TagRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository((IScopeAccessor)provider, tRepository, AppCaches); var languageRepository = new LanguageRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger); @@ -197,7 +197,7 @@ namespace Umbraco.Tests.Services var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepo = new TagRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository((IScopeAccessor)provider, tRepository, AppCaches); var languageRepository = new LanguageRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger); @@ -229,7 +229,7 @@ namespace Umbraco.Tests.Services var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepo = new TagRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository((IScopeAccessor) provider, tRepository, AppCaches); var languageRepository = new LanguageRepository((IScopeAccessor)provider, AppCaches.Disabled, Logger); @@ -264,7 +264,7 @@ namespace Umbraco.Tests.Services var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var tRepository = new TemplateRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepo = new TagRepository((IScopeAccessor) provider, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository((IScopeAccessor)provider, tRepository, AppCaches); var languageRepository = new LanguageRepository((IScopeAccessor)provider, AppCaches.Disabled, Logger); diff --git a/src/Umbraco.Tests/Services/ContentServiceTests.cs b/src/Umbraco.Tests/Services/ContentServiceTests.cs index b5f63bbc15..fbcfd751cf 100644 --- a/src/Umbraco.Tests/Services/ContentServiceTests.cs +++ b/src/Umbraco.Tests/Services/ContentServiceTests.cs @@ -3161,7 +3161,7 @@ namespace Umbraco.Tests.Services private DocumentRepository CreateRepository(IScopeProvider provider, out ContentTypeRepository contentTypeRepository) { var accessor = (IScopeAccessor) provider; - var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock()); + var templateRepository = new TemplateRepository(accessor, AppCaches.Disabled, Logger, TestObjects.GetFileSystemsMock(), IOHelper); var tagRepository = new TagRepository(accessor, AppCaches.Disabled, Logger); var commonRepository = new ContentTypeCommonRepository(accessor, templateRepository, AppCaches); var languageRepository = new LanguageRepository(accessor, AppCaches.Disabled, Logger); diff --git a/src/Umbraco.Tests/TestHelpers/TestHelper.cs b/src/Umbraco.Tests/TestHelpers/TestHelper.cs index 85c4ad345a..64794fcea9 100644 --- a/src/Umbraco.Tests/TestHelpers/TestHelper.cs +++ b/src/Umbraco.Tests/TestHelpers/TestHelper.cs @@ -2,7 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.ComponentModel; -using System.Configuration; using System.IO; using System.Linq; using System.Reflection; @@ -13,12 +12,14 @@ using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; +using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.Entities; using Umbraco.Core.PropertyEditors; using Umbraco.Core.Services; +using Umbraco.Core.Sync; using File = System.IO.File; namespace Umbraco.Tests.TestHelpers @@ -38,6 +39,16 @@ namespace Umbraco.Tests.TestHelpers { return GetConfigsFactory().Create(); } + public static IRuntimeState GetRuntimeState() + { + return new RuntimeState( + Mock.Of(), + Mock.Of(), + Mock.Of(), + new Lazy(), + new Lazy(), + TestHelper.GetUmbracoVersion()); + } public static IConfigsFactory GetConfigsFactory() { diff --git a/src/Umbraco.Tests/TestHelpers/TestObjects.cs b/src/Umbraco.Tests/TestHelpers/TestObjects.cs index bf9fa80043..1ad0ef63dc 100644 --- a/src/Umbraco.Tests/TestHelpers/TestObjects.cs +++ b/src/Umbraco.Tests/TestHelpers/TestObjects.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.IO; using System.Linq; using Moq; @@ -23,7 +22,6 @@ using Umbraco.Core.Services; using Umbraco.Core.Services.Implement; using Umbraco.Core.Strings; using Umbraco.Tests.TestHelpers.Stubs; -using Umbraco.Web.Services; namespace Umbraco.Tests.TestHelpers { @@ -78,6 +76,7 @@ namespace Umbraco.Tests.TestHelpers /// /// A cache. /// A logger. + /// An io helper. /// /// /// An event messages factory. @@ -92,11 +91,13 @@ namespace Umbraco.Tests.TestHelpers IScopeProvider scopeProvider, IScopeAccessor scopeAccessor, AppCaches cache, ILogger logger, + IIOHelper ioHelper, IGlobalSettings globalSettings, IUmbracoSettingsSection umbracoSettings, IEventMessagesFactory eventMessagesFactory, UrlSegmentProviderCollection urlSegmentProviders, TypeLoader typeLoader, + IUmbracoVersion umbracoVersion, IFactory factory = null) { if (scopeProvider == null) throw new ArgumentNullException(nameof(scopeProvider)); @@ -107,7 +108,6 @@ namespace Umbraco.Tests.TestHelpers var scheme = Mock.Of(); var config = Mock.Of(); - var ioHelper = Mock.Of(); var mediaFileSystem = new MediaFileSystem(Mock.Of(), config, scheme, logger, ioHelper); @@ -119,9 +119,9 @@ namespace Umbraco.Tests.TestHelpers var localizedTextService = GetLazyService(factory, c => new LocalizedTextService( new Lazy(() => { - var mainLangFolder = new DirectoryInfo(Current.IOHelper.MapPath(Current.Configs.Global().UmbracoPath + "/config/lang/")); - var appPlugins = new DirectoryInfo(Current.IOHelper.MapPath(Constants.SystemDirectories.AppPlugins)); - var configLangFolder = new DirectoryInfo(Current.IOHelper.MapPath(Constants.SystemDirectories.Config + "/lang/")); + var mainLangFolder = new DirectoryInfo(ioHelper.MapPath(Current.Configs.Global().UmbracoPath + "/config/lang/")); + var appPlugins = new DirectoryInfo(ioHelper.MapPath(Constants.SystemDirectories.AppPlugins)); + var configLangFolder = new DirectoryInfo(ioHelper.MapPath(Constants.SystemDirectories.Config + "/lang/")); var pluginLangFolders = appPlugins.Exists == false ? Enumerable.Empty() @@ -155,14 +155,14 @@ namespace Umbraco.Tests.TestHelpers var userService = GetLazyService(factory, c => new UserService(scopeProvider, logger, eventMessagesFactory, runtimeState, GetRepo(c), GetRepo(c),globalSettings)); var dataTypeService = GetLazyService(factory, c => new DataTypeService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); var contentService = GetLazyService(factory, c => new ContentService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); - var notificationService = GetLazyService(factory, c => new NotificationService(scopeProvider, userService.Value, contentService.Value, localizationService.Value, logger, GetRepo(c), globalSettings, umbracoSettings.Content)); + var notificationService = GetLazyService(factory, c => new NotificationService(scopeProvider, userService.Value, contentService.Value, localizationService.Value, logger, ioHelper, GetRepo(c), globalSettings, umbracoSettings.Content)); var serverRegistrationService = GetLazyService(factory, c => new ServerRegistrationService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); var memberGroupService = GetLazyService(factory, c => new MemberGroupService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); var memberService = GetLazyService(factory, c => new MemberService(scopeProvider, logger, eventMessagesFactory, memberGroupService.Value, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); var mediaService = GetLazyService(factory, c => new MediaService(scopeProvider, mediaFileSystem, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); var contentTypeService = GetLazyService(factory, c => new ContentTypeService(scopeProvider, logger, eventMessagesFactory, contentService.Value, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); var mediaTypeService = GetLazyService(factory, c => new MediaTypeService(scopeProvider, logger, eventMessagesFactory, mediaService.Value, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); - var fileService = GetLazyService(factory, c => new FileService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); + var fileService = GetLazyService(factory, c => new FileService(scopeProvider, ioHelper, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); var memberTypeService = GetLazyService(factory, c => new MemberTypeService(scopeProvider, logger, eventMessagesFactory, memberService.Value, GetRepo(c), GetRepo(c), GetRepo(c))); var entityService = GetLazyService(factory, c => new EntityService(scopeProvider, logger, eventMessagesFactory, idkMap, GetRepo(c))); @@ -174,15 +174,15 @@ namespace Umbraco.Tests.TestHelpers var compiledPackageXmlParser = new CompiledPackageXmlParser(new ConflictingPackageData(macroService.Value, fileService.Value)); return new PackagingService( auditService.Value, - new PackagesRepository(contentService.Value, contentTypeService.Value, dataTypeService.Value, fileService.Value, macroService.Value, localizationService.Value, - new EntityXmlSerializer(contentService.Value, mediaService.Value, dataTypeService.Value, userService.Value, localizationService.Value, contentTypeService.Value, urlSegmentProviders), logger, "createdPackages.config"), - new PackagesRepository(contentService.Value, contentTypeService.Value, dataTypeService.Value, fileService.Value, macroService.Value, localizationService.Value, - new EntityXmlSerializer(contentService.Value, mediaService.Value, dataTypeService.Value, userService.Value, localizationService.Value, contentTypeService.Value, urlSegmentProviders), logger, "installedPackages.config"), + new PackagesRepository(contentService.Value, contentTypeService.Value, dataTypeService.Value, fileService.Value, macroService.Value, localizationService.Value, ioHelper, + new EntityXmlSerializer(contentService.Value, mediaService.Value, dataTypeService.Value, userService.Value, localizationService.Value, contentTypeService.Value, urlSegmentProviders), logger, umbracoVersion, "createdPackages.config"), + new PackagesRepository(contentService.Value, contentTypeService.Value, dataTypeService.Value, fileService.Value, macroService.Value, localizationService.Value, ioHelper, + new EntityXmlSerializer(contentService.Value, mediaService.Value, dataTypeService.Value, userService.Value, localizationService.Value, contentTypeService.Value, urlSegmentProviders), logger, umbracoVersion, "installedPackages.config"), new PackageInstallation( new PackageDataInstallation(logger, fileService.Value, macroService.Value, localizationService.Value, dataTypeService.Value, entityService.Value, contentTypeService.Value, contentService.Value, propertyEditorCollection, scopeProvider), - new PackageFileInstallation(compiledPackageXmlParser, new ProfilingLogger(logger, new TestProfiler())), + new PackageFileInstallation(compiledPackageXmlParser, ioHelper, new ProfilingLogger(logger, new TestProfiler())), compiledPackageXmlParser, Mock.Of(), - new DirectoryInfo(Current.IOHelper.GetRootDirectorySafe()))); + new DirectoryInfo(ioHelper.GetRootDirectorySafe())), ioHelper); }); var relationService = GetLazyService(factory, c => new RelationService(scopeProvider, logger, eventMessagesFactory, entityService.Value, GetRepo(c), GetRepo(c))); var tagService = GetLazyService(factory, c => new TagService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); diff --git a/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs b/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs index 9ced8d8a5d..72f99dbdab 100644 --- a/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs +++ b/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs @@ -31,7 +31,6 @@ using Umbraco.Core.Models.PublishedContent; using Umbraco.Core.Persistence.Repositories; using Umbraco.Tests.LegacyXmlPublishedCache; using Umbraco.Tests.Testing.Objects.Accessors; -using Umbraco.Web.Cache; namespace Umbraco.Tests.TestHelpers { @@ -132,7 +131,7 @@ namespace Umbraco.Tests.TestHelpers // ensure the configuration matches the current version for tests var globalSettingsMock = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container - globalSettingsMock.Setup(x => x.ConfigurationStatus).Returns(Current.UmbracoVersion.Current.ToString(3)); + globalSettingsMock.Setup(x => x.ConfigurationStatus).Returns(UmbracoVersion.Current.ToString(3)); using (ProfilingLogger.TraceDuration("Initialize database.")) { @@ -304,7 +303,7 @@ namespace Umbraco.Tests.TestHelpers { using (var scope = ScopeProvider.CreateScope()) { - var schemaHelper = new DatabaseSchemaCreator(scope.Database, Logger); + var schemaHelper = new DatabaseSchemaCreator(scope.Database, Logger, UmbracoVersion); //Create the umbraco database and its base data schemaHelper.InitializeDatabaseSchema(); diff --git a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs index 7b34dc7ab9..44f19f4540 100644 --- a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs +++ b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs @@ -115,6 +115,7 @@ namespace Umbraco.Tests.Testing protected IMapperCollection Mappers => Factory.GetInstance(); protected UmbracoMapper Mapper => Factory.GetInstance(); + protected IRuntimeState RuntimeState => ComponentTests.MockRuntimeState(RuntimeLevel.Run); #endregion @@ -344,9 +345,9 @@ namespace Umbraco.Tests.Testing Composition.RegisterUnique(factory => TestObjects.GetFileSystemsMock()); var logger = Mock.Of(); - var ioHelper = Mock.Of(); var scheme = Mock.Of(); var config = Mock.Of(); + var ioHelper = Mock.Of(); var mediaFileSystem = new MediaFileSystem(Mock.Of(), config, scheme, logger, ioHelper); Composition.RegisterUnique(factory => mediaFileSystem); diff --git a/src/Umbraco.Tests/UmbracoExamine/EventsTest.cs b/src/Umbraco.Tests/UmbracoExamine/EventsTest.cs index ed5ae07fc0..20e774c78a 100644 --- a/src/Umbraco.Tests/UmbracoExamine/EventsTest.cs +++ b/src/Umbraco.Tests/UmbracoExamine/EventsTest.cs @@ -19,7 +19,7 @@ namespace Umbraco.Tests.UmbracoExamine public void Events_Ignoring_Node() { using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, //make parent id 999 so all are ignored validator: new ContentValueSetValidator(false, 999))) using (indexer.ProcessNonAsync()) diff --git a/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs b/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs index 5be3fe2e7e..ce3e45c23f 100644 --- a/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs +++ b/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs @@ -1,9 +1,12 @@ using System.IO; using NUnit.Framework; +using Umbraco.Core; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Logging; using Umbraco.Core.Logging.Serilog; using Umbraco.Core.Strings; +using Umbraco.Tests.Components; using Umbraco.Tests.TestHelpers; namespace Umbraco.Tests.UmbracoExamine @@ -21,6 +24,8 @@ namespace Umbraco.Tests.UmbracoExamine private IProfilingLogger _profilingLogger; protected override IProfilingLogger ProfilingLogger => _profilingLogger; + + /// /// sets up resolvers before resolution is frozen /// diff --git a/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs b/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs index 1653de827d..6dc96da007 100644 --- a/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs +++ b/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs @@ -8,6 +8,7 @@ using Lucene.Net.Analysis.Standard; using Lucene.Net.Store; using Moq; using Umbraco.Core; +using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Models.Membership; @@ -153,6 +154,8 @@ namespace Umbraco.Tests.UmbracoExamine public static UmbracoContentIndex GetUmbracoIndexer( IProfilingLogger profilingLogger, + IIOHelper ioHelper, + IRuntimeState runtimeState, Directory luceneDir, Analyzer analyzer = null, ILocalizationService languageService = null, @@ -173,6 +176,8 @@ namespace Umbraco.Tests.UmbracoExamine new UmbracoFieldDefinitionCollection(), analyzer, profilingLogger, + ioHelper, + runtimeState, languageService, validator); diff --git a/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs b/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs index 9e59422310..f2d9ff626d 100644 --- a/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs +++ b/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs @@ -32,7 +32,7 @@ namespace Umbraco.Tests.UmbracoExamine var contentValueSetBuilder = IndexInitializer.GetContentValueSetBuilder(Factory.GetInstance(), false); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(false))) using (indexer.ProcessNonAsync()) { @@ -125,7 +125,7 @@ namespace Umbraco.Tests.UmbracoExamine var mediaRebuilder = IndexInitializer.GetMediaIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockMediaService()); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(false))) using (indexer.ProcessNonAsync()) { @@ -153,7 +153,7 @@ namespace Umbraco.Tests.UmbracoExamine using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir)) + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir)) using (indexer.ProcessNonAsync()) using (var searcher = ((LuceneSearcher)indexer.GetSearcher()).GetLuceneSearcher()) { @@ -190,7 +190,7 @@ namespace Umbraco.Tests.UmbracoExamine var validator = new ContentValueSetValidator(false, 1116); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, validator: validator)) + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: validator)) using (indexer.ProcessNonAsync()) { var searcher = indexer.GetSearcher(); @@ -233,7 +233,7 @@ namespace Umbraco.Tests.UmbracoExamine var validator = new ContentValueSetValidator(false, 2222); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer1 = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, validator: validator)) + using (var indexer1 = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: validator)) using (indexer1.ProcessNonAsync()) { var searcher = indexer1.GetSearcher(); @@ -276,7 +276,7 @@ namespace Umbraco.Tests.UmbracoExamine { var rebuilder = IndexInitializer.GetContentIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockContentService(), ScopeProvider.SqlContext, false); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir, + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir, validator: new ContentValueSetValidator(false))) using (indexer.ProcessNonAsync()) { @@ -318,7 +318,7 @@ namespace Umbraco.Tests.UmbracoExamine var rebuilder = IndexInitializer.GetContentIndexRebuilder(Factory.GetInstance(), IndexInitializer.GetMockContentService(), ScopeProvider.SqlContext, false); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir)) + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir)) using (indexer.ProcessNonAsync()) { var searcher = indexer.GetSearcher(); diff --git a/src/Umbraco.Tests/UmbracoExamine/SearchTests.cs b/src/Umbraco.Tests/UmbracoExamine/SearchTests.cs index a45a33ec00..fb6fa4c0c1 100644 --- a/src/Umbraco.Tests/UmbracoExamine/SearchTests.cs +++ b/src/Umbraco.Tests/UmbracoExamine/SearchTests.cs @@ -58,7 +58,7 @@ namespace Umbraco.Tests.UmbracoExamine var rebuilder = IndexInitializer.GetContentIndexRebuilder(propertyEditors, contentService, ScopeProvider.SqlContext, true); using (var luceneDir = new RandomIdRamDirectory()) - using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, luceneDir)) + using (var indexer = IndexInitializer.GetUmbracoIndexer(ProfilingLogger, IOHelper, RuntimeState, luceneDir)) using (indexer.ProcessNonAsync()) { indexer.CreateIndex(); diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 2652368819..072e2277b7 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -5309,12 +5309,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5329,17 +5331,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -5456,7 +5461,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -5468,6 +5474,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5482,6 +5489,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5489,12 +5497,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -5513,6 +5523,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -5593,7 +5604,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -5605,6 +5617,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -5726,6 +5739,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", diff --git a/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js b/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js index 4d4f8792cf..b0941bd5ad 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js @@ -543,11 +543,11 @@ function tinyMceService($rootScope, $q, imageHelper, $locale, $http, $timeout, s 'contenteditable': false }, embed.preview); - - if (activeElement) { + + // Only replace if activeElement is an Embed element. + if (activeElement && activeElement.nodeName.toUpperCase() === "DIV" && activeElement.classList.contains("embeditem")){ activeElement.replaceWith(wrapper); // directly replaces the html node - } - else { + } else { editor.selection.setNode(wrapper); } }, diff --git a/src/Umbraco.Web.UI/Umbraco/Views/AuthorizeUpgrade.cshtml b/src/Umbraco.Web.UI/Umbraco/Views/AuthorizeUpgrade.cshtml index 2eca580097..f59e70e174 100644 --- a/src/Umbraco.Web.UI/Umbraco/Views/AuthorizeUpgrade.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/Views/AuthorizeUpgrade.cshtml @@ -57,7 +57,7 @@ redirectUrl = Url.Action("AuthorizeUpgrade", "BackOffice") }); } - @Html.BareMinimumServerVariablesScript(Url, externalLoginUrl, Model.Features, Model.GlobalSettings) + @Html.BareMinimumServerVariablesScript(Url, externalLoginUrl, Model.Features, Model.GlobalSettings, Model.UmbracoVersion)