diff --git a/src/Umbraco.Core/Components/Composition.cs b/src/Umbraco.Core/Components/Composition.cs index 53acbdb132..dd0b83dcb3 100644 --- a/src/Umbraco.Core/Components/Composition.cs +++ b/src/Umbraco.Core/Components/Composition.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; using Umbraco.Core.Logging; namespace Umbraco.Core.Components @@ -26,12 +27,21 @@ namespace Umbraco.Core.Components /// A type loader. /// A logger. /// The runtime state. - public Composition(IRegister register, TypeLoader typeLoader, IProfilingLogger logger, IRuntimeState runtimeState) + /// Optional configs. + public Composition(IRegister register, TypeLoader typeLoader, IProfilingLogger logger, IRuntimeState runtimeState, Configs configs = null) { _register = register; TypeLoader = typeLoader; Logger = logger; RuntimeState = runtimeState; + + if (configs == null) + { + configs = new Configs(); + configs.AddCoreConfigs(); + } + + Configs = configs; } #region Services @@ -51,6 +61,11 @@ namespace Umbraco.Core.Components /// public IRuntimeState RuntimeState { get; } + /// + /// Gets the configurations. + /// + public Configs Configs { get; } + #endregion #region IRegister @@ -94,6 +109,8 @@ namespace Umbraco.Core.Components foreach (var builder in _builders.Values) builder.RegisterWith(_register); + Configs.RegisterWith(_register); + return _register.CreateFactory(); } diff --git a/src/Umbraco.Core/Composing/Composers/ConfigurationComposer.cs b/src/Umbraco.Core/Composing/Composers/ConfigurationComposer.cs index 7217f551e9..ca86f623cc 100644 --- a/src/Umbraco.Core/Composing/Composers/ConfigurationComposer.cs +++ b/src/Umbraco.Core/Composing/Composers/ConfigurationComposer.cs @@ -5,24 +5,19 @@ using Umbraco.Core.Configuration.UmbracoSettings; namespace Umbraco.Core.Composing.Composers { /// - /// Sets up IoC container for Umbraco configuration classes + /// Compose configurations. /// public static class ConfigurationComposer { public static Composition ComposeConfiguration(this Composition composition) { - composition.RegisterUnique(); - composition.RegisterUnique(factory => factory.GetInstance().Umbraco()); + // common configurations are already registered + // register others + composition.RegisterUnique(factory => factory.GetInstance().Content); composition.RegisterUnique(factory => factory.GetInstance().Templates); composition.RegisterUnique(factory => factory.GetInstance().RequestHandler); composition.RegisterUnique(factory => factory.GetInstance().Security); - composition.RegisterUnique(factory => factory.GetInstance().Global()); - composition.RegisterUnique(factory => factory.GetInstance().Dashboards()); - composition.RegisterUnique(factory => factory.GetInstance().HealthChecks()); - composition.RegisterUnique(factory => factory.GetInstance().Grids()); - - // fixme - other sections we need to add? return composition; } diff --git a/src/Umbraco.Core/Composing/Current.cs b/src/Umbraco.Core/Composing/Current.cs index 6c093dfc2c..7050f3b112 100644 --- a/src/Umbraco.Core/Composing/Current.cs +++ b/src/Umbraco.Core/Composing/Current.cs @@ -39,7 +39,7 @@ namespace Umbraco.Core.Composing private static IProfiler _profiler; private static IProfilingLogger _profilingLogger; private static IPublishedValueFallback _publishedValueFallback; - private static UmbracoConfig _config; + private static Configs _configs; /// /// Gets or sets the factory. @@ -48,17 +48,18 @@ namespace Umbraco.Core.Composing { get { - if (_factory == null) throw new Exception("No factory has been set."); + if (_factory == null) throw new InvalidOperationException("No factory has been set."); return _factory; } set { - if (_factory != null) throw new Exception("A factory has already been set."); + if (_factory != null) throw new InvalidOperationException("A factory has already been set."); + if (_configs != null) throw new InvalidOperationException("Configs are unlocked."); _factory = value; } } - internal static bool HasContainer => _factory != null; + internal static bool HasFactory => _factory != null; // for UNIT TESTS exclusively! // resets *everything* that is 'current' @@ -67,6 +68,7 @@ namespace Umbraco.Core.Composing _factory.DisposeIfDisposable(); _factory = null; + _configs = null; _shortStringHelper = null; _logger = null; _profiler = null; @@ -76,21 +78,31 @@ namespace Umbraco.Core.Composing Resetted?.Invoke(null, EventArgs.Empty); } + // for UNIT TESTS exclusively! + // unlocks configuration, so it is possible to add configurations + // to Current.Configs - without having to use composition.Configs + internal static void UnlockConfigs() + { + if (_factory != null) + throw new InvalidOperationException("Cannot unlock configs when a factory has been set."); + _configs = new Configs(); + } + internal static event EventHandler Resetted; #region Getters public static IShortStringHelper ShortStringHelper => _shortStringHelper ?? (_shortStringHelper = _factory?.TryGetInstance() - ?? new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(Config.Umbraco()))); + ?? new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(Configs.Settings()))); public static ILogger Logger => _logger ?? (_logger = _factory?.TryGetInstance() - ?? new DebugDiagnosticsLogger()); + ?? new DebugDiagnosticsLogger()); public static IProfiler Profiler => _profiler ?? (_profiler = _factory?.TryGetInstance() - ?? new LogProfiler(Logger)); + ?? new LogProfiler(Logger)); public static IProfilingLogger ProfilingLogger => _profilingLogger ?? (_profilingLogger = _factory?.TryGetInstance()) @@ -102,9 +114,15 @@ namespace Umbraco.Core.Composing public static TypeLoader TypeLoader => Factory.GetInstance(); - public static UmbracoConfig Config - => _config ?? (_config = _factory?.TryGetInstance() - ?? new UmbracoConfig(Logger, _factory?.TryGetInstance(), _factory?.TryGetInstance())); + public static Configs Configs + { + get + { + if (_configs != null) return _configs; + if (_factory == null) throw new InvalidOperationException("Can not get Current.Config during composition. Use composition.Config."); + return _factory.GetInstance(); + } + } public static IFileSystems FileSystems => Factory.GetInstance(); diff --git a/src/Umbraco.Core/ConfigsExtensions.cs b/src/Umbraco.Core/ConfigsExtensions.cs new file mode 100644 index 0000000000..1414dbc852 --- /dev/null +++ b/src/Umbraco.Core/ConfigsExtensions.cs @@ -0,0 +1,52 @@ +using System.IO; +using Umbraco.Core.Cache; +using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; +using Umbraco.Core.Configuration.Dashboard; +using Umbraco.Core.Configuration.Grid; +using Umbraco.Core.Configuration.HealthChecks; +using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.IO; +using Umbraco.Core.Logging; + +namespace Umbraco.Core +{ + /// + /// Provides extension methods for the class. + /// + public static class ConfigsExtensions + { + public static IGlobalSettings Global(this Configs configs) + => configs.GetConfig(); + + public static IUmbracoSettingsSection Settings(this Configs configs) + => configs.GetConfig(); + + public static IDashboardSection Dashboards(this Configs configs) + => configs.GetConfig(); + + public static IHealthChecks HealthChecks(this Configs configs) + => configs.GetConfig(); + + public static IGridConfig Grids(this Configs configs) + => configs.GetConfig(); + + internal static CoreDebug CoreDebug(this Configs configs) + => configs.GetConfig(); + + public static void AddCoreConfigs(this Configs configs) + { + var configDir = new DirectoryInfo(IOHelper.MapPath(SystemDirectories.Config)); + + configs.Add(() => new GlobalSettings()); + configs.Add("umbracoConfiguration/settings"); + configs.Add("umbracoConfiguration/dashBoard"); + configs.Add("umbracoConfiguration/HealthChecks"); + + configs.Add(() => new CoreDebug()); + + // GridConfig depends on runtime caches, manifest parsers... and cannot be available during composition + configs.Add(factory => new GridConfig(factory.GetInstance(), factory.GetInstance(), configDir, factory.GetInstance().Debug)); + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Configuration/Configs.cs b/src/Umbraco.Core/Configuration/Configs.cs new file mode 100644 index 0000000000..3dbbe5d4ff --- /dev/null +++ b/src/Umbraco.Core/Configuration/Configs.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using Umbraco.Core.Composing; +using Umbraco.Core.Logging; + +namespace Umbraco.Core.Configuration +{ + /// + /// Represents Umbraco configurations. + /// + /// + /// During composition, use composition.Configs. When running, either inject the required configuration, + /// or use Current.Configs. + /// + public class Configs + { + private readonly Dictionary> _configs = new Dictionary>(); + private Dictionary> _registerings = new Dictionary>(); + + /// + /// Gets a configuration. + /// + public TConfig GetConfig() + where TConfig : class + { + if (!_configs.TryGetValue(typeof(TConfig), out var configFactory)) + throw new InvalidOperationException($"No configuration of type {typeof(TConfig)} has been added."); + + return (TConfig) configFactory.Value; + } + + /// + /// Adds a configuration, provided by a factory. + /// + public void Add(Func configFactory) + where TConfig : class + { + // make sure it is not too late + if (_registerings == null) + throw new InvalidOperationException("Configurations have already been registered."); + + var typeOfConfig = typeof(TConfig); + + var lazyConfigFactory = _configs[typeOfConfig] = new Lazy(configFactory); + _registerings[typeOfConfig] = register => register.Register(_ => (TConfig) lazyConfigFactory.Value, Lifetime.Singleton); + } + + /// + /// Adds a configuration, provided by a factory. + /// + public void Add(Func configFactory) + where TConfig : class + { + // make sure it is not too late + if (_registerings == null) + throw new InvalidOperationException("Configurations have already been registered."); + + var typeOfConfig = typeof(TConfig); + + _configs[typeOfConfig] = new Lazy(() => + { + if (Current.HasFactory) return Current.Factory.GetInstance(); + throw new InvalidOperationException($"Cannot get configuration of type {typeOfConfig} during composition."); + }); + _registerings[typeOfConfig] = register => register.Register(configFactory, Lifetime.Singleton); + } + + /// + /// Adds a configuration, provided by a configuration section. + /// + public void Add(string sectionName) + where TConfig : class + { + Add(() => GetConfig(sectionName)); + } + + private static TConfig GetConfig(string sectionName) + where TConfig : class + { + // note: need to use SafeCallContext here because ConfigurationManager.GetSection ends up getting AppDomain.Evidence + // which will want to serialize the call context including anything that is in there - what a mess! + + using (new SafeCallContext()) + { + if ((ConfigurationManager.GetSection(sectionName) is TConfig config)) + return config; + var ex = new ConfigurationErrorsException($"Could not get configuration section \"{sectionName}\" from config files."); + Current.Logger.Error(ex, "Config error"); + throw ex; + } + } + + /// + /// Registers configurations in a register. + /// + public void RegisterWith(IRegister register) + { + // do it only once + if (_registerings == null) + throw new InvalidOperationException("Configurations have already been registered."); + + register.RegisterInstance(this); + + foreach (var registering in _registerings.Values) + registering(register); + + // no need to keep them around + _registerings = null; + } + } +} diff --git a/src/Umbraco.Core/Configuration/CoreDebug.cs b/src/Umbraco.Core/Configuration/CoreDebug.cs index 71d0f24941..a71b311d7c 100644 --- a/src/Umbraco.Core/Configuration/CoreDebug.cs +++ b/src/Umbraco.Core/Configuration/CoreDebug.cs @@ -2,16 +2,6 @@ namespace Umbraco.Core.Configuration { - internal static class CoreDebugExtensions - { - private static CoreDebug _coreDebug; - - public static CoreDebug CoreDebug(this UmbracoConfig config) - { - return _coreDebug ?? (_coreDebug = new CoreDebug()); - } - } - internal class CoreDebug { public CoreDebug() diff --git a/src/Umbraco.Core/Configuration/Grid/GridConfig.cs b/src/Umbraco.Core/Configuration/Grid/GridConfig.cs index beade2d6d1..6c16a5e7ef 100644 --- a/src/Umbraco.Core/Configuration/Grid/GridConfig.cs +++ b/src/Umbraco.Core/Configuration/Grid/GridConfig.cs @@ -6,11 +6,11 @@ namespace Umbraco.Core.Configuration.Grid { class GridConfig : IGridConfig { - public GridConfig(ILogger logger, IRuntimeCacheProvider runtimeCache, DirectoryInfo appPlugins, DirectoryInfo configFolder, bool isDebug) + public GridConfig(ILogger logger, IRuntimeCacheProvider runtimeCache, DirectoryInfo configFolder, bool isDebug) { - EditorsConfig = new GridEditorsConfig(logger, runtimeCache, appPlugins, configFolder, isDebug); + EditorsConfig = new GridEditorsConfig(logger, runtimeCache, configFolder, isDebug); } - public IGridEditorsConfig EditorsConfig { get; private set; } + public IGridEditorsConfig EditorsConfig { get; } } } diff --git a/src/Umbraco.Core/Configuration/Grid/GridEditorsConfig.cs b/src/Umbraco.Core/Configuration/Grid/GridEditorsConfig.cs index 708c563d9d..94249aa135 100644 --- a/src/Umbraco.Core/Configuration/Grid/GridEditorsConfig.cs +++ b/src/Umbraco.Core/Configuration/Grid/GridEditorsConfig.cs @@ -14,15 +14,13 @@ namespace Umbraco.Core.Configuration.Grid { private readonly ILogger _logger; private readonly IRuntimeCacheProvider _runtimeCache; - private readonly DirectoryInfo _appPlugins; private readonly DirectoryInfo _configFolder; private readonly bool _isDebug; - public GridEditorsConfig(ILogger logger, IRuntimeCacheProvider runtimeCache, DirectoryInfo appPlugins, DirectoryInfo configFolder, bool isDebug) + public GridEditorsConfig(ILogger logger, IRuntimeCacheProvider runtimeCache, DirectoryInfo configFolder, bool isDebug) { _logger = logger; _runtimeCache = runtimeCache; - _appPlugins = appPlugins; _configFolder = configFolder; _isDebug = isDebug; } @@ -31,7 +29,7 @@ namespace Umbraco.Core.Configuration.Grid { get { - Func> getResult = () => + List GetResult() { // fixme - should use the common one somehow! + ignoring _appPlugins here! var parser = new ManifestParser(_runtimeCache, Current.ManifestValidators, _logger); @@ -55,20 +53,16 @@ namespace Umbraco.Core.Configuration.Grid // add manifest editors, skip duplicates foreach (var gridEditor in parser.Manifest.GridEditors) { - if (editors.Contains(gridEditor) == false) - editors.Add(gridEditor); + if (editors.Contains(gridEditor) == false) editors.Add(gridEditor); } return editors; - }; + } //cache the result if debugging is disabled var result = _isDebug - ? getResult() - : _runtimeCache.GetCacheItem>( - typeof(GridEditorsConfig) + "Editors", - () => getResult(), - TimeSpan.FromMinutes(10)); + ? GetResult() + : _runtimeCache.GetCacheItem>(typeof(GridEditorsConfig) + ".Editors",GetResult, TimeSpan.FromMinutes(10)); return result; } diff --git a/src/Umbraco.Core/Configuration/UmbracoConfig.cs b/src/Umbraco.Core/Configuration/UmbracoConfig.cs deleted file mode 100644 index 0ace23dba4..0000000000 --- a/src/Umbraco.Core/Configuration/UmbracoConfig.cs +++ /dev/null @@ -1,138 +0,0 @@ -using System; -using System.Configuration; -using System.IO; -using Umbraco.Core.Cache; -using Umbraco.Core.Configuration.Dashboard; -using Umbraco.Core.Configuration.Grid; -using Umbraco.Core.Configuration.HealthChecks; -using Umbraco.Core.Configuration.UmbracoSettings; -using Umbraco.Core.Composing; -using Umbraco.Core.IO; -using Umbraco.Core.Logging; - -namespace Umbraco.Core.Configuration -{ - /// - /// The gateway to all umbraco configuration. - /// - /// This should be registered as a unique service in the container. - public class UmbracoConfig - { - private IGlobalSettings _global; - private Lazy _umbraco; - private Lazy _healthChecks; - private Lazy _dashboards; - private Lazy _grids; - - /// - /// Initializes a new instance of the class. - /// - public UmbracoConfig(ILogger logger, IRuntimeCacheProvider runtimeCache, IRuntimeState runtimeState) - { - _global = new GlobalSettings(); - - var appPluginsDir = new DirectoryInfo(IOHelper.MapPath(SystemDirectories.AppPlugins)); - var configDir = new DirectoryInfo(IOHelper.MapPath(SystemDirectories.Config)); - - _umbraco = new Lazy(() => GetConfig("umbracoConfiguration/settings")); - _dashboards = new Lazy(() =>GetConfig("umbracoConfiguration/dashBoard")); - _healthChecks = new Lazy(() => GetConfig("umbracoConfiguration/HealthChecks")); - _grids = new Lazy(() => new GridConfig(logger, runtimeCache, appPluginsDir, configDir, runtimeState.Debug)); - } - - /// - /// Gets a typed and named config section. - /// - /// The type of the configuration section. - /// The name of the configuration section. - /// The configuration section. - public static TConfig GetConfig(string sectionName) - where TConfig : class - { - // note: need to use SafeCallContext here because ConfigurationManager.GetSection ends up getting AppDomain.Evidence - // which will want to serialize the call context including anything that is in there - what a mess! - - using (new SafeCallContext()) - { - if ((ConfigurationManager.GetSection(sectionName) is TConfig config)) - return config; - var ex = new ConfigurationErrorsException($"Could not get configuration section \"{sectionName}\" from config files."); - Current.Logger.Error(ex, "Config error"); - throw ex; - } - } - - /// - /// Gets the global configuration. - /// - public IGlobalSettings Global() - => _global; - - /// - /// Gets the Umbraco configuration. - /// - public IUmbracoSettingsSection Umbraco() - => _umbraco.Value; - - /// - /// Gets the dashboards configuration. - /// - public IDashboardSection Dashboards() - => _dashboards.Value; - - /// - /// Gets the health checks configuration. - /// - public IHealthChecks HealthChecks() - => _healthChecks.Value; - - /// - /// Gets the grids configuration. - /// - public IGridConfig Grids() - => _grids.Value; - - /// - /// Sets the global configuration, for tests only. - /// - public void SetGlobalConfig(IGlobalSettings value) - { - _global = value; - } - - /// - /// Sets the Umbraco configuration, for tests only. - /// - public void SetUmbracoConfig(IUmbracoSettingsSection value) - { - _umbraco = new Lazy(() => value); - } - - /// - /// Sets the dashboards configuration, for tests only. - /// - /// - public void SetDashboardsConfig(IDashboardSection value) - { - _dashboards = new Lazy(() => value); - } - - /// - /// Sets the health checks configuration, for tests only. - /// - public void SetHealthChecksConfig(IHealthChecks value) - { - _healthChecks = new Lazy(() => value); - } - - /// - /// Sets the grids configuration, for tests only. - /// - public void SetGridsConfig(IGridConfig value) - { - _grids = new Lazy(() => value); - } - - //TODO: Add other configurations here ! - } -} diff --git a/src/Umbraco.Core/IO/MediaPathSchemes/OriginalMediaPathScheme.cs b/src/Umbraco.Core/IO/MediaPathSchemes/OriginalMediaPathScheme.cs index 14f0c7602b..1948a9f662 100644 --- a/src/Umbraco.Core/IO/MediaPathSchemes/OriginalMediaPathScheme.cs +++ b/src/Umbraco.Core/IO/MediaPathSchemes/OriginalMediaPathScheme.cs @@ -31,7 +31,7 @@ namespace Umbraco.Core.IO.MediaPathSchemes // prevpath should be "/" OR "-" // and we want to reuse the "" part, so try to find it - var sep = Current.Config.Umbraco().Content.UploadAllowDirectories ? "/" : "-"; + var sep = Current.Configs.Settings().Content.UploadAllowDirectories ? "/" : "-"; var pos = previous.IndexOf(sep, StringComparison.Ordinal); var s = pos > 0 ? previous.Substring(0, pos) : null; @@ -45,7 +45,7 @@ namespace Umbraco.Core.IO.MediaPathSchemes if (directory == null) throw new InvalidOperationException("Cannot use a null directory."); - return Current.Config.Umbraco().Content.UploadAllowDirectories + return Current.Configs.Settings().Content.UploadAllowDirectories ? Path.Combine(directory, filename).Replace('\\', '/') : directory + "-" + filename; } diff --git a/src/Umbraco.Core/Logging/Serilog/SerilogLogger.cs b/src/Umbraco.Core/Logging/Serilog/SerilogLogger.cs index 3fd6d18278..17d86b45e1 100644 --- a/src/Umbraco.Core/Logging/Serilog/SerilogLogger.cs +++ b/src/Umbraco.Core/Logging/Serilog/SerilogLogger.cs @@ -166,7 +166,7 @@ namespace Umbraco.Core.Logging.Serilog messageTemplate += "\r\nThe thread has been aborted, because the request has timed out."; // dump if configured, or if stacktrace contains Monitor.ReliableEnter - dump = Current.Config.CoreDebug().DumpOnTimeoutThreadAbort || IsMonitorEnterThreadAbortException(exception); + dump = Current.Configs.CoreDebug().DumpOnTimeoutThreadAbort || IsMonitorEnterThreadAbortException(exception); // dump if it is ok to dump (might have a cap on number of dump...) dump &= MiniDump.OkToDump(); @@ -217,9 +217,9 @@ namespace Umbraco.Core.Logging.Serilog /// public void Warn(Type reporting, string message) { - LoggerFor(reporting).Warning(message); + LoggerFor(reporting).Warning(message); } - + /// public void Warn(Type reporting, string message, params object[] propertyValues) { @@ -231,7 +231,7 @@ namespace Umbraco.Core.Logging.Serilog { LoggerFor(reporting).Warning(exception, message); } - + /// public void Warn(Type reporting, Exception exception, string messageTemplate, params object[] propertyValues) { @@ -255,7 +255,7 @@ namespace Umbraco.Core.Logging.Serilog { LoggerFor(reporting).Debug(message); } - + /// public void Debug(Type reporting, string messageTemplate, params object[] propertyValues) { diff --git a/src/Umbraco.Core/Models/Identity/BackOfficeIdentityUser.cs b/src/Umbraco.Core/Models/Identity/BackOfficeIdentityUser.cs index f163124c2d..dcf86a0b42 100644 --- a/src/Umbraco.Core/Models/Identity/BackOfficeIdentityUser.cs +++ b/src/Umbraco.Core/Models/Identity/BackOfficeIdentityUser.cs @@ -67,7 +67,7 @@ namespace Umbraco.Core.Models.Identity _startContentIds = new int[] { }; _groups = new IReadOnlyUserGroup[] { }; _allowedSections = new string[] { }; - _culture = Current.Config.Global().DefaultUILanguage; //fixme inject somehow? + _culture = Current.Configs.Global().DefaultUILanguage; //fixme inject somehow? _groups = new IReadOnlyUserGroup[0]; _roles = new ObservableCollection>(); _roles.CollectionChanged += _roles_CollectionChanged; @@ -84,7 +84,7 @@ namespace Umbraco.Core.Models.Identity _startContentIds = new int[] { }; _groups = new IReadOnlyUserGroup[] { }; _allowedSections = new string[] { }; - _culture = Current.Config.Global().DefaultUILanguage; //fixme inject somehow? + _culture = Current.Configs.Global().DefaultUILanguage; //fixme inject somehow? _groups = groups.ToArray(); _roles = new ObservableCollection>(_groups.Select(x => new IdentityUserRole { diff --git a/src/Umbraco.Core/Models/Membership/User.cs b/src/Umbraco.Core/Models/Membership/User.cs index 9387d3eb8f..650aa6cb29 100644 --- a/src/Umbraco.Core/Models/Membership/User.cs +++ b/src/Umbraco.Core/Models/Membership/User.cs @@ -27,7 +27,7 @@ namespace Umbraco.Core.Models.Membership { SessionTimeout = 60; _userGroups = new HashSet(); - _language = Current.Config.Global().DefaultUILanguage; //fixme inject somehow? + _language = Current.Configs.Global().DefaultUILanguage; //fixme inject somehow? _isApproved = true; _isLockedOut = false; _startContentIds = new int[] { }; diff --git a/src/Umbraco.Core/Models/PublishedContent/PublishedContentExtensionsForModels.cs b/src/Umbraco.Core/Models/PublishedContent/PublishedContentExtensionsForModels.cs index df3213eb07..bfc65b70d6 100644 --- a/src/Umbraco.Core/Models/PublishedContent/PublishedContentExtensionsForModels.cs +++ b/src/Umbraco.Core/Models/PublishedContent/PublishedContentExtensionsForModels.cs @@ -21,7 +21,7 @@ namespace Umbraco.Core.Models.PublishedContent // in order to provide a nice, "fluent" experience, this extension method // needs to access Current, which is not always initialized in tests - not // very elegant, but works - if (!Current.HasContainer) return content; + if (!Current.HasFactory) return content; // get model // if factory returns nothing, throw diff --git a/src/Umbraco.Core/Runtime/CoreRuntime.cs b/src/Umbraco.Core/Runtime/CoreRuntime.cs index 7a4314c968..5d2359d04c 100644 --- a/src/Umbraco.Core/Runtime/CoreRuntime.cs +++ b/src/Umbraco.Core/Runtime/CoreRuntime.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Reflection; using System.Threading; @@ -106,16 +107,18 @@ namespace Umbraco.Core.Runtime // database factory var databaseFactory = GetDatabaseFactory(); + // configs + var configs = GetConfigs(); + // type loader - var globalSettings = Current.Config.Global(); - var localTempStorage = globalSettings.LocalTempStorageLocation; + var localTempStorage = configs.Global().LocalTempStorageLocation; var typeLoader = new TypeLoader(runtimeCache, localTempStorage, ProfilingLogger); // runtime state // beware! must use '() => _factory.GetInstance()' and NOT '_factory.GetInstance' // as the second one captures the current value (null) and therefore fails _state = new RuntimeState(Logger, - Current.Config.Umbraco(), Current.Config.Global(), + configs.Settings(), configs.Global(), new Lazy(() => _factory.GetInstance()), new Lazy(() => _factory.GetInstance())) { @@ -126,7 +129,7 @@ namespace Umbraco.Core.Runtime var mainDom = new MainDom(Logger); // create the composition - composition = new Composition(register, typeLoader, ProfilingLogger, _state); + composition = new Composition(register, typeLoader, ProfilingLogger, _state, configs); composition.RegisterEssentials(Logger, Profiler, ProfilingLogger, mainDom, appCaches, databaseFactory, typeLoader, _state); // register runtime-level services @@ -152,9 +155,14 @@ namespace Umbraco.Core.Runtime } catch (Exception e) { - _state.Level = RuntimeLevel.BootFailed; var bfe = e as BootFailedException ?? new BootFailedException("Boot failed.", e); - _state.BootFailedException = bfe; + + if (_state != null) + { + _state.Level = RuntimeLevel.BootFailed; + _state.BootFailedException = bfe; + } + timer.Fail(exception: bfe); // be sure to log the exception - even if we repeat ourselves // if something goes wrong above, we may end up with no factory @@ -169,6 +177,8 @@ namespace Umbraco.Core.Runtime catch { /* yea */ } } + Debugger.Break(); + // throwing here can cause w3wp to hard-crash and we want to avoid it. // instead, we're logging the exception and setting level to BootFailed. // various parts of Umbraco such as UmbracoModule and UmbracoDefaultOwinStartup @@ -339,6 +349,16 @@ namespace Umbraco.Core.Runtime protected internal virtual IUmbracoDatabaseFactory GetDatabaseFactory() => new UmbracoDatabaseFactory(Logger, new Lazy(() => _factory.GetInstance())); + /// + /// Gets the configurations. + /// + protected virtual Configs GetConfigs() + { + var configs = new Configs(); + configs.AddCoreConfigs(); + return configs; + } + #endregion } } diff --git a/src/Umbraco.Core/Scoping/Scope.cs b/src/Umbraco.Core/Scoping/Scope.cs index daef4c4cd7..b8d4d7b430 100644 --- a/src/Umbraco.Core/Scoping/Scope.cs +++ b/src/Umbraco.Core/Scoping/Scope.cs @@ -492,7 +492,7 @@ namespace Umbraco.Core.Scoping // caching config // true if Umbraco.CoreDebug.LogUncompletedScope appSetting is set to "true" private static bool LogUncompletedScopes => (_logUncompletedScopes - ?? (_logUncompletedScopes = Current.Config.CoreDebug().LogUncompletedScopes)).Value; + ?? (_logUncompletedScopes = Current.Configs.CoreDebug().LogUncompletedScopes)).Value; /// public void ReadLock(params int[] lockIds) diff --git a/src/Umbraco.Core/Security/MembershipProviderExtensions.cs b/src/Umbraco.Core/Security/MembershipProviderExtensions.cs index 10f44c46e7..ff595a5d45 100644 --- a/src/Umbraco.Core/Security/MembershipProviderExtensions.cs +++ b/src/Umbraco.Core/Security/MembershipProviderExtensions.cs @@ -88,11 +88,11 @@ namespace Umbraco.Core.Security /// public static MembershipProvider GetUsersMembershipProvider() { - if (Membership.Providers[Current.Config.Umbraco().Providers.DefaultBackOfficeUserProvider] == null) + if (Membership.Providers[Current.Configs.Settings().Providers.DefaultBackOfficeUserProvider] == null) { - throw new InvalidOperationException("No membership provider found with name " + Current.Config.Umbraco().Providers.DefaultBackOfficeUserProvider); + throw new InvalidOperationException("No membership provider found with name " + Current.Configs.Settings().Providers.DefaultBackOfficeUserProvider); } - return Membership.Providers[Current.Config.Umbraco().Providers.DefaultBackOfficeUserProvider]; + return Membership.Providers[Current.Configs.Settings().Providers.DefaultBackOfficeUserProvider]; } /// diff --git a/src/Umbraco.Core/StringExtensions.cs b/src/Umbraco.Core/StringExtensions.cs index 98eaf9f4e9..90fc472e30 100644 --- a/src/Umbraco.Core/StringExtensions.cs +++ b/src/Umbraco.Core/StringExtensions.cs @@ -1114,7 +1114,7 @@ namespace Umbraco.Core /// Checks UmbracoSettings.ForceSafeAliases to determine whether it should filter the text. public static string ToSafeAliasWithForcingCheck(this string alias) { - return Current.Config.Umbraco().Content.ForceSafeAliases ? alias.ToSafeAlias() : alias; + return Current.Configs.Settings().Content.ForceSafeAliases ? alias.ToSafeAlias() : alias; } /// @@ -1126,7 +1126,7 @@ namespace Umbraco.Core /// Checks UmbracoSettings.ForceSafeAliases to determine whether it should filter the text. public static string ToSafeAliasWithForcingCheck(this string alias, string culture) { - return Current.Config.Umbraco().Content.ForceSafeAliases ? alias.ToSafeAlias(culture) : alias; + return Current.Configs.Settings().Content.ForceSafeAliases ? alias.ToSafeAlias(culture) : alias; } // the new methods to get a url segment diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index fc92bc4c55..a01bbf1746 100755 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -204,6 +204,8 @@ + + @@ -257,7 +259,6 @@ - diff --git a/src/Umbraco.Tests/Cache/PublishedCache/PublishedContentCacheTests.cs b/src/Umbraco.Tests/Cache/PublishedCache/PublishedContentCacheTests.cs index 7f2edac876..28e753cadc 100644 --- a/src/Umbraco.Tests/Cache/PublishedCache/PublishedContentCacheTests.cs +++ b/src/Umbraco.Tests/Cache/PublishedCache/PublishedContentCacheTests.cs @@ -4,6 +4,8 @@ using Moq; using NUnit.Framework; using Umbraco.Core.Cache; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; +using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; using Umbraco.Tests.Testing.Objects.Accessors; @@ -48,16 +50,14 @@ namespace Umbraco.Tests.Cache.PublishedCache "; } - public override void SetUp() + protected override void Initialize() { - base.SetUp(); + base.Initialize(); _httpContextFactory = new FakeHttpContextFactory("~/Home"); - var umbracoSettings = SettingsForTests.GenerateMockUmbracoSettings(); - var globalSettings = SettingsForTests.GenerateMockGlobalSettings(); - SettingsForTests.ConfigureSettings(umbracoSettings); - SettingsForTests.ConfigureSettings(globalSettings); + var umbracoSettings = Factory.GetInstance(); + var globalSettings = Factory.GetInstance(); _xml = new XmlDocument(); _xml.LoadXml(GetXml()); diff --git a/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs b/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs index d1470756f0..8587a7b194 100644 --- a/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs +++ b/src/Umbraco.Tests/Configurations/GlobalSettingsTests.cs @@ -2,6 +2,7 @@ using System.Web.Routing; using Moq; using NUnit.Framework; +using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.IO; @@ -46,14 +47,13 @@ namespace Umbraco.Tests.Configurations [TestCase("~/some-wacky/nestedPath", "/MyVirtualDir/NestedVDir/", "some-wacky-nestedpath")] public void Umbraco_Mvc_Area(string path, string rootPath, string outcome) { - var globalSettingsMock = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettingsMock = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettingsMock.Setup(x => x.Path).Returns(IOHelper.ResolveUrl(path)); - SettingsForTests.ConfigureSettings(globalSettingsMock.Object); SystemDirectories.Root = rootPath; - Assert.AreEqual(outcome, Current.Config.Global().GetUmbracoMvcArea()); + Assert.AreEqual(outcome, Current.Configs.Global().GetUmbracoMvcArea()); } - + [TestCase("/umbraco/editContent.aspx")] [TestCase("/install/default.aspx")] [TestCase("/install/")] @@ -93,10 +93,9 @@ namespace Umbraco.Tests.Configurations public void Is_Reserved_By_Route(string url, bool shouldMatch) { //reset the app config, we only want to test routes not the hard coded paths - var globalSettingsMock = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettingsMock = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettingsMock.Setup(x => x.ReservedPaths).Returns(""); globalSettingsMock.Setup(x => x.ReservedUrls).Returns(""); - SettingsForTests.ConfigureSettings(globalSettingsMock.Object); var routes = new RouteCollection(); diff --git a/src/Umbraco.Tests/CoreThings/TryConvertToTests.cs b/src/Umbraco.Tests/CoreThings/TryConvertToTests.cs index c7741deb04..120a7f40c9 100644 --- a/src/Umbraco.Tests/CoreThings/TryConvertToTests.cs +++ b/src/Umbraco.Tests/CoreThings/TryConvertToTests.cs @@ -1,8 +1,9 @@ using System; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Composing; +using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Strings; -using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; namespace Umbraco.Tests.CoreThings @@ -10,14 +11,11 @@ namespace Umbraco.Tests.CoreThings [TestFixture] public class TryConvertToTests : UmbracoTestBase { - public override void SetUp() + protected void Compose() { - base.SetUp(); + base.Compose(); - var settings = SettingsForTests.GetDefaultUmbracoSettings(); - - // fixme - base should do it! - Composition.RegisterUnique(_ => new DefaultShortStringHelper(settings)); + Composition.RegisterUnique(f => new DefaultShortStringHelper(f.GetInstance())); } [Test] diff --git a/src/Umbraco.Tests/IO/FileSystemsTests.cs b/src/Umbraco.Tests/IO/FileSystemsTests.cs index 116c53f5e4..d1aeb1a3fa 100644 --- a/src/Umbraco.Tests/IO/FileSystemsTests.cs +++ b/src/Umbraco.Tests/IO/FileSystemsTests.cs @@ -26,10 +26,6 @@ namespace Umbraco.Tests.IO [SetUp] public void Setup() { - //init the config singleton - var config = SettingsForTests.GetDefaultUmbracoSettings(); - SettingsForTests.ConfigureSettings(config); - _register = RegisterFactory.Create(); var composition = new Composition(_register, new TypeLoader(), Mock.Of(), ComponentTests.MockRuntimeState(RuntimeLevel.Run)); @@ -39,10 +35,18 @@ namespace Umbraco.Tests.IO composition.Register(_ => Mock.Of()); composition.RegisterUnique(); + composition.Configs.Add(SettingsForTests.GetDefaultGlobalSettings); + composition.Configs.Add(SettingsForTests.GetDefaultUmbracoSettings); + composition.ComposeFileSystems(); + composition.Configs.Add(SettingsForTests.GetDefaultUmbracoSettings); + _factory = composition.CreateFactory(); + Current.Reset(); + Current.Factory = _factory; + // make sure we start clean // because some tests will create corrupt or weird filesystems FileSystems.Reset(); diff --git a/src/Umbraco.Tests/Macros/MacroTests.cs b/src/Umbraco.Tests/Macros/MacroTests.cs index 3ab56052e0..984fb94fab 100644 --- a/src/Umbraco.Tests/Macros/MacroTests.cs +++ b/src/Umbraco.Tests/Macros/MacroTests.cs @@ -6,6 +6,7 @@ using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; +using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Models; using Umbraco.Tests.TestHelpers; using Umbraco.Web.Macros; @@ -27,7 +28,9 @@ namespace Umbraco.Tests.Macros new IsolatedRuntimeCache(type => new ObjectCacheRuntimeCacheProvider())); //Current.ApplicationContext = new ApplicationContext(cacheHelper, new ProfilingLogger(Mock.Of(), Mock.Of())); - Current.Config.SetUmbracoConfig(SettingsForTests.GetDefaultUmbracoSettings()); + Current.Reset(); + Current.UnlockConfigs(); + Current.Configs.Add(SettingsForTests.GetDefaultUmbracoSettings); } [TestCase("123", "IntProp", typeof(int))] diff --git a/src/Umbraco.Tests/Misc/UriUtilityTests.cs b/src/Umbraco.Tests/Misc/UriUtilityTests.cs index 0bd9156f20..42c69d3967 100644 --- a/src/Umbraco.Tests/Misc/UriUtilityTests.cs +++ b/src/Umbraco.Tests/Misc/UriUtilityTests.cs @@ -90,7 +90,6 @@ namespace Umbraco.Tests.Misc var settings = SettingsForTests.GenerateMockUmbracoSettings(); var requestMock = Mock.Get(settings.RequestHandler); requestMock.Setup(x => x.AddTrailingSlash).Returns(trailingSlash); - SettingsForTests.ConfigureSettings(settings); UriUtility.SetAppDomainAppVirtualPath("/"); diff --git a/src/Umbraco.Tests/Models/ContentTests.cs b/src/Umbraco.Tests/Models/ContentTests.cs index c893b71df5..24aeb1668f 100644 --- a/src/Umbraco.Tests/Models/ContentTests.cs +++ b/src/Umbraco.Tests/Models/ContentTests.cs @@ -7,18 +7,14 @@ using System.Threading; using Moq; using Umbraco.Core; using NUnit.Framework; -using Umbraco.Core; using Umbraco.Core.Cache; -using Umbraco.Core.Composing; using Umbraco.Core.Composing.Composers; 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.Serialization; using Umbraco.Core.Services; -using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Tests.TestHelpers.Stubs; using Umbraco.Tests.Testing; @@ -29,14 +25,6 @@ namespace Umbraco.Tests.Models [TestFixture] public class ContentTests : UmbracoTestBase { - public override void SetUp() - { - base.SetUp(); - - var config = SettingsForTests.GetDefaultUmbracoSettings(); - SettingsForTests.ConfigureSettings(config); - } - protected override void Compose() { base.Compose(); diff --git a/src/Umbraco.Tests/Models/MacroTests.cs b/src/Umbraco.Tests/Models/MacroTests.cs index b4060134bd..d980cd1d58 100644 --- a/src/Umbraco.Tests/Models/MacroTests.cs +++ b/src/Umbraco.Tests/Models/MacroTests.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using NUnit.Framework; +using Umbraco.Core.Composing; using Umbraco.Core.Models; using Umbraco.Core.Models.Entities; using Umbraco.Tests.TestHelpers; @@ -13,8 +14,9 @@ namespace Umbraco.Tests.Models [SetUp] public void Init() { - var config = SettingsForTests.GetDefaultUmbracoSettings(); - SettingsForTests.ConfigureSettings(config); + Current.Reset(); + Current.UnlockConfigs(); + Current.Configs.Add(SettingsForTests.GetDefaultUmbracoSettings); } [Test] diff --git a/src/Umbraco.Tests/Models/MemberTests.cs b/src/Umbraco.Tests/Models/MemberTests.cs index 76ea804c57..c09f2e9460 100644 --- a/src/Umbraco.Tests/Models/MemberTests.cs +++ b/src/Umbraco.Tests/Models/MemberTests.cs @@ -2,9 +2,10 @@ using System.Diagnostics; using System.Linq; using NUnit.Framework; +using Umbraco.Core.Composing; using Umbraco.Core.Models; -using Umbraco.Core.Models.Entities; using Umbraco.Core.Serialization; +using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; namespace Umbraco.Tests.Models @@ -12,6 +13,15 @@ namespace Umbraco.Tests.Models [TestFixture] public class MemberTests { + [SetUp] + public void Setup() + { + Current.Reset(); + Current.UnlockConfigs(); + Current.Configs.Add(SettingsForTests.GetDefaultGlobalSettings); + Current.Configs.Add(SettingsForTests.GetDefaultUmbracoSettings); + } + [Test] public void Can_Deep_Clone() { diff --git a/src/Umbraco.Tests/Models/UserTests.cs b/src/Umbraco.Tests/Models/UserTests.cs index 5e982633d2..797b79381a 100644 --- a/src/Umbraco.Tests/Models/UserTests.cs +++ b/src/Umbraco.Tests/Models/UserTests.cs @@ -2,14 +2,24 @@ using System.Diagnostics; using System.Linq; using NUnit.Framework; +using Umbraco.Core.Composing; using Umbraco.Core.Models.Membership; using Umbraco.Core.Serialization; +using Umbraco.Tests.TestHelpers; namespace Umbraco.Tests.Models { [TestFixture] public class UserTests { + [SetUp] + public void Setup() + { + Current.Reset(); + Current.UnlockConfigs(); + Current.Configs.Add(SettingsForTests.GetDefaultGlobalSettings); + } + [Test] public void Can_Deep_Clone() { diff --git a/src/Umbraco.Tests/Models/VariationTests.cs b/src/Umbraco.Tests/Models/VariationTests.cs index f5ba7f5915..103fd35074 100644 --- a/src/Umbraco.Tests/Models/VariationTests.cs +++ b/src/Umbraco.Tests/Models/VariationTests.cs @@ -3,6 +3,7 @@ using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.PropertyEditors; @@ -26,6 +27,11 @@ namespace Umbraco.Tests.Models // need to be able to retrieve them all... Current.Reset(); + + var configs = new Configs(); + configs.Add(SettingsForTests.GetDefaultGlobalSettings); + configs.Add(SettingsForTests.GetDefaultUmbracoSettings); + var factory = Mock.Of(); Current.Factory = factory; @@ -53,12 +59,12 @@ namespace Umbraco.Tests.Models .Setup(x => x.GetInstance(It.IsAny())) .Returns(x => { + if (x == typeof(Configs)) return configs; if (x == typeof(PropertyEditorCollection)) return propertyEditors; if (x == typeof(ServiceContext)) return serviceContext; if (x == typeof(ILocalizedTextService)) return serviceContext.LocalizationService; - throw new Exception("oops"); + throw new NotSupportedException(x.FullName); }); - } [Test] @@ -429,7 +435,7 @@ namespace Umbraco.Tests.Models Assert.IsTrue(content.IsCultureAvailable(langUk)); Assert.IsFalse(content.IsCulturePublished(langUk)); Assert.IsNull(content.GetPublishName(langUk)); - Assert.IsNull(content.GetPublishDate(langUk)); // not published + Assert.IsNull(content.GetPublishDate(langUk)); // not published Assert.IsFalse(content.IsCultureAvailable(langEs)); Assert.IsFalse(content.IsCultureEdited(langEs)); // not avail, so... not edited @@ -437,7 +443,7 @@ namespace Umbraco.Tests.Models // not published! Assert.IsNull(content.GetPublishName(langEs)); - Assert.IsNull(content.GetPublishDate(langEs)); + Assert.IsNull(content.GetPublishDate(langEs)); // cannot test IsCultureEdited here - as that requires the content service and repository // see: ContentServiceTests.Can_SaveRead_Variations diff --git a/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs b/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs index d12699efb7..3ba0ef64ce 100644 --- a/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs +++ b/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs @@ -35,8 +35,11 @@ namespace Umbraco.Tests.PublishedContent // this test implements a full standalone NuCache (based upon a test IDataSource, does not // use any local db files, does not rely on any database) - and tests variations - SettingsForTests.ConfigureSettings(SettingsForTests.GenerateMockUmbracoSettings()); - var globalSettings = Current.Config.Global(); + Current.Reset(); + Current.UnlockConfigs(); + Current.Configs.Add(SettingsForTests.GenerateMockUmbracoSettings); + Current.Configs.Add(() => new GlobalSettings()); + var globalSettings = Current.Configs.Global(); // create a content node kit var kit = new ContentNodeKit diff --git a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs index d88df766e3..88b211d0ee 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs @@ -104,7 +104,7 @@ namespace Umbraco.Tests.PublishedContent Assert.AreEqual("
This is some content
", propVal2.ToString()); var propVal3 = publishedMedia.Value("Content"); - Assert.IsInstanceOf(propVal3); + Assert.IsInstanceOf(propVal3); Assert.AreEqual("
This is some content
", propVal3.ToString()); } @@ -461,10 +461,6 @@ namespace Umbraco.Tests.PublishedContent [Test] public void Convert_From_Standard_Xml() { - var config = SettingsForTests.GenerateMockUmbracoSettings(); - - SettingsForTests.ConfigureSettings(config); - var nodeId = 2112; var xml = XElement.Parse(@" diff --git a/src/Umbraco.Tests/Routing/ContentFinderByUrlAndTemplateTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByUrlAndTemplateTests.cs index dab0f15917..c40b2e5876 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByUrlAndTemplateTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByUrlAndTemplateTests.cs @@ -1,5 +1,7 @@ using Moq; using NUnit.Framework; +using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; using Umbraco.Tests.TestHelpers; using Umbraco.Web.Routing; using Umbraco.Core.Models; @@ -27,10 +29,8 @@ namespace Umbraco.Tests.Routing [TestCase("/home/Sub1.aspx/blah")] public void Match_Document_By_Url_With_Template(string urlAsString) { - - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettings.Object); var template1 = CreateTemplate("test"); var template2 = CreateTemplate("blah"); diff --git a/src/Umbraco.Tests/Routing/ContentFinderByUrlTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByUrlTests.cs index e4002c0da1..fa8beea2c2 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByUrlTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByUrlTests.cs @@ -2,6 +2,7 @@ using System.Globalization; using Moq; using NUnit.Framework; +using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.Models; @@ -28,16 +29,15 @@ namespace Umbraco.Tests.Routing [TestCase("/test-page", 1172)] public void Match_Document_By_Url_Hide_Top_Level(string urlString, int expectedId) { - var globalSettingsMock = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettingsMock = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettingsMock.Setup(x => x.HideTopLevelNodeFromPath).Returns(true); - SettingsForTests.ConfigureSettings(globalSettingsMock.Object); var umbracoContext = GetUmbracoContext(urlString, globalSettings:globalSettingsMock.Object); var publishedRouter = CreatePublishedRouter(); var frequest = publishedRouter.CreateRequest(umbracoContext); var lookup = new ContentFinderByUrl(Logger); - Assert.IsTrue(Current.Config.Global().HideTopLevelNodeFromPath); + Assert.IsTrue(Current.Configs.Global().HideTopLevelNodeFromPath); // fixme debugging - going further down, the routes cache is NOT empty?! if (urlString == "/home/sub1") @@ -64,16 +64,15 @@ namespace Umbraco.Tests.Routing [TestCase("/home/Sub1.aspx", 1173)] public void Match_Document_By_Url(string urlString, int expectedId) { - var globalSettingsMock = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettingsMock = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettingsMock.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettingsMock.Object); var umbracoContext = GetUmbracoContext(urlString, globalSettings:globalSettingsMock.Object); var publishedRouter = CreatePublishedRouter(); var frequest = publishedRouter.CreateRequest(umbracoContext); var lookup = new ContentFinderByUrl(Logger); - Assert.IsFalse(Current.Config.Global().HideTopLevelNodeFromPath); + Assert.IsFalse(Current.Configs.Global().HideTopLevelNodeFromPath); var result = lookup.TryFindContent(frequest); @@ -90,9 +89,8 @@ namespace Umbraco.Tests.Routing [TestCase("/home/sub1/custom-sub-4-with-æøå", 1180)] public void Match_Document_By_Url_With_Special_Characters(string urlString, int expectedId) { - var globalSettingsMock = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettingsMock = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettingsMock.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettingsMock.Object); var umbracoContext = GetUmbracoContext(urlString, globalSettings:globalSettingsMock.Object); var publishedRouter = CreatePublishedRouter(); @@ -118,9 +116,8 @@ namespace Umbraco.Tests.Routing [TestCase("/home/sub1/custom-sub-4-with-æøå", 1180)] public void Match_Document_By_Url_With_Special_Characters_Using_Hostname(string urlString, int expectedId) { - var globalSettingsMock = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettingsMock = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettingsMock.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettingsMock.Object); var umbracoContext = GetUmbracoContext(urlString, globalSettings:globalSettingsMock.Object); var publishedRouter = CreatePublishedRouter(); @@ -148,9 +145,8 @@ namespace Umbraco.Tests.Routing [TestCase("/æøå/home/sub1/custom-sub-4-with-æøå", 1180)] public void Match_Document_By_Url_With_Special_Characters_In_Hostname(string urlString, int expectedId) { - var globalSettingsMock = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettingsMock = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettingsMock.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettingsMock.Object); var umbracoContext = GetUmbracoContext(urlString, globalSettings:globalSettingsMock.Object); var publishedRouter = CreatePublishedRouter(); diff --git a/src/Umbraco.Tests/Routing/ContentFinderByUrlWithDomainsTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByUrlWithDomainsTests.cs index 92aed90168..dfbe9b0cda 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByUrlWithDomainsTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByUrlWithDomainsTests.cs @@ -1,5 +1,7 @@ using Moq; using NUnit.Framework; +using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; using Umbraco.Core.Models; using Umbraco.Tests.TestHelpers; using Umbraco.Web.Routing; @@ -124,10 +126,9 @@ namespace Umbraco.Tests.Routing { SetDomains3(); - var globalSettingsMock = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettingsMock = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettingsMock.Setup(x => x.HideTopLevelNodeFromPath).Returns(true); - SettingsForTests.ConfigureSettings(globalSettingsMock.Object); - + var umbracoContext = GetUmbracoContext(url, globalSettings:globalSettingsMock.Object); var publishedRouter = CreatePublishedRouter(Factory); var frequest = publishedRouter.CreateRequest(umbracoContext); @@ -167,9 +168,8 @@ namespace Umbraco.Tests.Routing // defaults depend on test environment expectedCulture = expectedCulture ?? System.Threading.Thread.CurrentThread.CurrentUICulture.Name; - var globalSettingsMock = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettingsMock = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettingsMock.Setup(x => x.HideTopLevelNodeFromPath).Returns(true); - SettingsForTests.ConfigureSettings(globalSettingsMock.Object); var umbracoContext = GetUmbracoContext(url, globalSettings:globalSettingsMock.Object); var publishedRouter = CreatePublishedRouter(Factory); diff --git a/src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs b/src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs index 471fa27f82..a81f345e38 100644 --- a/src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs +++ b/src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs @@ -5,6 +5,7 @@ using Umbraco.Tests.TestHelpers; using Umbraco.Web.Routing; using Umbraco.Core; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; namespace Umbraco.Tests.Routing { @@ -265,9 +266,8 @@ namespace Umbraco.Tests.Routing { SetDomains1(); - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext(inputUrl, globalSettings:globalSettings.Object); var publishedRouter = CreatePublishedRouter(Factory); @@ -315,9 +315,8 @@ namespace Umbraco.Tests.Routing // defaults depend on test environment expectedCulture = expectedCulture ?? System.Threading.Thread.CurrentThread.CurrentUICulture.Name; - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext(inputUrl, globalSettings:globalSettings.Object); var publishedRouter = CreatePublishedRouter(Factory); @@ -371,9 +370,8 @@ namespace Umbraco.Tests.Routing { SetDomains3(); - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext(inputUrl, globalSettings:globalSettings.Object); var publishedRouter = CreatePublishedRouter(Factory); var frequest = publishedRouter.CreateRequest(umbracoContext); diff --git a/src/Umbraco.Tests/Routing/GetContentUrlsTests.cs b/src/Umbraco.Tests/Routing/GetContentUrlsTests.cs index 6079369df7..8e9e52258c 100644 --- a/src/Umbraco.Tests/Routing/GetContentUrlsTests.cs +++ b/src/Umbraco.Tests/Routing/GetContentUrlsTests.cs @@ -3,10 +3,11 @@ using System.Globalization; using System.Linq; using Moq; using NUnit.Framework; -using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core; +using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; using Umbraco.Core.Models; using Umbraco.Core.Services; -using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Web.Routing; @@ -15,17 +16,6 @@ namespace Umbraco.Tests.Routing [TestFixture] public class GetContentUrlsTests : UrlRoutingTestBase { - private IUmbracoSettingsSection _umbracoSettings; - - public override void SetUp() - { - base.SetUp(); - - //generate new mock settings and assign so we can configure in individual tests - _umbracoSettings = SettingsForTests.GenerateMockUmbracoSettings(); - SettingsForTests.ConfigureSettings(_umbracoSettings); - } - private ILocalizedTextService GetTextService() { var textService = Mock.Of( @@ -80,8 +70,10 @@ namespace Umbraco.Tests.Routing content.Path = "-1,1046"; content.Published = true; + var umbracoSettings = Current.Configs.Settings(); + var umbContext = GetUmbracoContext("http://localhost:8000", - urlProviders: new []{ new DefaultUrlProvider(_umbracoSettings.RequestHandler, Logger, TestObjects.GetGlobalSettings(), new SiteDomainHelper()) }); + urlProviders: new []{ new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, TestObjects.GetGlobalSettings(), new SiteDomainHelper()) }); var publishedRouter = CreatePublishedRouter(Factory, contentFinders:new ContentFinderCollection(new[]{new ContentFinderByUrl(Logger) })); var urls = content.GetContentUrls(publishedRouter, @@ -110,8 +102,10 @@ namespace Umbraco.Tests.Routing child.Path = "-1,1046,1173"; child.Published = true; + var umbracoSettings = Current.Configs.Settings(); + var umbContext = GetUmbracoContext("http://localhost:8000", - urlProviders: new[] { new DefaultUrlProvider(_umbracoSettings.RequestHandler, Logger, TestObjects.GetGlobalSettings(), new SiteDomainHelper()) }); + urlProviders: new[] { new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, TestObjects.GetGlobalSettings(), new SiteDomainHelper()) }); var publishedRouter = CreatePublishedRouter(Factory, contentFinders: new ContentFinderCollection(new[] { new ContentFinderByUrl(Logger) })); var urls = child.GetContentUrls(publishedRouter, diff --git a/src/Umbraco.Tests/Routing/UrlProviderTests.cs b/src/Umbraco.Tests/Routing/UrlProviderTests.cs index 6f29a312ae..819ea0b01c 100644 --- a/src/Umbraco.Tests/Routing/UrlProviderTests.cs +++ b/src/Umbraco.Tests/Routing/UrlProviderTests.cs @@ -6,7 +6,7 @@ using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Composing; -using Umbraco.Core.Configuration.UmbracoSettings; +using Umbraco.Core.Configuration; using Umbraco.Core.Models; using Umbraco.Core.Models.PublishedContent; using Umbraco.Tests.TestHelpers; @@ -28,15 +28,10 @@ namespace Umbraco.Tests.Routing Composition.Register(); } - private IUmbracoSettingsSection _umbracoSettings; - - public override void SetUp() + protected override void ComposeSettings() { - base.SetUp(); - - //generate new mock settings and assign so we can configure in individual tests - _umbracoSettings = SettingsForTests.GenerateMockUmbracoSettings(); - SettingsForTests.ConfigureSettings(_umbracoSettings); + Composition.Configs.Add(SettingsForTests.GenerateMockUmbracoSettings); + Composition.Configs.Add(SettingsForTests.GenerateMockGlobalSettings); } /// @@ -46,17 +41,18 @@ namespace Umbraco.Tests.Routing [Test] public void Ensure_Cache_Is_Correct() { - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.UseDirectoryUrls).Returns(true); globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettings.Object); + + var umbracoSettings = Current.Configs.Settings(); var umbracoContext = GetUmbracoContext("/test", 1111, urlProviders: new[] { - new DefaultUrlProvider(_umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper()) + new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper()) }, globalSettings: globalSettings.Object); - var requestHandlerMock = Mock.Get(_umbracoSettings.RequestHandler); + var requestHandlerMock = Mock.Get(umbracoSettings.RequestHandler); requestHandlerMock.Setup(x => x.AddTrailingSlash).Returns(false);// (cached routes have none) var samples = new Dictionary { @@ -109,17 +105,18 @@ namespace Umbraco.Tests.Routing [TestCase(1172, "/test-page/")] public void Get_Url_Not_Hiding_Top_Level(int nodeId, string niceUrlMatch) { - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.UseDirectoryUrls).Returns(true); globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettings.Object); + + var umbracoSettings = Current.Configs.Settings(); var umbracoContext = GetUmbracoContext("/test", 1111, urlProviders: new[] { - new DefaultUrlProvider(_umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper()) + new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper()) }, globalSettings: globalSettings.Object); - var requestMock = Mock.Get(_umbracoSettings.RequestHandler); + var requestMock = Mock.Get(umbracoSettings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); var result = umbracoContext.UrlProvider.GetUrl(nodeId); @@ -139,17 +136,18 @@ namespace Umbraco.Tests.Routing [TestCase(1172, "/test-page/")] // not hidden because not first root public void Get_Url_Hiding_Top_Level(int nodeId, string niceUrlMatch) { - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.UseDirectoryUrls).Returns(true); globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(true); - SettingsForTests.ConfigureSettings(globalSettings.Object); + + var umbracoSettings = Current.Configs.Settings(); var umbracoContext = GetUmbracoContext("/test", 1111, urlProviders: new[] { - new DefaultUrlProvider(_umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper()) + new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper()) }, globalSettings: globalSettings.Object); - var requestMock = Mock.Get(_umbracoSettings.RequestHandler); + var requestMock = Mock.Get(umbracoSettings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); var result = umbracoContext.UrlProvider.GetUrl(nodeId); @@ -161,12 +159,13 @@ namespace Umbraco.Tests.Routing { const string currentUri = "http://example.us/test"; - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.UseDirectoryUrls).Returns(true); globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettings.Object); - var requestMock = Mock.Get(_umbracoSettings.RequestHandler); + var umbracoSettings = Current.Configs.Settings(); + + var requestMock = Mock.Get(umbracoSettings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); var contentType = new PublishedContentType(666, "alias", PublishedItemType.Content, Enumerable.Empty(), Enumerable.Empty(), ContentVariation.Culture); @@ -188,9 +187,9 @@ namespace Umbraco.Tests.Routing snapshotService.Setup(x => x.CreatePublishedSnapshot(It.IsAny())) .Returns(snapshot); - var umbracoContext = GetUmbracoContext(currentUri, umbracoSettings: _umbracoSettings, + var umbracoContext = GetUmbracoContext(currentUri, umbracoSettings: umbracoSettings, urlProviders: new[] { - new DefaultUrlProvider(_umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper()) + new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper()) }, globalSettings: globalSettings.Object, snapshotService: snapshotService.Object); @@ -209,12 +208,13 @@ namespace Umbraco.Tests.Routing { const string currentUri = "http://example.fr/test"; - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.UseDirectoryUrls).Returns(true); globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettings.Object); - var requestMock = Mock.Get(_umbracoSettings.RequestHandler); + var umbracoSettings = Current.Configs.Settings(); + + var requestMock = Mock.Get(umbracoSettings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); var contentType = new PublishedContentType(666, "alias", PublishedItemType.Content, Enumerable.Empty(), Enumerable.Empty(), ContentVariation.Culture); @@ -245,9 +245,9 @@ namespace Umbraco.Tests.Routing snapshotService.Setup(x => x.CreatePublishedSnapshot(It.IsAny())) .Returns(snapshot); - var umbracoContext = GetUmbracoContext(currentUri, umbracoSettings: _umbracoSettings, + var umbracoContext = GetUmbracoContext(currentUri, umbracoSettings: umbracoSettings, urlProviders: new[] { - new DefaultUrlProvider(_umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper()) + new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper()) }, globalSettings: globalSettings.Object, snapshotService: snapshotService.Object); @@ -266,12 +266,13 @@ namespace Umbraco.Tests.Routing { const string currentUri = "http://example.us/test"; - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.UseDirectoryUrls).Returns(true); globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettings.Object); - var requestMock = Mock.Get(_umbracoSettings.RequestHandler); + var umbracoSettings = Current.Configs.Settings(); + + var requestMock = Mock.Get(umbracoSettings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); var contentType = new PublishedContentType(666, "alias", PublishedItemType.Content, Enumerable.Empty(), Enumerable.Empty(), ContentVariation.Culture); @@ -302,9 +303,9 @@ namespace Umbraco.Tests.Routing snapshotService.Setup(x => x.CreatePublishedSnapshot(It.IsAny())) .Returns(snapshot); - var umbracoContext = GetUmbracoContext(currentUri, umbracoSettings: _umbracoSettings, + var umbracoContext = GetUmbracoContext(currentUri, umbracoSettings: umbracoSettings, urlProviders: new[] { - new DefaultUrlProvider(_umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper()) + new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper()) }, globalSettings: globalSettings.Object, snapshotService: snapshotService.Object); @@ -319,17 +320,18 @@ namespace Umbraco.Tests.Routing [Test] public void Get_Url_Relative_Or_Absolute() { - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.UseDirectoryUrls).Returns(true); globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettings.Object); - var requestMock = Mock.Get(_umbracoSettings.RequestHandler); + var umbracoSettings = Current.Configs.Settings(); + + var requestMock = Mock.Get(umbracoSettings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); - var umbracoContext = GetUmbracoContext("http://example.com/test", 1111, umbracoSettings: _umbracoSettings, urlProviders: new[] + var umbracoContext = GetUmbracoContext("http://example.com/test", 1111, umbracoSettings: umbracoSettings, urlProviders: new[] { - new DefaultUrlProvider(_umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper()) + new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper()) }, globalSettings: globalSettings.Object); Assert.AreEqual("/home/sub1/custom-sub-1/", umbracoContext.UrlProvider.GetUrl(1177)); @@ -345,18 +347,19 @@ namespace Umbraco.Tests.Routing [Test] public void Get_Url_Unpublished() { - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.UseDirectoryUrls).Returns(true); globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettings.Object); + + var umbracoSettings = Current.Configs.Settings(); var umbracoContext = GetUmbracoContext("http://example.com/test", 1111, urlProviders: new[] { - new DefaultUrlProvider(_umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper()) + new DefaultUrlProvider(umbracoSettings.RequestHandler, Logger, globalSettings.Object, new SiteDomainHelper()) }, globalSettings: globalSettings.Object); //mock the Umbraco settings that we need - var requestMock = Mock.Get(_umbracoSettings.RequestHandler); + var requestMock = Mock.Get(umbracoSettings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); Assert.AreEqual("#", umbracoContext.UrlProvider.GetUrl(999999)); diff --git a/src/Umbraco.Tests/Routing/UrlRoutesTests.cs b/src/Umbraco.Tests/Routing/UrlRoutesTests.cs index 9b291249c9..4928cd01dc 100644 --- a/src/Umbraco.Tests/Routing/UrlRoutesTests.cs +++ b/src/Umbraco.Tests/Routing/UrlRoutesTests.cs @@ -1,6 +1,8 @@ using System; using Moq; using NUnit.Framework; +using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; using Umbraco.Core.Models; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.Testing; @@ -193,9 +195,8 @@ DetermineRouteById(id): [TestCase(2006, false, "/x/b/e")] public void GetRouteByIdNoHide(int id, bool hide, string expected) { - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(hide); - SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext("/test", 0, globalSettings: globalSettings.Object); var cache = umbracoContext.ContentCache as PublishedContentCache; @@ -218,9 +219,8 @@ DetermineRouteById(id): [TestCase(2006, true, "/b/e")] // risky! public void GetRouteByIdHide(int id, bool hide, string expected) { - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(hide); - SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext("/test", 0, globalSettings: globalSettings.Object); var cache = umbracoContext.ContentCache as PublishedContentCache; @@ -233,14 +233,13 @@ DetermineRouteById(id): [Test] public void GetRouteByIdCache() { - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext("/test", 0, globalSettings:globalSettings.Object); var cache = umbracoContext.ContentCache as PublishedContentCache; if (cache == null) throw new Exception("Unsupported IPublishedContentCache, only the Xml one is supported."); - + var route = cache.GetRouteById(false, 1000); Assert.AreEqual("/a", route); @@ -265,9 +264,8 @@ DetermineRouteById(id): [TestCase("/x", false, 2000)] public void GetByRouteNoHide(string route, bool hide, int expected) { - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(hide); - SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext("/test", 0, globalSettings:globalSettings.Object); var cache = umbracoContext.ContentCache as PublishedContentCache; @@ -297,9 +295,8 @@ DetermineRouteById(id): [TestCase("/b/c", true, 1002)] // (hence the 2005 collision) public void GetByRouteHide(string route, bool hide, int expected) { - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(hide); - SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext("/test", 0, globalSettings:globalSettings.Object); var cache = umbracoContext.ContentCache as PublishedContentCache; @@ -321,14 +318,13 @@ DetermineRouteById(id): [Test] public void GetByRouteCache() { - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext("/test", 0, globalSettings:globalSettings.Object); var cache = umbracoContext.ContentCache as PublishedContentCache; if (cache == null) throw new Exception("Unsupported IPublishedContentCache, only the Xml one is supported."); - + var content = cache.GetByRoute(false, "/a/b/c"); Assert.IsNotNull(content); Assert.AreEqual(1002, content.Id); diff --git a/src/Umbraco.Tests/Routing/UrlsProviderWithDomainsTests.cs b/src/Umbraco.Tests/Routing/UrlsProviderWithDomainsTests.cs index e26877481a..ba646f6d94 100644 --- a/src/Umbraco.Tests/Routing/UrlsProviderWithDomainsTests.cs +++ b/src/Umbraco.Tests/Routing/UrlsProviderWithDomainsTests.cs @@ -5,6 +5,7 @@ using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; using Umbraco.Core.Models; using Umbraco.Core.Services; using Umbraco.Tests.TestHelpers; @@ -178,10 +179,9 @@ namespace Umbraco.Tests.Routing var request = Mock.Get(settings.RequestHandler); request.Setup(x => x.UseDomainPrefixes).Returns(false); - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.UseDirectoryUrls).Returns(true); globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); // ignored w/domains - SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext("/test", 1111, umbracoSettings: settings, urlProviders: new[] { @@ -214,10 +214,9 @@ namespace Umbraco.Tests.Routing var request = Mock.Get(settings.RequestHandler); request.Setup(x => x.UseDomainPrefixes).Returns(false); - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.UseDirectoryUrls).Returns(true); globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); // ignored w/domains - SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext("/test", 1111, umbracoSettings: settings, urlProviders: new[] { @@ -242,10 +241,9 @@ namespace Umbraco.Tests.Routing var request = Mock.Get(settings.RequestHandler); request.Setup(x => x.UseDomainPrefixes).Returns(false); - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.UseDirectoryUrls).Returns(true); globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); // ignored w/domains - SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext("/test", 1111, umbracoSettings: settings, urlProviders: new[] { @@ -276,10 +274,9 @@ namespace Umbraco.Tests.Routing var request = Mock.Get(settings.RequestHandler); request.Setup(x => x.UseDomainPrefixes).Returns(false); - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.UseDirectoryUrls).Returns(true); globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); // ignored w/domains - SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext("/test", 1111, umbracoSettings: settings, urlProviders: new[] { @@ -300,10 +297,9 @@ namespace Umbraco.Tests.Routing var request = Mock.Get(settings.RequestHandler); request.Setup(x => x.UseDomainPrefixes).Returns(false); - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.UseDirectoryUrls).Returns(true); globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); // ignored w/domains - SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext("/test", 1111, umbracoSettings: settings, urlProviders: new[] { @@ -367,10 +363,9 @@ namespace Umbraco.Tests.Routing var requestMock = Mock.Get(settings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.UseDirectoryUrls).Returns(true); globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); // ignored w/domains - SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext("http://domain1.com/test", 1111, umbracoSettings: settings, urlProviders: new[] { @@ -399,10 +394,9 @@ namespace Umbraco.Tests.Routing { var settings = SettingsForTests.GenerateMockUmbracoSettings(); - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.UseDirectoryUrls).Returns(true); globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); // ignored w/domains - SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext("http://domain1.com/en/test", 1111, umbracoSettings: settings, urlProviders: new[] { diff --git a/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs b/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs index 13ec434608..e28a6485d6 100644 --- a/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs +++ b/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs @@ -3,6 +3,7 @@ using Moq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; using Umbraco.Core.Models; using Umbraco.Tests.TestHelpers; using Umbraco.Web.PublishedCache.XmlPublishedCache; @@ -29,10 +30,9 @@ namespace Umbraco.Tests.Routing [Test] public void DoNotPolluteCache() { - var globalSettings = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettings = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettings.Setup(x => x.UseDirectoryUrls).Returns(true); globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); - SettingsForTests.ConfigureSettings(globalSettings.Object); var settings = SettingsForTests.GenerateMockUmbracoSettings(); var request = Mock.Get(settings.RequestHandler); diff --git a/src/Umbraco.Tests/Runtimes/CoreRuntimeTests.cs b/src/Umbraco.Tests/Runtimes/CoreRuntimeTests.cs index 5be0617f52..c894659865 100644 --- a/src/Umbraco.Tests/Runtimes/CoreRuntimeTests.cs +++ b/src/Umbraco.Tests/Runtimes/CoreRuntimeTests.cs @@ -8,6 +8,7 @@ using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Components; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; using Umbraco.Core.Events; using Umbraco.Core.Exceptions; using Umbraco.Core.Logging; @@ -27,12 +28,7 @@ namespace Umbraco.Tests.Runtimes public void SetUp() { TestComponent.Reset(); - - // cannot boot runtime without some configuration - var umbracoSettings = SettingsForTests.GenerateMockUmbracoSettings(); - var globalSettings = SettingsForTests.GenerateMockGlobalSettings(); - SettingsForTests.ConfigureSettings(umbracoSettings); - SettingsForTests.ConfigureSettings(globalSettings); + Current.Reset(); } public void TearDown() @@ -106,6 +102,14 @@ namespace Umbraco.Tests.Runtimes return mock.Object; } + protected override Configs GetConfigs() + { + var configs = new Configs(); + configs.Add(SettingsForTests.GetDefaultGlobalSettings); + configs.Add(SettingsForTests.GetDefaultUmbracoSettings); + return configs; + } + // fixme so how the f* should we do it now? /* // pretend we have the proper migration diff --git a/src/Umbraco.Tests/Runtimes/StandaloneTests.cs b/src/Umbraco.Tests/Runtimes/StandaloneTests.cs index c24ca6f351..ccb7427907 100644 --- a/src/Umbraco.Tests/Runtimes/StandaloneTests.cs +++ b/src/Umbraco.Tests/Runtimes/StandaloneTests.cs @@ -107,6 +107,10 @@ namespace Umbraco.Tests.Runtimes .Clear() .Append(); + // configure + composition.Configs.Add(SettingsForTests.GetDefaultGlobalSettings); + composition.Configs.Add(SettingsForTests.GetDefaultUmbracoSettings); + // create and register the factory Current.Factory = factory = composition.CreateFactory(); @@ -150,11 +154,6 @@ namespace Umbraco.Tests.Runtimes // done installing runtimeState.Level = RuntimeLevel.Run; - var globalSettings = SettingsForTests.GetDefaultGlobalSettings(); - SettingsForTests.ConfigureSettings(globalSettings); - var umbracoSettings = SettingsForTests.GetDefaultUmbracoSettings(); - SettingsForTests.ConfigureSettings(umbracoSettings); - // instantiate to register events // should be done by Initialize? // should we invoke Initialize? @@ -260,9 +259,9 @@ namespace Umbraco.Tests.Runtimes // get the components // all of them? var composerTypes = typeLoader.GetTypes(); - // filtered? - //var componentTypes = typeLoader.GetTypes() - // .Where(x => !x.FullName.StartsWith("Umbraco.Web")); + // filtered + composerTypes = composerTypes + .Where(x => !x.FullName.StartsWith("Umbraco.Tests")); // single? //var componentTypes = new[] { typeof(CoreRuntimeComponent) }; var composers = new Composers(composition, composerTypes, profilingLogger); diff --git a/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs b/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs index e74125adfa..4aa28b5975 100644 --- a/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs @@ -3,7 +3,6 @@ using System.Linq; using Moq; using NUnit.Framework; using Umbraco.Core; -using Umbraco.Core.Cache; using Umbraco.Core.Components; using Umbraco.Core.Events; using Umbraco.Core.Models; @@ -13,7 +12,6 @@ using Umbraco.Core.Scoping; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; using Umbraco.Core.Composing; -using Umbraco.Core.Configuration; using Umbraco.Core.Persistence.Mappers; using Umbraco.Core.Services; using Umbraco.Tests.Components; @@ -42,6 +40,9 @@ namespace Umbraco.Tests.Scoping composition.RegisterUnique(factory => new FileSystems(factory, factory.TryGetInstance())); composition.WithCollectionBuilder(); + composition.Configs.Add(SettingsForTests.GetDefaultGlobalSettings); + composition.Configs.Add(SettingsForTests.GetDefaultUmbracoSettings); + Current.Reset(); Current.Factory = composition.CreateFactory(); diff --git a/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs b/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs index 99a5c57058..568bafa4e6 100644 --- a/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs @@ -5,6 +5,7 @@ using Moq; using NUnit.Framework; using Umbraco.Core.Cache; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Events; using Umbraco.Core.Logging; using Umbraco.Core.Models; @@ -39,6 +40,12 @@ namespace Umbraco.Tests.Scoping .Add(() => Composition.TypeLoader.GetCacheRefreshers()); } + protected override void ComposeSettings() + { + Composition.Configs.Add(SettingsForTests.GenerateMockUmbracoSettings); + Composition.Configs.Add(SettingsForTests.GenerateMockGlobalSettings); + } + [TearDown] public void Teardown() { @@ -79,10 +86,8 @@ namespace Umbraco.Tests.Scoping Assert.AreSame(XmlStore, ((PublishedContentCache) umbracoContext.ContentCache).XmlStore); // settings - var settings = SettingsForTests.GenerateMockUmbracoSettings(); - var contentMock = Mock.Get(settings.Content); + var contentMock = Mock.Get(Factory.GetInstance().Content); contentMock.Setup(x => x.XmlCacheEnabled).Returns(false); - SettingsForTests.ConfigureSettings(settings); // create document type, document var contentType = new ContentType(-1) { Alias = "CustomDocument", Name = "Custom Document" }; @@ -200,9 +205,8 @@ namespace Umbraco.Tests.Scoping // settings var settings = SettingsForTests.GenerateMockUmbracoSettings(); - var contentMock = Mock.Get(settings.Content); + var contentMock = Mock.Get(Factory.GetInstance().Content); contentMock.Setup(x => x.XmlCacheEnabled).Returns(false); - SettingsForTests.ConfigureSettings(settings); // create document type var contentType = new ContentType(-1) { Alias = "CustomDocument", Name = "Custom Document" }; diff --git a/src/Umbraco.Tests/Strings/CmsHelperCasingTests.cs b/src/Umbraco.Tests/Strings/CmsHelperCasingTests.cs index 0fb0dee68c..a4006409be 100644 --- a/src/Umbraco.Tests/Strings/CmsHelperCasingTests.cs +++ b/src/Umbraco.Tests/Strings/CmsHelperCasingTests.cs @@ -9,15 +9,6 @@ namespace Umbraco.Tests.Strings [TestFixture] public class CmsHelperCasingTests : UmbracoTestBase { - [SetUp] - public void Setup() - { - //set default config - var config = SettingsForTests.GetDefaultUmbracoSettings(); - SettingsForTests.ConfigureSettings(config); - - } - [TestCase("thisIsTheEnd", "This Is The End")] [TestCase("th", "Th")] [TestCase("t", "t")] diff --git a/src/Umbraco.Tests/Strings/DefaultShortStringHelperTests.cs b/src/Umbraco.Tests/Strings/DefaultShortStringHelperTests.cs index 0ceaffa916..0d39fcc9e5 100644 --- a/src/Umbraco.Tests/Strings/DefaultShortStringHelperTests.cs +++ b/src/Umbraco.Tests/Strings/DefaultShortStringHelperTests.cs @@ -123,7 +123,6 @@ namespace Umbraco.Tests.Strings var contentMock = Mock.Get(settings.RequestHandler); contentMock.Setup(x => x.CharCollection).Returns(Enumerable.Empty()); contentMock.Setup(x => x.ConvertUrlsToAscii).Returns(false); - SettingsForTests.ConfigureSettings(settings); const string input1 = "ÆØÅ and æøå and 中文测试 and אודות האתר and größer БбДдЖж page"; const string input2 = "ÆØÅ and æøå and größer БбДдЖж page"; diff --git a/src/Umbraco.Tests/TestHelpers/SettingsForTests.cs b/src/Umbraco.Tests/TestHelpers/SettingsForTests.cs index 5f08478658..ea40ed9c84 100644 --- a/src/Umbraco.Tests/TestHelpers/SettingsForTests.cs +++ b/src/Umbraco.Tests/TestHelpers/SettingsForTests.cs @@ -1,9 +1,7 @@ -using System.Collections.Generic; -using System.IO; +using System.IO; using System.Configuration; using Moq; using Umbraco.Core; -using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.IO; @@ -12,22 +10,6 @@ namespace Umbraco.Tests.TestHelpers { public class SettingsForTests { - public static void ConfigureSettings(IGlobalSettings settings) - { - Current.Config.SetGlobalConfig(settings); - } - - // umbracoSettings - - /// - /// Sets the umbraco settings singleton to the object specified - /// - /// - public static void ConfigureSettings(IUmbracoSettingsSection settings) - { - Current.Config.SetUmbracoConfig(settings); - } - public static IGlobalSettings GenerateMockGlobalSettings() { var config = Mock.Of( @@ -132,8 +114,6 @@ namespace Umbraco.Tests.TestHelpers private static void ResetSettings() { _defaultGlobalSettings = null; - ConfigureSettings(GetDefaultUmbracoSettings()); - ConfigureSettings(GetDefaultGlobalSettings()); } private static IUmbracoSettingsSection _defaultUmbracoSettings; diff --git a/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs b/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs index 2daf86796b..a2a0c35c56 100644 --- a/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs +++ b/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs @@ -131,9 +131,8 @@ namespace Umbraco.Tests.TestHelpers } // ensure the configuration matches the current version for tests - var globalSettingsMock = Mock.Get(TestObjects.GetGlobalSettings()); //this will modify the IGlobalSettings instance stored in the container + var globalSettingsMock = Mock.Get(Factory.GetInstance()); //this will modify the IGlobalSettings instance stored in the container globalSettingsMock.Setup(x => x.ConfigurationStatus).Returns(UmbracoVersion.Current.ToString(3)); - SettingsForTests.ConfigureSettings(globalSettingsMock.Object); using (ProfilingLogger.TraceDuration("Initialize database.")) { diff --git a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs index 3f5240d04c..a79531af74 100644 --- a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs +++ b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs @@ -287,25 +287,25 @@ namespace Umbraco.Tests.Testing // create the schema } + protected virtual void ComposeSettings() + { + Composition.Configs.Add(SettingsForTests.GetDefaultUmbracoSettings); + Composition.Configs.Add(SettingsForTests.GetDefaultGlobalSettings); + } + protected virtual void ComposeApplication(bool withApplication) { - if (withApplication == false) return; + ComposeSettings(); - var umbracoSettings = SettingsForTests.GetDefaultUmbracoSettings(); - var globalSettings = SettingsForTests.GetDefaultGlobalSettings(); - //apply these globally - SettingsForTests.ConfigureSettings(umbracoSettings); - SettingsForTests.ConfigureSettings(globalSettings); + if (withApplication == false) return; // default Datalayer/Repositories/SQL/Database/etc... Composition.ComposeRepositories(); // register basic stuff that might need to be there for some container resolvers to work - Composition.RegisterUnique(factory => umbracoSettings); - Composition.RegisterUnique(factory => globalSettings); - Composition.RegisterUnique(factory => umbracoSettings.Content); - Composition.RegisterUnique(factory => umbracoSettings.Templates); - Composition.RegisterUnique(factory => umbracoSettings.WebRouting); + Composition.RegisterUnique(factory => factory.GetInstance().Content); + Composition.RegisterUnique(factory => factory.GetInstance().Templates); + Composition.RegisterUnique(factory => factory.GetInstance().WebRouting); Composition.RegisterUnique(factory => ExamineManager.Instance); diff --git a/src/Umbraco.Tests/Web/TemplateUtilitiesTests.cs b/src/Umbraco.Tests/Web/TemplateUtilitiesTests.cs index 7b640fae95..047d0b0b8f 100644 --- a/src/Umbraco.Tests/Web/TemplateUtilitiesTests.cs +++ b/src/Umbraco.Tests/Web/TemplateUtilitiesTests.cs @@ -37,17 +37,19 @@ namespace Umbraco.Tests.Web var serviceContext = ServiceContext.CreatePartial(entityService: entityService.Object); // fixme - bad in a unit test - but Udi has a static ctor that wants it?! - var container = new Mock(); - container.Setup(x => x.GetInstance(typeof(TypeLoader))).Returns( + var factory = new Mock(); + factory.Setup(x => x.GetInstance(typeof(TypeLoader))).Returns( new TypeLoader(NullCacheProvider.Instance, LocalTempStorage.Default, new ProfilingLogger(Mock.Of(), Mock.Of()))); - container.Setup(x => x.GetInstance(typeof (ServiceContext))).Returns(serviceContext); - Current.Factory = container.Object; + factory.Setup(x => x.GetInstance(typeof (ServiceContext))).Returns(serviceContext); + + var settings = SettingsForTests.GetDefaultUmbracoSettings(); + factory.Setup(x => x.GetInstance(typeof(IUmbracoSettingsSection))).Returns(settings); + + Current.Factory = factory.Object; Umbraco.Web.Composing.Current.UmbracoContextAccessor = new TestUmbracoContextAccessor(); Udi.ResetUdiTypes(); - - Current.Config.SetUmbracoConfig(SettingsForTests.GetDefaultUmbracoSettings()); } [TearDown] diff --git a/src/Umbraco.Web/Composing/Current.cs b/src/Umbraco.Web/Composing/Current.cs index fc67465e1a..ffe07393e6 100644 --- a/src/Umbraco.Web/Composing/Current.cs +++ b/src/Umbraco.Web/Composing/Current.cs @@ -201,7 +201,7 @@ namespace Umbraco.Web.Composing public static TypeLoader TypeLoader => CoreCurrent.TypeLoader; - public static UmbracoConfig Config => CoreCurrent.Config; + public static Configs Configs => CoreCurrent.Configs; public static UrlSegmentProviderCollection UrlSegmentProviders => CoreCurrent.UrlSegmentProviders; diff --git a/src/Umbraco.Web/Editors/AuthenticationController.cs b/src/Umbraco.Web/Editors/AuthenticationController.cs index 594b450e82..231ec9ba67 100644 --- a/src/Umbraco.Web/Editors/AuthenticationController.cs +++ b/src/Umbraco.Web/Editors/AuthenticationController.cs @@ -300,7 +300,7 @@ namespace Umbraco.Web.Editors { // If this feature is switched off in configuration the UI will be amended to not make the request to reset password available. // So this is just a server-side secondary check. - if (Current.Config.Umbraco().Security.AllowPasswordReset == false) + if (Current.Configs.Settings().Security.AllowPasswordReset == false) { throw new HttpResponseException(HttpStatusCode.BadRequest); } diff --git a/src/Umbraco.Web/Editors/BackOfficeController.cs b/src/Umbraco.Web/Editors/BackOfficeController.cs index e323f92c57..6294a0377f 100644 --- a/src/Umbraco.Web/Editors/BackOfficeController.cs +++ b/src/Umbraco.Web/Editors/BackOfficeController.cs @@ -233,7 +233,7 @@ namespace Umbraco.Web.Editors [HttpGet] public JsonNetResult GetGridConfig() { - var gridConfig = Current.Config.Grids(); + var gridConfig = Current.Configs.Grids(); return new JsonNetResult { Data = gridConfig.EditorsConfig.Editors, Formatting = Formatting.Indented }; } diff --git a/src/Umbraco.Web/Editors/BackOfficeServerVariables.cs b/src/Umbraco.Web/Editors/BackOfficeServerVariables.cs index c92a88d5b1..71ceb6f4b4 100644 --- a/src/Umbraco.Web/Editors/BackOfficeServerVariables.cs +++ b/src/Umbraco.Web/Editors/BackOfficeServerVariables.cs @@ -314,25 +314,25 @@ namespace Umbraco.Web.Editors {"appPluginsPath", IOHelper.ResolveUrl(SystemDirectories.AppPlugins).TrimEnd('/')}, { "imageFileTypes", - string.Join(",", Current.Config.Umbraco().Content.ImageFileTypes) + string.Join(",", Current.Configs.Settings().Content.ImageFileTypes) }, { "disallowedUploadFiles", - string.Join(",", Current.Config.Umbraco().Content.DisallowedUploadFiles) + string.Join(",", Current.Configs.Settings().Content.DisallowedUploadFiles) }, { "allowedUploadFiles", - string.Join(",", Current.Config.Umbraco().Content.AllowedUploadFiles) + string.Join(",", Current.Configs.Settings().Content.AllowedUploadFiles) }, { "maxFileSize", GetMaxRequestLength() }, - {"keepUserLoggedIn", Current.Config.Umbraco().Security.KeepUserLoggedIn}, - {"usernameIsEmail", Current.Config.Umbraco().Security.UsernameIsEmail}, + {"keepUserLoggedIn", Current.Configs.Settings().Security.KeepUserLoggedIn}, + {"usernameIsEmail", Current.Configs.Settings().Security.UsernameIsEmail}, {"cssPath", IOHelper.ResolveUrl(SystemDirectories.Css).TrimEnd('/')}, - {"allowPasswordReset", Current.Config.Umbraco().Security.AllowPasswordReset}, - {"loginBackgroundImage", Current.Config.Umbraco().Content.LoginBackgroundImage}, + {"allowPasswordReset", Current.Configs.Settings().Security.AllowPasswordReset}, + {"loginBackgroundImage", Current.Configs.Settings().Content.LoginBackgroundImage}, {"showUserInvite", EmailSender.CanSendRequiredEmail}, {"canSendRequiredEmail", EmailSender.CanSendRequiredEmail}, } diff --git a/src/Umbraco.Web/Editors/DataTypeController.cs b/src/Umbraco.Web/Editors/DataTypeController.cs index 79671595f4..335b609b0a 100644 --- a/src/Umbraco.Web/Editors/DataTypeController.cs +++ b/src/Umbraco.Web/Editors/DataTypeController.cs @@ -344,7 +344,7 @@ namespace Umbraco.Web.Editors public IDictionary> GetGroupedPropertyEditors() { var datatypes = new List(); - var showDeprecatedPropertyEditors = Current.Config.Umbraco().Content.ShowDeprecatedPropertyEditors; + var showDeprecatedPropertyEditors = Current.Configs.Settings().Content.ShowDeprecatedPropertyEditors; var propertyEditors = Current.PropertyEditors .Where(x=>x.IsDeprecated == false || showDeprecatedPropertyEditors); diff --git a/src/Umbraco.Web/Editors/MediaController.cs b/src/Umbraco.Web/Editors/MediaController.cs index 2cbe32fb89..2c6ba06dc2 100644 --- a/src/Umbraco.Web/Editors/MediaController.cs +++ b/src/Umbraco.Web/Editors/MediaController.cs @@ -703,13 +703,13 @@ namespace Umbraco.Web.Editors var safeFileName = fileName.ToSafeFileName(); var ext = safeFileName.Substring(safeFileName.LastIndexOf('.') + 1).ToLower(); - if (Current.Config.Umbraco().Content.IsFileAllowedForUpload(ext)) + if (Current.Configs.Settings().Content.IsFileAllowedForUpload(ext)) { var mediaType = Constants.Conventions.MediaTypes.File; if (result.FormData["contentTypeAlias"] == Constants.Conventions.MediaTypes.AutoSelect) { - if (Current.Config.Umbraco().Content.ImageFileTypes.Contains(ext)) + if (Current.Configs.Settings().Content.ImageFileTypes.Contains(ext)) { mediaType = Constants.Conventions.MediaTypes.Image; } diff --git a/src/Umbraco.Web/Editors/RedirectUrlManagementController.cs b/src/Umbraco.Web/Editors/RedirectUrlManagementController.cs index fda57afd12..aa2626ca3b 100644 --- a/src/Umbraco.Web/Editors/RedirectUrlManagementController.cs +++ b/src/Umbraco.Web/Editors/RedirectUrlManagementController.cs @@ -34,7 +34,7 @@ namespace Umbraco.Web.Editors [HttpGet] public IHttpActionResult GetEnableState() { - var enabled = Current.Config.Umbraco().WebRouting.DisableRedirectUrlTracking == false; + var enabled = Current.Configs.Settings().WebRouting.DisableRedirectUrlTracking == false; var userIsAdmin = Umbraco.UmbracoContext.Security.CurrentUser.IsAdmin(); return Ok(new { enabled, userIsAdmin }); } diff --git a/src/Umbraco.Web/Editors/TourController.cs b/src/Umbraco.Web/Editors/TourController.cs index 81fa930c41..f2a546e407 100644 --- a/src/Umbraco.Web/Editors/TourController.cs +++ b/src/Umbraco.Web/Editors/TourController.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using Newtonsoft.Json; +using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.IO; @@ -26,7 +27,7 @@ namespace Umbraco.Web.Editors { var result = new List(); - if (Current.Config.Umbraco().BackOffice.Tours.EnableTours == false) + if (Current.Configs.Settings().BackOffice.Tours.EnableTours == false) return result; //get all filters that will be applied to all tour aliases diff --git a/src/Umbraco.Web/Editors/UpdateCheckController.cs b/src/Umbraco.Web/Editors/UpdateCheckController.cs index 64c6aa30aa..cd11382d13 100644 --- a/src/Umbraco.Web/Editors/UpdateCheckController.cs +++ b/src/Umbraco.Web/Editors/UpdateCheckController.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Web.Http.Filters; +using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.Models; @@ -59,9 +60,9 @@ namespace Umbraco.Web.Editors var cookie = new CookieHeaderValue("UMB_UPDCHK", "1") { Path = "/", - Expires = DateTimeOffset.Now.AddDays(Current.Config.Global().VersionCheckPeriod), + Expires = DateTimeOffset.Now.AddDays(Current.Configs.Global().VersionCheckPeriod), HttpOnly = true, - Secure = Current.Config.Global().UseHttps + Secure = Current.Configs.Global().UseHttps }; context.Response.Headers.AddCookies(new[] { cookie }); } diff --git a/src/Umbraco.Web/Editors/UsersController.cs b/src/Umbraco.Web/Editors/UsersController.cs index 9f30b01467..7577624621 100644 --- a/src/Umbraco.Web/Editors/UsersController.cs +++ b/src/Umbraco.Web/Editors/UsersController.cs @@ -98,7 +98,7 @@ namespace Umbraco.Web.Editors var safeFileName = fileName.ToSafeFileName(); var ext = safeFileName.Substring(safeFileName.LastIndexOf('.') + 1).ToLower(); - if (Current.Config.Umbraco().Content.DisallowedUploadFiles.Contains(ext) == false) + if (Current.Configs.Settings().Content.DisallowedUploadFiles.Contains(ext) == false) { //generate a path of known data, we don't want this path to be guessable user.Avatar = "UserAvatars/" + (user.Id + safeFileName).ToSHA1() + "." + ext; @@ -195,7 +195,7 @@ namespace Umbraco.Web.Editors // so to do that here, we'll need to check if this current user is an admin and if not we should exclude all user who are // also admins - var hideDisabledUsers = Current.Config.Umbraco().Security.HideDisabledUsersInBackoffice; + var hideDisabledUsers = Current.Configs.Settings().Security.HideDisabledUsersInBackoffice; var excludeUserGroups = new string[0]; var isAdmin = Security.CurrentUser.IsAdmin(); if (isAdmin == false) @@ -253,7 +253,7 @@ namespace Umbraco.Web.Editors throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState)); } - if (Current.Config.Umbraco().Security.UsernameIsEmail) + if (Current.Configs.Settings().Security.UsernameIsEmail) { //ensure they are the same if we're using it userSave.Username = userSave.Email; @@ -345,7 +345,7 @@ namespace Umbraco.Web.Editors } IUser user; - if (Current.Config.Umbraco().Security.UsernameIsEmail) + if (Current.Configs.Settings().Security.UsernameIsEmail) { //ensure it's the same userSave.Username = userSave.Email; @@ -419,7 +419,7 @@ namespace Umbraco.Web.Editors if (user != null && (extraCheck == null || extraCheck(user))) { ModelState.AddModelError( - Current.Config.Umbraco().Security.UsernameIsEmail ? "Email" : "Username", + Current.Configs.Settings().Security.UsernameIsEmail ? "Email" : "Username", "A user with the username already exists"); throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState)); } @@ -539,7 +539,7 @@ namespace Umbraco.Web.Editors // if the found user has his email for username, we want to keep this synced when changing the email. // we have already cross-checked above that the email isn't colliding with anything, so we can safely assign it here. - if (Current.Config.Umbraco().Security.UsernameIsEmail && found.Username == found.Email && userSave.Username != userSave.Email) + if (Current.Configs.Settings().Security.UsernameIsEmail && found.Username == found.Email && userSave.Username != userSave.Email) { userSave.Username = userSave.Email; } diff --git a/src/Umbraco.Web/HealthCheck/HealthCheckController.cs b/src/Umbraco.Web/HealthCheck/HealthCheckController.cs index 5df534232c..2f72b946de 100644 --- a/src/Umbraco.Web/HealthCheck/HealthCheckController.cs +++ b/src/Umbraco.Web/HealthCheck/HealthCheckController.cs @@ -4,6 +4,7 @@ using System.ComponentModel; using System.Configuration; using System.Linq; using System.Web.Http; +using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Logging; using Umbraco.Core.Configuration; @@ -28,7 +29,7 @@ namespace Umbraco.Web.HealthCheck _checks = checks ?? throw new ArgumentNullException(nameof(checks)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); - var healthCheckConfig = Current.Config.HealthChecks(); + var healthCheckConfig = Current.Configs.HealthChecks(); _disabledCheckIds = healthCheckConfig.DisabledChecks .Select(x => x.Id) .ToList(); diff --git a/src/Umbraco.Web/HealthCheck/NotificationMethods/EmailNotificationMethod.cs b/src/Umbraco.Web/HealthCheck/NotificationMethods/EmailNotificationMethod.cs index 6b1091a0c3..87c0e4f46d 100644 --- a/src/Umbraco.Web/HealthCheck/NotificationMethods/EmailNotificationMethod.cs +++ b/src/Umbraco.Web/HealthCheck/NotificationMethods/EmailNotificationMethod.cs @@ -70,7 +70,7 @@ namespace Umbraco.Web.HealthCheck.NotificationMethods private MailMessage CreateMailMessage(string subject, string message) { - var to = Current.Config.Umbraco().Content.NotificationEmailAddress; + var to = Current.Configs.Settings().Content.NotificationEmailAddress; if (string.IsNullOrWhiteSpace(subject)) subject = "Umbraco Health Check Status"; diff --git a/src/Umbraco.Web/HealthCheck/NotificationMethods/NotificationMethodBase.cs b/src/Umbraco.Web/HealthCheck/NotificationMethods/NotificationMethodBase.cs index 88caff1da7..cf71be3c34 100644 --- a/src/Umbraco.Web/HealthCheck/NotificationMethods/NotificationMethodBase.cs +++ b/src/Umbraco.Web/HealthCheck/NotificationMethods/NotificationMethodBase.cs @@ -2,6 +2,7 @@ using System.Reflection; using System.Threading; using System.Threading.Tasks; +using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.HealthChecks; @@ -20,7 +21,7 @@ namespace Umbraco.Web.HealthCheck.NotificationMethods return; } - var healthCheckConfig = Current.Config.HealthChecks(); + var healthCheckConfig = Current.Configs.HealthChecks(); var notificationMethods = healthCheckConfig.NotificationSettings.NotificationMethods; var notificationMethod = notificationMethods[attribute.Alias]; if (notificationMethod == null) diff --git a/src/Umbraco.Web/HtmlHelperRenderExtensions.cs b/src/Umbraco.Web/HtmlHelperRenderExtensions.cs index e47af9d302..2e82fe252d 100644 --- a/src/Umbraco.Web/HtmlHelperRenderExtensions.cs +++ b/src/Umbraco.Web/HtmlHelperRenderExtensions.cs @@ -65,7 +65,7 @@ namespace Umbraco.Web if (UmbracoContext.Current.InPreviewMode) { var htmlBadge = - String.Format(Current.Config.Umbraco().Content.PreviewBadge, + String.Format(Current.Configs.Settings().Content.PreviewBadge, IOHelper.ResolveUrl(SystemDirectories.Umbraco), UmbracoContext.Current.HttpContext.Server.UrlEncode(UmbracoContext.Current.HttpContext.Request.Path)); return new MvcHtmlString(htmlBadge); diff --git a/src/Umbraco.Web/Install/InstallSteps/NewInstallStep.cs b/src/Umbraco.Web/Install/InstallSteps/NewInstallStep.cs index 10a84b9350..64b8568fe5 100644 --- a/src/Umbraco.Web/Install/InstallSteps/NewInstallStep.cs +++ b/src/Umbraco.Web/Install/InstallSteps/NewInstallStep.cs @@ -145,7 +145,7 @@ namespace Umbraco.Web.Install.InstallSteps // In this one case when it's a brand new install and nothing has been configured, make sure the // back office cookie is cleared so there's no old cookies lying around causing problems - _http.ExpireCookie(Current.Config.Umbraco().Security.AuthCookieName); + _http.ExpireCookie(Current.Configs.Settings().Security.AuthCookieName); return true; } diff --git a/src/Umbraco.Web/Macros/MacroRenderer.cs b/src/Umbraco.Web/Macros/MacroRenderer.cs index d3c646465c..e0a0fd65c8 100755 --- a/src/Umbraco.Web/Macros/MacroRenderer.cs +++ b/src/Umbraco.Web/Macros/MacroRenderer.cs @@ -312,7 +312,7 @@ namespace Umbraco.Web.Macros Alias = macro.Alias, MacroSource = macro.MacroSource, Exception = e, - Behaviour = Current.Config.Umbraco().Content.MacroErrorBehaviour + Behaviour = Current.Configs.Settings().Content.MacroErrorBehaviour }; OnError(macroErrorEventArgs); @@ -604,7 +604,7 @@ namespace Umbraco.Web.Macros querystring += $"&umb_{ide.Key}={HttpContext.Current.Server.UrlEncode((ide.Value ?? String.Empty).ToString())}"; // create a new 'HttpWebRequest' object to the mentioned URL. - var useSsl = Current.Config.Global().UseHttps; + var useSsl = Current.Configs.Global().UseHttps; var protocol = useSsl ? "https" : "http"; var currentRequest = HttpContext.Current.Request; var serverVars = currentRequest.ServerVariables; @@ -619,7 +619,7 @@ namespace Umbraco.Web.Macros // propagate the user's context // TODO: this is the worst thing ever. // also will not work if people decide to put their own custom auth system in place. - var inCookie = currentRequest.Cookies[Current.Config.Umbraco().Security.AuthCookieName]; + var inCookie = currentRequest.Cookies[Current.Configs.Settings().Security.AuthCookieName]; if (inCookie == null) throw new NullReferenceException("No auth cookie found"); var cookie = new Cookie(inCookie.Name, inCookie.Value, inCookie.Path, serverVars["SERVER_NAME"]); myHttpWebRequest.CookieContainer = new CookieContainer(); diff --git a/src/Umbraco.Web/Models/ContentEditing/ContentTypeBasic.cs b/src/Umbraco.Web/Models/ContentEditing/ContentTypeBasic.cs index f19753b1d8..6aca5d8054 100644 --- a/src/Umbraco.Web/Models/ContentEditing/ContentTypeBasic.cs +++ b/src/Umbraco.Web/Models/ContentEditing/ContentTypeBasic.cs @@ -76,7 +76,7 @@ namespace Umbraco.Web.Models.ContentEditing { return IconIsClass ? string.Empty - : string.Format("{0}images/umbraco/{1}", Current.Config.Global().Path.EnsureEndsWith("/"), Icon); + : string.Format("{0}images/umbraco/{1}", Current.Configs.Global().Path.EnsureEndsWith("/"), Icon); } } diff --git a/src/Umbraco.Web/Models/ContentEditing/UserInvite.cs b/src/Umbraco.Web/Models/ContentEditing/UserInvite.cs index 893a3d8020..b18b1539be 100644 --- a/src/Umbraco.Web/Models/ContentEditing/UserInvite.cs +++ b/src/Umbraco.Web/Models/ContentEditing/UserInvite.cs @@ -34,7 +34,7 @@ namespace Umbraco.Web.Models.ContentEditing if (UserGroups.Any() == false) yield return new ValidationResult("A user must be assigned to at least one group", new[] { "UserGroups" }); - if (Current.Config.Umbraco().Security.UsernameIsEmail == false && Username.IsNullOrWhiteSpace()) + if (Current.Configs.Settings().Security.UsernameIsEmail == false && Username.IsNullOrWhiteSpace()) yield return new ValidationResult("A username cannot be empty", new[] { "Username" }); } } diff --git a/src/Umbraco.Web/Models/Mapping/DataTypeMapperProfile.cs b/src/Umbraco.Web/Models/Mapping/DataTypeMapperProfile.cs index d9330ac610..425e447c9c 100644 --- a/src/Umbraco.Web/Models/Mapping/DataTypeMapperProfile.cs +++ b/src/Umbraco.Web/Models/Mapping/DataTypeMapperProfile.cs @@ -20,7 +20,7 @@ namespace Umbraco.Web.Models.Mapping public DataTypeMapperProfile(PropertyEditorCollection propertyEditors, ILogger logger) { // create, capture, cache - var availablePropertyEditorsResolver = new AvailablePropertyEditorsResolver(Current.Config.Umbraco().Content); + var availablePropertyEditorsResolver = new AvailablePropertyEditorsResolver(Current.Configs.Settings().Content); var configurationDisplayResolver = new DataTypeConfigurationFieldDisplayResolver(logger); var databaseTypeResolver = new DatabaseTypeResolver(); diff --git a/src/Umbraco.Web/Models/Mapping/MediaMapperProfile.cs b/src/Umbraco.Web/Models/Mapping/MediaMapperProfile.cs index dc0aa16b74..bda8c8563f 100644 --- a/src/Umbraco.Web/Models/Mapping/MediaMapperProfile.cs +++ b/src/Umbraco.Web/Models/Mapping/MediaMapperProfile.cs @@ -53,7 +53,7 @@ namespace Umbraco.Web.Models.Mapping .ForMember(dest => dest.Tabs, opt => opt.ResolveUsing(tabsAndPropertiesResolver)) .ForMember(dest => dest.AdditionalData, opt => opt.Ignore()) .ForMember(dest => dest.ContentType, opt => opt.ResolveUsing(mediaTypeBasicResolver)) - .ForMember(dest => dest.MediaLink, opt => opt.ResolveUsing(content => string.Join(",", content.GetUrls(Current.Config.Umbraco().Content, logger)))) + .ForMember(dest => dest.MediaLink, opt => opt.ResolveUsing(content => string.Join(",", content.GetUrls(Current.Configs.Settings().Content, logger)))) .ForMember(dest => dest.ContentApps, opt => opt.ResolveUsing(mediaAppResolver)) .ForMember(dest => dest.VariesByCulture, opt => opt.MapFrom(src => src.ContentType.VariesByCulture())); diff --git a/src/Umbraco.Web/Models/Trees/TreeNode.cs b/src/Umbraco.Web/Models/Trees/TreeNode.cs index cca2bf8091..6e13773754 100644 --- a/src/Umbraco.Web/Models/Trees/TreeNode.cs +++ b/src/Umbraco.Web/Models/Trees/TreeNode.cs @@ -112,7 +112,7 @@ namespace Umbraco.Web.Models.Trees return IOHelper.ResolveUrl("~" + Icon.TrimStart('~')); //legacy icon path - return string.Format("{0}images/umbraco/{1}", Current.Config.Global().Path.EnsureEndsWith("/"), Icon); + return string.Format("{0}images/umbraco/{1}", Current.Configs.Global().Path.EnsureEndsWith("/"), Icon); } } diff --git a/src/Umbraco.Web/Mvc/UmbracoAuthorizeAttribute.cs b/src/Umbraco.Web/Mvc/UmbracoAuthorizeAttribute.cs index 205bb0926d..8b76a2069d 100644 --- a/src/Umbraco.Web/Mvc/UmbracoAuthorizeAttribute.cs +++ b/src/Umbraco.Web/Mvc/UmbracoAuthorizeAttribute.cs @@ -57,7 +57,7 @@ namespace Umbraco.Web.Mvc { if (redirectToUmbracoLogin) { - _redirectUrl = Current.Config.Global().Path.EnsureStartsWith("~"); + _redirectUrl = Current.Configs.Global().Path.EnsureStartsWith("~"); } } diff --git a/src/Umbraco.Web/Mvc/UmbracoRequireHttpsAttribute.cs b/src/Umbraco.Web/Mvc/UmbracoRequireHttpsAttribute.cs index 502386e9cb..366f5de8db 100644 --- a/src/Umbraco.Web/Mvc/UmbracoRequireHttpsAttribute.cs +++ b/src/Umbraco.Web/Mvc/UmbracoRequireHttpsAttribute.cs @@ -1,4 +1,5 @@ using System.Web.Mvc; +using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using GlobalSettings = Umbraco.Core.Configuration.GlobalSettings; @@ -17,7 +18,7 @@ namespace Umbraco.Web.Mvc protected override void HandleNonHttpsRequest(AuthorizationContext filterContext) { // If umbracoUseSSL is set, let base method handle redirect. Otherwise, we don't care. - if (Current.Config.Global().UseHttps) + if (Current.Configs.Global().UseHttps) { base.HandleNonHttpsRequest(filterContext); } @@ -30,7 +31,7 @@ namespace Umbraco.Web.Mvc public override void OnAuthorization(AuthorizationContext filterContext) { // If umbracoSSL is set, let base method handle checking for HTTPS. Otherwise, we don't care. - if (Current.Config.Global().UseHttps) + if (Current.Configs.Global().UseHttps) { base.OnAuthorization(filterContext); } diff --git a/src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs b/src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs index 86277cd18d..394aa39dd9 100644 --- a/src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs +++ b/src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs @@ -216,7 +216,7 @@ namespace Umbraco.Web.Mvc { // creating previewBadge markup markupToInject = - string.Format(Current.Config.Umbraco().Content.PreviewBadge, + string.Format(Current.Configs.Settings().Content.PreviewBadge, IOHelper.ResolveUrl(SystemDirectories.Umbraco), Server.UrlEncode(UmbracoContext.Current.HttpContext.Request.Path)); } diff --git a/src/Umbraco.Web/PropertyEditors/UploadFileTypeValidator.cs b/src/Umbraco.Web/PropertyEditors/UploadFileTypeValidator.cs index 1bf3b82312..5394aca5ba 100644 --- a/src/Umbraco.Web/PropertyEditors/UploadFileTypeValidator.cs +++ b/src/Umbraco.Web/PropertyEditors/UploadFileTypeValidator.cs @@ -35,7 +35,7 @@ namespace Umbraco.Web.PropertyEditors { if (fileName.IndexOf('.') <= 0) return false; var extension = Path.GetExtension(fileName).TrimStart("."); - return Current.Config.Umbraco().Content.IsFileAllowedForUpload(extension); + return Current.Configs.Settings().Content.IsFileAllowedForUpload(extension); } } } diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs b/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs index d459821b73..fef5039579 100644 --- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs +++ b/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs @@ -110,7 +110,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache _mediaRepository = mediaRepository; _memberRepository = memberRepository; _xmlFileEnabled = false; - _xmlFileName = IOHelper.MapPath(SystemFiles.GetContentCacheXml(Current.Config.Global())); + _xmlFileName = IOHelper.MapPath(SystemFiles.GetContentCacheXml(Current.Configs.Global())); // do not plug events, we may not have what it takes to handle them } @@ -124,7 +124,7 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache _memberRepository = memberRepository; GetXmlDocument = getXmlDocument ?? throw new ArgumentNullException(nameof(getXmlDocument)); _xmlFileEnabled = false; - _xmlFileName = IOHelper.MapPath(SystemFiles.GetContentCacheXml(Current.Config.Global())); + _xmlFileName = IOHelper.MapPath(SystemFiles.GetContentCacheXml(Current.Configs.Global())); // do not plug events, we may not have what it takes to handle them } @@ -253,16 +253,16 @@ namespace Umbraco.Web.PublishedCache.XmlPublishedCache private readonly bool _xmlFileEnabled = true; // whether the disk cache is enabled - private bool XmlFileEnabled => _xmlFileEnabled && Current.Config.Umbraco().Content.XmlCacheEnabled; + private bool XmlFileEnabled => _xmlFileEnabled && Current.Configs.Settings().Content.XmlCacheEnabled; // whether the disk cache is enabled and to update the disk cache when xml changes - private bool SyncToXmlFile => XmlFileEnabled && Current.Config.Umbraco().Content.ContinouslyUpdateXmlDiskCache; + private bool SyncToXmlFile => XmlFileEnabled && Current.Configs.Settings().Content.ContinouslyUpdateXmlDiskCache; // whether the disk cache is enabled and to reload from disk cache if it changes - private bool SyncFromXmlFile => XmlFileEnabled && Current.Config.Umbraco().Content.XmlContentCheckForDiskChanges; + private bool SyncFromXmlFile => XmlFileEnabled && Current.Configs.Settings().Content.XmlContentCheckForDiskChanges; // whether _xml is immutable or not (achieved by cloning before changing anything) - private static bool XmlIsImmutable => Current.Config.Umbraco().Content.CloneXmlContent; + private static bool XmlIsImmutable => Current.Configs.Settings().Content.CloneXmlContent; // whether to keep version of everything (incl. medias & members) in cmsPreviewXml // for audit purposes - false by default, not in umbracoSettings.config diff --git a/src/Umbraco.Web/PublishedContentExtensions.cs b/src/Umbraco.Web/PublishedContentExtensions.cs index 2091d2854d..3780586797 100644 --- a/src/Umbraco.Web/PublishedContentExtensions.cs +++ b/src/Umbraco.Web/PublishedContentExtensions.cs @@ -88,10 +88,10 @@ namespace Umbraco.Web public static bool IsAllowedTemplate(this IPublishedContent content, int templateId) { - if (Current.Config.Umbraco().WebRouting.DisableAlternativeTemplates == true) + if (Current.Configs.Settings().WebRouting.DisableAlternativeTemplates == true) return content.TemplateId == templateId; - if (content.TemplateId != templateId && Current.Config.Umbraco().WebRouting.ValidateAlternativeTemplates == true) + if (content.TemplateId != templateId && Current.Configs.Settings().WebRouting.ValidateAlternativeTemplates == true) { // fixme - perfs? nothing cached here var publishedContentContentType = Current.Services.ContentTypeService.Get(content.ContentType.Id); diff --git a/src/Umbraco.Web/Routing/PublishedRequest.cs b/src/Umbraco.Web/Routing/PublishedRequest.cs index 6660720502..6814761572 100644 --- a/src/Umbraco.Web/Routing/PublishedRequest.cs +++ b/src/Umbraco.Web/Routing/PublishedRequest.cs @@ -4,6 +4,7 @@ using System.Globalization; using System.Threading; using System.Web; using umbraco; +using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.Models; @@ -181,7 +182,7 @@ namespace Umbraco.Web.Routing IsInternalRedirectPublishedContent = isInternalRedirect; // must restore the template if it's an internal redirect & the config option is set - if (isInternalRedirect && Current.Config.Umbraco().WebRouting.InternalRedirectPreservesTemplate) + if (isInternalRedirect && Current.Configs.Settings().WebRouting.InternalRedirectPreservesTemplate) { // restore _template = template; diff --git a/src/Umbraco.Web/Routing/RedirectTrackingComponent.cs b/src/Umbraco.Web/Routing/RedirectTrackingComponent.cs index 6cebf857ac..669039f087 100644 --- a/src/Umbraco.Web/Routing/RedirectTrackingComponent.cs +++ b/src/Umbraco.Web/Routing/RedirectTrackingComponent.cs @@ -28,6 +28,13 @@ namespace Umbraco.Web.Redirects private const string ContextKey2 = "Umbraco.Web.Redirects.RedirectTrackingEventHandler.2"; private const string ContextKey3 = "Umbraco.Web.Redirects.RedirectTrackingEventHandler.3"; + private readonly IUmbracoSettingsSection _umbracoSettings; + + public RedirectTrackingComponent(IUmbracoSettingsSection umbracoSettings) + { + _umbracoSettings = umbracoSettings; + } + private static Dictionary OldRoutes { get @@ -72,7 +79,7 @@ namespace Umbraco.Web.Redirects public void Initialize() { // don't let the event handlers kick in if Redirect Tracking is turned off in the config - if (UmbracoConfig.GetConfig("umbracoConfiguration/settings").WebRouting.DisableRedirectUrlTracking) return; + if (_umbracoSettings.WebRouting.DisableRedirectUrlTracking) return; // events are weird // on 'published' we 'could' get the old or the new route depending on event handlers order diff --git a/src/Umbraco.Web/Runtime/WebRuntimeComposer.cs b/src/Umbraco.Web/Runtime/WebRuntimeComposer.cs index f7ae17e02e..51e4fbd008 100644 --- a/src/Umbraco.Web/Runtime/WebRuntimeComposer.cs +++ b/src/Umbraco.Web/Runtime/WebRuntimeComposer.cs @@ -2,8 +2,10 @@ using System.Web.Security; using Examine; using Microsoft.AspNet.SignalR; +using Umbraco.Core; using Umbraco.Core.Components; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; using Umbraco.Core.Dictionary; using Umbraco.Core.Events; using Umbraco.Core.Models.PublishedContent; @@ -174,7 +176,7 @@ namespace Umbraco.Web.Runtime // register published router composition.RegisterUnique(); - composition.Register(_ => Current.Config.Umbraco().WebRouting); + composition.Register(_ => Current.Configs.Settings().WebRouting); // register preview SignalR hub composition.RegisterUnique(_ => GlobalHost.ConnectionManager.GetHubContext()); diff --git a/src/Umbraco.Web/Scheduling/HealthCheckNotifier.cs b/src/Umbraco.Web/Scheduling/HealthCheckNotifier.cs index c803abc966..4f66af11bd 100644 --- a/src/Umbraco.Web/Scheduling/HealthCheckNotifier.cs +++ b/src/Umbraco.Web/Scheduling/HealthCheckNotifier.cs @@ -53,7 +53,7 @@ namespace Umbraco.Web.Scheduling using (_logger.DebugDuration("Health checks executing", "Health checks complete")) { - var healthCheckConfig = Current.Config.HealthChecks(); + var healthCheckConfig = Current.Configs.HealthChecks(); // Don't notify for any checks that are disabled, nor for any disabled // just for notifications diff --git a/src/Umbraco.Web/Scheduling/SchedulerComponent.cs b/src/Umbraco.Web/Scheduling/SchedulerComponent.cs index acfb2b4608..e4bc74b7f2 100644 --- a/src/Umbraco.Web/Scheduling/SchedulerComponent.cs +++ b/src/Umbraco.Web/Scheduling/SchedulerComponent.cs @@ -4,6 +4,7 @@ using System.Threading; using Umbraco.Core; using Umbraco.Core.Components; using Umbraco.Core.Composing; +using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.HealthChecks; using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Logging; @@ -50,7 +51,7 @@ namespace Umbraco.Web.Scheduling } public void Initialize() - { + { // backgrounds runners are web aware, if the app domain dies, these tasks will wind down correctly _keepAliveRunner = new BackgroundTaskRunner("KeepAlive", _logger); _publishingRunner = new BackgroundTaskRunner("ScheduledPublishing", _logger); @@ -84,7 +85,7 @@ namespace Umbraco.Web.Scheduling LazyInitializer.EnsureInitialized(ref _tasks, ref _started, ref _locker, () => { _logger.Debug("Initializing the scheduler"); - var settings = Current.Config.Umbraco(); + var settings = Current.Configs.Settings(); var tasks = new List(); @@ -93,7 +94,7 @@ namespace Umbraco.Web.Scheduling tasks.Add(RegisterTaskRunner(settings)); tasks.Add(RegisterLogScrubber(settings)); - var healthCheckConfig = Current.Config.HealthChecks(); + var healthCheckConfig = Current.Configs.HealthChecks(); if (healthCheckConfig.NotificationSettings.Enabled) tasks.Add(RegisterHealthCheckNotifier(healthCheckConfig, _healthChecks, _notifications, _logger)); diff --git a/src/Umbraco.Web/Security/AppBuilderExtensions.cs b/src/Umbraco.Web/Security/AppBuilderExtensions.cs index 84636e74cc..22d87bdc14 100644 --- a/src/Umbraco.Web/Security/AppBuilderExtensions.cs +++ b/src/Umbraco.Web/Security/AppBuilderExtensions.cs @@ -211,8 +211,8 @@ namespace Umbraco.Web.Security //This is a custom middleware, we need to return the user's remaining logged in seconds app.Use( cookieAuthOptions, - Current.Config.Global(), - Current.Config.Umbraco().Security, + Current.Configs.Global(), + Current.Configs.Settings().Security, app.CreateLogger()); //This is required so that we can read the auth ticket format outside of this pipeline @@ -316,7 +316,7 @@ namespace Umbraco.Web.Security CookiePath = "/", CookieSecure = globalSettings.UseHttps ? CookieSecureOption.Always : CookieSecureOption.SameAsRequest, CookieHttpOnly = true, - CookieDomain = Current.Config.Umbraco().Security.AuthCookieDomain + CookieDomain = Current.Configs.Settings().Security.AuthCookieDomain }, stage); return app; @@ -362,7 +362,7 @@ namespace Umbraco.Web.Security if (runtimeState.Level != RuntimeLevel.Run) return app; var authOptions = app.CreateUmbracoCookieAuthOptions(umbracoContextAccessor, globalSettings, runtimeState, securitySettings); - app.Use(typeof(PreviewAuthenticationMiddleware), authOptions, Current.Config.Global()); + app.Use(typeof(PreviewAuthenticationMiddleware), authOptions, Current.Configs.Global()); // This middleware must execute at least on PostAuthentication, by default it is on Authorize // The middleware needs to execute after the RoleManagerModule executes which is during PostAuthenticate, diff --git a/src/Umbraco.Web/Security/AuthenticationExtensions.cs b/src/Umbraco.Web/Security/AuthenticationExtensions.cs index b5246051f8..66fbd8e201 100644 --- a/src/Umbraco.Web/Security/AuthenticationExtensions.cs +++ b/src/Umbraco.Web/Security/AuthenticationExtensions.cs @@ -145,7 +145,7 @@ namespace Umbraco.Web.Security public static void UmbracoLogout(this HttpContextBase http) { if (http == null) throw new ArgumentNullException("http"); - Logout(http, Current.Config.Umbraco().Security.AuthCookieName); + Logout(http, Current.Configs.Settings().Security.AuthCookieName); } /// @@ -215,7 +215,7 @@ namespace Umbraco.Web.Security public static AuthenticationTicket GetUmbracoAuthTicket(this HttpContextBase http) { if (http == null) throw new ArgumentNullException(nameof(http)); - return GetAuthTicket(http, Current.Config.Umbraco().Security.AuthCookieName); + return GetAuthTicket(http, Current.Configs.Settings().Security.AuthCookieName); } internal static AuthenticationTicket GetUmbracoAuthTicket(this HttpContext http) @@ -227,7 +227,7 @@ namespace Umbraco.Web.Security public static AuthenticationTicket GetUmbracoAuthTicket(this IOwinContext ctx) { if (ctx == null) throw new ArgumentNullException(nameof(ctx)); - return GetAuthTicket(ctx, Current.Config.Umbraco().Security.AuthCookieName); + return GetAuthTicket(ctx, Current.Configs.Settings().Security.AuthCookieName); } /// diff --git a/src/Umbraco.Web/Security/BackOfficeCookieAuthenticationProvider.cs b/src/Umbraco.Web/Security/BackOfficeCookieAuthenticationProvider.cs index 4c3df092b8..bf22e82bbc 100644 --- a/src/Umbraco.Web/Security/BackOfficeCookieAuthenticationProvider.cs +++ b/src/Umbraco.Web/Security/BackOfficeCookieAuthenticationProvider.cs @@ -67,7 +67,7 @@ namespace Umbraco.Web.Security Expires = DateTime.Now.AddYears(-1), Path = "/" }); - context.Response.Cookies.Append(Current.Config.Umbraco().Security.AuthCookieName, "", new CookieOptions + context.Response.Cookies.Append(Current.Configs.Settings().Security.AuthCookieName, "", new CookieOptions { Expires = DateTime.Now.AddYears(-1), Path = "/" diff --git a/src/Umbraco.Web/Security/ExternalSignInAutoLinkOptions.cs b/src/Umbraco.Web/Security/ExternalSignInAutoLinkOptions.cs index fffa2ed30e..44fbdda6c7 100644 --- a/src/Umbraco.Web/Security/ExternalSignInAutoLinkOptions.cs +++ b/src/Umbraco.Web/Security/ExternalSignInAutoLinkOptions.cs @@ -1,5 +1,6 @@ using System; using Microsoft.AspNet.Identity.Owin; +using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; using Umbraco.Core.Models.Identity; @@ -24,7 +25,7 @@ namespace Umbraco.Web.Security { _defaultUserGroups = defaultUserGroups ?? new[] { "editor" }; _autoLinkExternalAccount = autoLinkExternalAccount; - _defaultCulture = defaultCulture ?? Current.Config.Global().DefaultUILanguage; + _defaultCulture = defaultCulture ?? Current.Configs.Global().DefaultUILanguage; } private readonly string[] _defaultUserGroups; diff --git a/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs b/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs index c5403f10d7..f5002cdcd3 100644 --- a/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs +++ b/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs @@ -38,7 +38,7 @@ namespace Umbraco.Web.Security.Providers public override string ProviderName { - get { return Current.Config.Umbraco().Providers.DefaultBackOfficeUserProvider; } + get { return Current.Configs.Settings().Providers.DefaultBackOfficeUserProvider; } } protected override MembershipUser ConvertToMembershipUser(IUser entity) diff --git a/src/Umbraco.Web/Templates/TemplateRenderer.cs b/src/Umbraco.Web/Templates/TemplateRenderer.cs index b0f4c6efc3..7281874dd2 100644 --- a/src/Umbraco.Web/Templates/TemplateRenderer.cs +++ b/src/Umbraco.Web/Templates/TemplateRenderer.cs @@ -86,7 +86,7 @@ namespace Umbraco.Web.Templates //set the doc that was found by id contentRequest.PublishedContent = doc; //set the template, either based on the AltTemplate found or the standard template of the doc - contentRequest.TemplateModel = Current.Config.Umbraco().WebRouting.DisableAlternativeTemplates || AltTemplate.HasValue == false + contentRequest.TemplateModel = Current.Configs.Settings().WebRouting.DisableAlternativeTemplates || AltTemplate.HasValue == false ? FileService.GetTemplate(doc.TemplateId) : FileService.GetTemplate(AltTemplate.Value); diff --git a/src/Umbraco.Web/Templates/TemplateUtilities.cs b/src/Umbraco.Web/Templates/TemplateUtilities.cs index 4b13da15af..6da133413d 100644 --- a/src/Umbraco.Web/Templates/TemplateUtilities.cs +++ b/src/Umbraco.Web/Templates/TemplateUtilities.cs @@ -86,7 +86,7 @@ namespace Umbraco.Web.Templates /// public static string ResolveUrlsFromTextString(string text) { - if (Current.Config.Umbraco().Content.ResolveUrlsFromTextString == false) return text; + if (Current.Configs.Settings().Content.ResolveUrlsFromTextString == false) return text; using (var timer = Current.ProfilingLogger.DebugDuration(typeof(IOHelper), "ResolveUrlsFromTextString starting", "ResolveUrlsFromTextString complete")) { diff --git a/src/Umbraco.Web/Trees/ContentTypeTreeController.cs b/src/Umbraco.Web/Trees/ContentTypeTreeController.cs index 1e0bd8b619..cf81822a9c 100644 --- a/src/Umbraco.Web/Trees/ContentTypeTreeController.cs +++ b/src/Umbraco.Web/Trees/ContentTypeTreeController.cs @@ -75,7 +75,7 @@ namespace Umbraco.Web.Trees { var menu = new MenuItemCollection(); - var enableInheritedDocumentTypes = Current.Config.Umbraco().Content.EnableInheritedDocumentTypes; + var enableInheritedDocumentTypes = Current.Configs.Settings().Content.EnableInheritedDocumentTypes; if (id == Constants.System.Root.ToInvariantString()) { diff --git a/src/Umbraco.Web/Trees/LegacyTreeDataConverter.cs b/src/Umbraco.Web/Trees/LegacyTreeDataConverter.cs index 2bba17a729..5ac624cc88 100644 --- a/src/Umbraco.Web/Trees/LegacyTreeDataConverter.cs +++ b/src/Umbraco.Web/Trees/LegacyTreeDataConverter.cs @@ -31,7 +31,7 @@ namespace Umbraco.Web.Trees { case ActionDelete actionDelete: return Attempt.Succeed( - Current.Config.Global().Path.EnsureEndsWith('/') + "views/common/dialogs/legacydelete.html"); + Current.Configs.Global().Path.EnsureEndsWith('/') + "views/common/dialogs/legacydelete.html"); } return Attempt.Fail(); diff --git a/src/Umbraco.Web/Trees/MediaTypeTreeController.cs b/src/Umbraco.Web/Trees/MediaTypeTreeController.cs index ff87819fa2..01d2a5dd7c 100644 --- a/src/Umbraco.Web/Trees/MediaTypeTreeController.cs +++ b/src/Umbraco.Web/Trees/MediaTypeTreeController.cs @@ -69,7 +69,7 @@ namespace Umbraco.Web.Trees { var menu = new MenuItemCollection(); - var enableInheritedMediaTypes = Current.Config.Umbraco().Content.EnableInheritedMediaTypes; + var enableInheritedMediaTypes = Current.Configs.Settings().Content.EnableInheritedMediaTypes; if (id == Constants.System.Root.ToInvariantString()) { diff --git a/src/Umbraco.Web/UI/Pages/BasePage.cs b/src/Umbraco.Web/UI/Pages/BasePage.cs index 089f98d874..a8fbc92722 100644 --- a/src/Umbraco.Web/UI/Pages/BasePage.cs +++ b/src/Umbraco.Web/UI/Pages/BasePage.cs @@ -6,6 +6,7 @@ using Umbraco.Core.Logging; using Umbraco.Core.Services; using Umbraco.Web.Security; using System.Web.UI; +using Umbraco.Core; using Umbraco.Web.Composing; namespace Umbraco.Web.UI.Pages @@ -72,7 +73,7 @@ namespace Umbraco.Web.UI.Pages { base.OnLoad(e); - if (Request.IsSecureConnection || Current.Config.Global().UseHttps == false) return; + if (Request.IsSecureConnection || Current.Configs.Global().UseHttps == false) return; var serverName = HttpUtility.UrlEncode(Request.ServerVariables["SERVER_NAME"]); Response.Redirect($"https://{serverName}{Request.FilePath}"); diff --git a/src/Umbraco.Web/UI/Pages/UmbracoEnsuredPage.cs b/src/Umbraco.Web/UI/Pages/UmbracoEnsuredPage.cs index 27b92488db..bb9ce3c421 100644 --- a/src/Umbraco.Web/UI/Pages/UmbracoEnsuredPage.cs +++ b/src/Umbraco.Web/UI/Pages/UmbracoEnsuredPage.cs @@ -90,7 +90,7 @@ namespace Umbraco.Web.UI.Pages //If this is not a back office request, then the module won't have authenticated it, in this case we // need to do the auth manually and since this is an UmbracoEnsuredPage, this is the anticipated behavior // TODO: When we implement Identity, this process might not work anymore, will be an interesting challenge - if (Context.Request.Url.IsBackOfficeRequest(HttpRuntime.AppDomainAppVirtualPath, Current.Config.Global()) == false) + if (Context.Request.Url.IsBackOfficeRequest(HttpRuntime.AppDomainAppVirtualPath, Current.Configs.Global()) == false) { var http = new HttpContextWrapper(Context); var ticket = http.GetUmbracoAuthTicket(); diff --git a/src/Umbraco.Web/UmbracoContext.cs b/src/Umbraco.Web/UmbracoContext.cs index 01d862729b..a4de900e7c 100644 --- a/src/Umbraco.Web/UmbracoContext.cs +++ b/src/Umbraco.Web/UmbracoContext.cs @@ -111,10 +111,10 @@ namespace Umbraco.Web Composing.Current.UmbracoContextAccessor, httpContext, Composing.Current.PublishedSnapshotService, - new WebSecurity(httpContext, Composing.Current.Services.UserService, Composing.Current.Config.Global()), - Composing.Current.Config.Umbraco(), + new WebSecurity(httpContext, Composing.Current.Services.UserService, Composing.Current.Configs.Global()), + Composing.Current.Configs.Settings(), Composing.Current.UrlProviders, - Composing.Current.Config.Global(), + Composing.Current.Configs.Global(), Composing.Current.Factory.GetInstance(), true); diff --git a/src/Umbraco.Web/UmbracoDefaultOwinStartup.cs b/src/Umbraco.Web/UmbracoDefaultOwinStartup.cs index de6192acb3..2651167a6b 100644 --- a/src/Umbraco.Web/UmbracoDefaultOwinStartup.cs +++ b/src/Umbraco.Web/UmbracoDefaultOwinStartup.cs @@ -24,8 +24,8 @@ namespace Umbraco.Web public class UmbracoDefaultOwinStartup { protected IUmbracoContextAccessor UmbracoContextAccessor => Current.UmbracoContextAccessor; - protected IGlobalSettings GlobalSettings => Current.Config.Global(); - protected IUmbracoSettingsSection UmbracoSettings => Current.Config.Umbraco(); + protected IGlobalSettings GlobalSettings => Current.Configs.Global(); + protected IUmbracoSettingsSection UmbracoSettings => Current.Configs.Settings(); protected IRuntimeState RuntimeState => Core.Composing.Current.RuntimeState; protected ServiceContext Services => Current.Services; diff --git a/src/Umbraco.Web/UmbracoInjectedModule.cs b/src/Umbraco.Web/UmbracoInjectedModule.cs index de05671fa1..eb6fc54fbb 100644 --- a/src/Umbraco.Web/UmbracoInjectedModule.cs +++ b/src/Umbraco.Web/UmbracoInjectedModule.cs @@ -99,7 +99,7 @@ namespace Umbraco.Web httpContext, _publishedSnapshotService, new WebSecurity(httpContext, _userService, _globalSettings), - Current.Config.Umbraco(), + Current.Configs.Settings(), _urlProviders, _globalSettings, _variationContextAccessor, @@ -270,7 +270,7 @@ namespace Umbraco.Web ReportRuntime(level, "Umbraco is booting."); // let requests pile up and wait for 10s then show the splash anyway - if (Current.Config.Umbraco().Content.EnableSplashWhileLoading == false + if (Current.Configs.Settings().Content.EnableSplashWhileLoading == false && ((RuntimeState) _runtime).WaitForRunLevel(TimeSpan.FromSeconds(10))) return true; // redirect to booting page diff --git a/src/Umbraco.Web/UmbracoModule.cs b/src/Umbraco.Web/UmbracoModule.cs index e2cbcd260e..332c955506 100644 --- a/src/Umbraco.Web/UmbracoModule.cs +++ b/src/Umbraco.Web/UmbracoModule.cs @@ -1,5 +1,6 @@ using System; using System.Web; +using Umbraco.Core; using Umbraco.Core.Collections; using Umbraco.Core.Configuration; using Umbraco.Core.Logging; @@ -77,7 +78,7 @@ namespace Umbraco.Web else if (pcr.Is404) { response.StatusCode = 404; - response.TrySkipIisCustomErrors = Current.Config.Umbraco().WebRouting.TrySkipIisCustomErrors; + response.TrySkipIisCustomErrors = Current.Configs.Settings().WebRouting.TrySkipIisCustomErrors; if (response.TrySkipIisCustomErrors == false) logger.Warn("Status code is 404 yet TrySkipIisCustomErrors is false - IIS will take over."); diff --git a/src/Umbraco.Web/UmbracoWebService.cs b/src/Umbraco.Web/UmbracoWebService.cs index 852e0df470..b970a0e8c2 100644 --- a/src/Umbraco.Web/UmbracoWebService.cs +++ b/src/Umbraco.Web/UmbracoWebService.cs @@ -29,7 +29,7 @@ namespace Umbraco.Web Logger = Current.Logger; ProfilingLogger = Current.ProfilingLogger; Services = Current.Services; - GlobalSettings = Current.Config.Global(); + GlobalSettings = Current.Configs.Global(); } /// diff --git a/src/Umbraco.Web/WebApi/Filters/CheckIfUserTicketDataIsStaleAttribute.cs b/src/Umbraco.Web/WebApi/Filters/CheckIfUserTicketDataIsStaleAttribute.cs index a1158126ea..84481868e4 100644 --- a/src/Umbraco.Web/WebApi/Filters/CheckIfUserTicketDataIsStaleAttribute.cs +++ b/src/Umbraco.Web/WebApi/Filters/CheckIfUserTicketDataIsStaleAttribute.cs @@ -76,7 +76,7 @@ namespace Umbraco.Web.WebApi.Filters () => user.Username != identity.Username, () => { - var culture = UserExtensions.GetUserCulture(user, Current.Services.TextService, Current.Config.Global()); + var culture = UserExtensions.GetUserCulture(user, Current.Services.TextService, Current.Configs.Global()); return culture != null && culture.ToString() != identity.Culture; }, () => user.AllowedSections.UnsortedSequenceEqual(identity.AllowedApplications) == false, diff --git a/src/Umbraco.Web/WebApi/Filters/SetAngularAntiForgeryTokensAttribute.cs b/src/Umbraco.Web/WebApi/Filters/SetAngularAntiForgeryTokensAttribute.cs index c75e223e1b..b8cad1f26e 100644 --- a/src/Umbraco.Web/WebApi/Filters/SetAngularAntiForgeryTokensAttribute.cs +++ b/src/Umbraco.Web/WebApi/Filters/SetAngularAntiForgeryTokensAttribute.cs @@ -4,6 +4,7 @@ using System.Net.Http; using System.Net.Http.Headers; using System.Web.Helpers; using System.Web.Http.Filters; +using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; @@ -44,14 +45,14 @@ namespace Umbraco.Web.WebApi.Filters Path = "/", //must be js readable HttpOnly = false, - Secure = Current.Config.Global().UseHttps + Secure = Current.Configs.Global().UseHttps }; var validationCookie = new CookieHeaderValue(AngularAntiForgeryHelper.CsrfValidationCookieName, cookieToken) { Path = "/", HttpOnly = true, - Secure = Current.Config.Global().UseHttps + Secure = Current.Configs.Global().UseHttps }; context.Response.Headers.AddCookies(new[] { angularCookie, validationCookie }); diff --git a/src/Umbraco.Web/WebApi/Filters/UmbracoWebApiRequireHttpsAttribute.cs b/src/Umbraco.Web/WebApi/Filters/UmbracoWebApiRequireHttpsAttribute.cs index e1278b0b9f..50d997f40d 100644 --- a/src/Umbraco.Web/WebApi/Filters/UmbracoWebApiRequireHttpsAttribute.cs +++ b/src/Umbraco.Web/WebApi/Filters/UmbracoWebApiRequireHttpsAttribute.cs @@ -4,6 +4,7 @@ using System.Net.Http; using System.Text; using System.Web.Http.Controllers; using System.Web.Http.Filters; +using Umbraco.Core; using Umbraco.Core.Composing; using Umbraco.Core.Configuration; @@ -24,7 +25,7 @@ namespace Umbraco.Web.WebApi.Filters public override void OnAuthorization(HttpActionContext actionContext) { var request = actionContext.Request; - if (Current.Config.Global().UseHttps && request.RequestUri.Scheme != Uri.UriSchemeHttps) + if (Current.Configs.Global().UseHttps && request.RequestUri.Scheme != Uri.UriSchemeHttps) { HttpResponseMessage response; var uri = new UriBuilder(request.RequestUri) diff --git a/src/Umbraco.Web/umbraco.presentation/default.aspx.cs b/src/Umbraco.Web/umbraco.presentation/default.aspx.cs index c571c99ced..c7a5d9fdd2 100644 --- a/src/Umbraco.Web/umbraco.presentation/default.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/default.aspx.cs @@ -141,7 +141,7 @@ namespace umbraco if (pos > -1) { string htmlBadge = - string.Format(Current.Config.Umbraco().Content.PreviewBadge, + string.Format(Current.Configs.Settings().Content.PreviewBadge, IOHelper.ResolveUrl(SystemDirectories.Umbraco), Server.UrlEncode(UmbracoContext.Current.HttpContext.Request.Path));