Files
Umbraco-CMS/src/Umbraco.Tests/TestHelpers/SettingsForTests.cs
2016-10-17 11:00:18 +02:00

170 lines
6.8 KiB
C#

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
/// <summary>
/// Sets the umbraco settings singleton to the object specified
/// </summary>
/// <param name="settings"></param>
public static void ConfigureSettings(IUmbracoSettingsSection settings)
{
UmbracoConfig.For.SetUmbracoSettings(settings);
}
/// <summary>
/// Returns generated settings which can be stubbed to return whatever values necessary
/// </summary>
/// <returns></returns>
public static IUmbracoSettingsSection GenerateMockSettings()
{
var settings = new Mock<IUmbracoSettingsSection>();
var content = new Mock<IContentSection>();
var security = new Mock<ISecuritySection>();
var requestHandler = new Mock<IRequestHandlerSection>();
var templates = new Mock<ITemplatesSection>();
var dev = new Mock<IDeveloperSection>();
var logging = new Mock<ILoggingSection>();
var tasks = new Mock<IScheduledTasksSection>();
var distCall = new Mock<IDistributedCallSection>();
var repos = new Mock<IRepositoriesSection>();
var providers = new Mock<IProvidersSection>();
var routing = new Mock<IWebRoutingSection>();
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<string, string> SavedAppSettings = new Dictionary<string, string>();
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;
}
/// <summary>
/// This sets all settings back to default settings
/// </summary>
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;
}
}
}