using System.Collections.Generic; using System.IO; using System.Configuration; using Moq; using Umbraco.Core; using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.UmbracoSettings; namespace Umbraco.Tests.TestHelpers { public class SettingsForTests { // umbracoSettings /// /// Sets the umbraco settings singleton to the object specified /// /// public static void ConfigureSettings(IUmbracoSettingsSection settings) { UmbracoConfig.For.SetUmbracoSettings(settings); } /// /// Returns generated settings which can be stubbed to return whatever values necessary /// /// public static IUmbracoSettingsSection GenerateMockSettings() { var settings = new Mock(); var content = new Mock(); var security = new Mock(); var requestHandler = new Mock(); var templates = new Mock(); var dev = new Mock(); var logging = new Mock(); var tasks = new Mock(); var distCall = new Mock(); var repos = new Mock(); var providers = new Mock(); var routing = new Mock(); settings.Setup(x => x.Content).Returns(content.Object); settings.Setup(x => x.Security).Returns(security.Object); settings.Setup(x => x.RequestHandler).Returns(requestHandler.Object); settings.Setup(x => x.Templates).Returns(templates.Object); settings.Setup(x => x.Developer).Returns(dev.Object); settings.Setup(x => x.Logging).Returns(logging.Object); settings.Setup(x => x.ScheduledTasks).Returns(tasks.Object); settings.Setup(x => x.DistributedCall).Returns(distCall.Object); settings.Setup(x => x.PackageRepositories).Returns(repos.Object); settings.Setup(x => x.Providers).Returns(providers.Object); settings.Setup(x => x.WebRouting).Returns(routing.Object); //Now configure some defaults - the defaults in the config section classes do NOT pertain to the mocked data!! settings.Setup(x => x.Content.ForceSafeAliases).Returns(true); settings.Setup(x => x.Content.ImageAutoFillProperties).Returns(ContentImagingElement.GetDefaultImageAutoFillProperties()); settings.Setup(x => x.Content.ImageFileTypes).Returns(ContentImagingElement.GetDefaultImageFileTypes()); settings.Setup(x => x.RequestHandler.AddTrailingSlash).Returns(true); settings.Setup(x => x.RequestHandler.UseDomainPrefixes).Returns(false); settings.Setup(x => x.RequestHandler.CharCollection).Returns(RequestHandlerElement.GetDefaultCharReplacements()); settings.Setup(x => x.Content.UmbracoLibraryCacheDuration).Returns(1800); settings.Setup(x => x.WebRouting.UrlProviderMode).Returns("AutoLegacy"); settings.Setup(x => x.Templates.DefaultRenderingEngine).Returns(RenderingEngine.Mvc); return settings.Object; } // from appSettings private static readonly IDictionary SavedAppSettings = new Dictionary(); static void SaveSetting(string key) { SavedAppSettings[key] = ConfigurationManager.AppSettings[key]; } static void SaveSettings() { SaveSetting("umbracoHideTopLevelNodeFromPath"); SaveSetting("umbracoUseDirectoryUrls"); SaveSetting("umbracoPath"); SaveSetting("umbracoReservedPaths"); SaveSetting("umbracoReservedUrls"); SaveSetting("umbracoConfigurationStatus"); } public static bool HideTopLevelNodeFromPath { get { return GlobalSettings.HideTopLevelNodeFromPath; } set { ConfigurationManager.AppSettings.Set("umbracoHideTopLevelNodeFromPath", value ? "true" : "false"); } } public static bool UseDirectoryUrls { get { return GlobalSettings.UseDirectoryUrls; } set { ConfigurationManager.AppSettings.Set("umbracoUseDirectoryUrls", value ? "true" : "false"); } } public static string UmbracoPath { get { return GlobalSettings.Path; } set { ConfigurationManager.AppSettings.Set("umbracoPath", value); } } public static string ReservedPaths { get { return GlobalSettings.ReservedPaths; } set { GlobalSettings.ReservedPaths = value; } } public static string ReservedUrls { get { return GlobalSettings.ReservedUrls; } set { GlobalSettings.ReservedUrls = value; } } public static string ConfigurationStatus { get { return GlobalSettings.ConfigurationStatus; } set { ConfigurationManager.AppSettings.Set("umbracoConfigurationStatus", value); } } // reset & defaults static SettingsForTests() { SaveSettings(); } public static void Reset() { ResetUmbracoSettings(); GlobalSettings.Reset(); foreach (var kvp in SavedAppSettings) ConfigurationManager.AppSettings.Set(kvp.Key, kvp.Value); // set some defaults that are wrong in the config file?! // this is annoying, really HideTopLevelNodeFromPath = false; } /// /// This sets all settings back to default settings /// private static void ResetUmbracoSettings() { ConfigureSettings(GetDefault()); } private static IUmbracoSettingsSection _defaultSettings; internal static IUmbracoSettingsSection GetDefault() { if (_defaultSettings == null) { var config = new FileInfo(TestHelper.MapPathForTest("~/Configurations/UmbracoSettings/web.config")); var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = config.FullName }; var configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); _defaultSettings = configuration.GetSection("umbracoConfiguration/defaultSettings") as UmbracoSettingsSection; } return _defaultSettings; } } }