From 48db556d1b646bef798938228c063d0ceb16167d Mon Sep 17 00:00:00 2001 From: Shannon Date: Mon, 16 Sep 2013 19:33:21 +1000 Subject: [PATCH] Updated SettingsForTest to return mockable umbraco settings so we can set whatever we want. Fixing up unit tests. Removes calls to CleanUmbracoSettingsConfig and EnsureUmbracoSettingsConfig since we should be dealing with the mockable settings. --- .../UmbracoSettings/ContentImagingElement.cs | 18 ++- .../UmbracoSettings/RequestHandlerElement.cs | 47 ++++--- src/Umbraco.Core/Models/ContentExtensions.cs | 2 +- .../Strings/LegacyShortStringHelper.cs | 2 +- src/Umbraco.Tests/App.config | 96 +++++++------- .../CodeFirst/StronglyTypedMapperTest.cs | 7 +- .../Configurations/FileSystemProviderTests.cs | 2 +- .../UmbracoSettings/UmbracoSettingsTests.cs | 1 - .../CoreStrings/CmsHelperCasingTests.cs | 11 ++ .../LegacyShortStringHelperTests.cs | 4 +- .../IO/FileSystemProviderManagerTests.cs | 11 +- src/Umbraco.Tests/Models/ContentTests.cs | 5 +- .../TestHelpers/BaseUmbracoApplicationTest.cs | 14 +- .../TestHelpers/SettingsForTests.cs | 120 +++++++----------- src/Umbraco.Web/Routing/UrlProvider.cs | 5 - src/Umbraco.Web/Trees/TreeNode.cs | 1 + src/umbraco.businesslogic/UmbracoSettings.cs | 3 +- 17 files changed, 183 insertions(+), 166 deletions(-) diff --git a/src/Umbraco.Core/Configuration/UmbracoSettings/ContentImagingElement.cs b/src/Umbraco.Core/Configuration/UmbracoSettings/ContentImagingElement.cs index 6b8542ec24..d07bfb3eda 100644 --- a/src/Umbraco.Core/Configuration/UmbracoSettings/ContentImagingElement.cs +++ b/src/Umbraco.Core/Configuration/UmbracoSettings/ContentImagingElement.cs @@ -13,10 +13,15 @@ namespace Umbraco.Core.Configuration.UmbracoSettings return new OptionalCommaDelimitedConfigurationElement( (CommaDelimitedConfigurationElement)this["imageFileTypes"], //set the default - new[] { "jpeg", "jpg", "gif", "bmp", "png", "tiff", "tif" }); + GetDefaultImageFileTypes()); } } + internal static string[] GetDefaultImageFileTypes() + { + return new[] {"jpeg", "jpg", "gif", "bmp", "png", "tiff", "tif"}; + } + [ConfigurationProperty("allowedAttributes")] internal CommaDelimitedConfigurationElement ImageTagAllowedAttributes { @@ -61,5 +66,16 @@ namespace Umbraco.Core.Configuration.UmbracoSettings } } + internal static ImagingAutoFillPropertiesCollection GetDefaultImageAutoFillProperties() + { + return new ImagingAutoFillPropertiesCollection + { + new ImagingAutoFillUploadFieldElement + { + Alias = "umbracoFile" + } + }; + } + } } \ No newline at end of file diff --git a/src/Umbraco.Core/Configuration/UmbracoSettings/RequestHandlerElement.cs b/src/Umbraco.Core/Configuration/UmbracoSettings/RequestHandlerElement.cs index cef84b71c3..3f57839e5a 100644 --- a/src/Umbraco.Core/Configuration/UmbracoSettings/RequestHandlerElement.cs +++ b/src/Umbraco.Core/Configuration/UmbracoSettings/RequestHandlerElement.cs @@ -47,7 +47,21 @@ namespace Umbraco.Core.Configuration.UmbracoSettings var urls = this[prop] as ConfigurationElement; if (urls != null && urls.ElementInformation.IsPresent == false) { - var dictionary = new Dictionary() + _defaultUrlReplacing = new UrlReplacingElement() + { + CharCollection = GetDefaultCharReplacements() + }; + + return _defaultUrlReplacing; + } + + return (UrlReplacingElement)this["urlReplacing"]; + } + } + + internal static CharCollection GetDefaultCharReplacements() + { + var dictionary = new Dictionary() { {' ',"-"}, {'\"',""}, @@ -77,28 +91,19 @@ namespace Umbraco.Core.Configuration.UmbracoSettings {'>',""} }; - //const string chars = @" ,"",',%,.,;,/,\,:,#,+,*,&,?,æ,ø,å,ä,ö,ü,ß,Ä,Ö,|,<,>"; + //const string chars = @" ,"",',%,.,;,/,\,:,#,+,*,&,?,æ,ø,å,ä,ö,ü,ß,Ä,Ö,|,<,>"; - var collection = new CharCollection(); - foreach (var c in dictionary) - { - collection.Add(new CharElement - { - Char = c.Key.ToString(CultureInfo.InvariantCulture), - Replacement = c.Value.ToString(CultureInfo.InvariantCulture) - }); - } - - _defaultUrlReplacing = new UrlReplacingElement() - { - CharCollection = collection - }; - - return _defaultUrlReplacing; - } - - return (UrlReplacingElement)this["urlReplacing"]; + var collection = new CharCollection(); + foreach (var c in dictionary) + { + collection.Add(new CharElement + { + Char = c.Key.ToString(CultureInfo.InvariantCulture), + Replacement = c.Value.ToString(CultureInfo.InvariantCulture) + }); } + + return collection; } bool IRequestHandlerSection.UseDomainPrefixes diff --git a/src/Umbraco.Core/Models/ContentExtensions.cs b/src/Umbraco.Core/Models/ContentExtensions.cs index e337493aff..00b44e74ac 100644 --- a/src/Umbraco.Core/Models/ContentExtensions.cs +++ b/src/Umbraco.Core/Models/ContentExtensions.cs @@ -425,7 +425,7 @@ namespace Umbraco.Core.Models if (UmbracoConfiguration.Current.UmbracoSettings.Content.ImageAutoFillProperties != null) { uploadFieldConfigNode = UmbracoConfiguration.Current.UmbracoSettings.Content.ImageAutoFillProperties - .Single(x => x.Alias == propertyTypeAlias); + .FirstOrDefault(x => x.Alias == propertyTypeAlias); } diff --git a/src/Umbraco.Core/Strings/LegacyShortStringHelper.cs b/src/Umbraco.Core/Strings/LegacyShortStringHelper.cs index 5af243f234..9d8f03427e 100644 --- a/src/Umbraco.Core/Strings/LegacyShortStringHelper.cs +++ b/src/Umbraco.Core/Strings/LegacyShortStringHelper.cs @@ -470,7 +470,7 @@ function isValidAlias(alias) {{ var newUrl = url.ToLowerInvariant(); foreach (var n in UmbracoConfiguration.Current.UmbracoSettings.RequestHandler.CharCollection) { - if (n.Char.IsNullOrWhiteSpace() == false) + if (n.Char != "") newUrl = newUrl.Replace(n.Char, n.Replacement); } diff --git a/src/Umbraco.Tests/App.config b/src/Umbraco.Tests/App.config index e4df374cd3..68af84d0d7 100644 --- a/src/Umbraco.Tests/App.config +++ b/src/Umbraco.Tests/App.config @@ -1,9 +1,58 @@ -
- + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -20,49 +69,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Umbraco.Tests/CodeFirst/StronglyTypedMapperTest.cs b/src/Umbraco.Tests/CodeFirst/StronglyTypedMapperTest.cs index 26054a6fdf..740215016b 100644 --- a/src/Umbraco.Tests/CodeFirst/StronglyTypedMapperTest.cs +++ b/src/Umbraco.Tests/CodeFirst/StronglyTypedMapperTest.cs @@ -7,6 +7,7 @@ using Umbraco.Tests.CodeFirst.TestModels; using Umbraco.Tests.PublishedContent; using Umbraco.Tests.TestHelpers; using Umbraco.Web; +using Rhino.Mocks; namespace Umbraco.Tests.CodeFirst { @@ -57,10 +58,8 @@ namespace Umbraco.Tests.CodeFirst #region Test setup public override void Initialize() - { - TestHelper.EnsureUmbracoSettingsConfig(); - - base.Initialize(); + { + base.Initialize(); } public override void TearDown() diff --git a/src/Umbraco.Tests/Configurations/FileSystemProviderTests.cs b/src/Umbraco.Tests/Configurations/FileSystemProviderTests.cs index e0bf108e6f..ae48b26eb1 100644 --- a/src/Umbraco.Tests/Configurations/FileSystemProviderTests.cs +++ b/src/Umbraco.Tests/Configurations/FileSystemProviderTests.cs @@ -11,7 +11,7 @@ namespace Umbraco.Tests.Configurations [Test] public void Can_Get_Media_Provider() { - var config = (FileSystemProvidersSection)ConfigurationManager.GetSection("FileSystemProviders"); + var config = (FileSystemProvidersSection)ConfigurationManager.GetSection("umbracoConfiguration/FileSystemProviders"); var providerConfig = config.Providers["media"]; Assert.That(providerConfig, Is.Not.Null); diff --git a/src/Umbraco.Tests/Configurations/UmbracoSettings/UmbracoSettingsTests.cs b/src/Umbraco.Tests/Configurations/UmbracoSettings/UmbracoSettingsTests.cs index cadc01746d..11e792a4db 100644 --- a/src/Umbraco.Tests/Configurations/UmbracoSettings/UmbracoSettingsTests.cs +++ b/src/Umbraco.Tests/Configurations/UmbracoSettings/UmbracoSettingsTests.cs @@ -29,7 +29,6 @@ namespace Umbraco.Tests.Configurations.UmbracoSettings } else { - //Section = configuration.GetSection("umbracoConfiguration/settings") as UmbracoSettingsSection; SettingsSection = UmbracoConfiguration.For(configuration); } diff --git a/src/Umbraco.Tests/CoreStrings/CmsHelperCasingTests.cs b/src/Umbraco.Tests/CoreStrings/CmsHelperCasingTests.cs index 477a9a5b05..2462f55a5d 100644 --- a/src/Umbraco.Tests/CoreStrings/CmsHelperCasingTests.cs +++ b/src/Umbraco.Tests/CoreStrings/CmsHelperCasingTests.cs @@ -3,15 +3,26 @@ using System.Collections.Generic; using System.Linq; using System.Text; using NUnit.Framework; +using Rhino.Mocks; using Umbraco.Core; using Umbraco.Core.Strings; using Umbraco.Core.ObjectResolution; +using Umbraco.Tests.TestHelpers; namespace Umbraco.Tests.CoreStrings { [TestFixture] public class CmsHelperCasingTests { + [SetUp] + public void Setup() + { + //set default config + var config = SettingsForTests.GetDefault(); + SettingsForTests.ConfigureSettings(config); + + } + [TestCase("thisIsTheEnd", "This Is The End")] [TestCase("th", "Th")] [TestCase("t", "t")] diff --git a/src/Umbraco.Tests/CoreStrings/LegacyShortStringHelperTests.cs b/src/Umbraco.Tests/CoreStrings/LegacyShortStringHelperTests.cs index e26a8a9d07..ea614a7d6a 100644 --- a/src/Umbraco.Tests/CoreStrings/LegacyShortStringHelperTests.cs +++ b/src/Umbraco.Tests/CoreStrings/LegacyShortStringHelperTests.cs @@ -18,14 +18,14 @@ namespace Umbraco.Tests.CoreStrings [SetUp] public void Setup() { - TestHelper.EnsureUmbracoSettingsConfig(); + var config = SettingsForTests.GetDefault(); + SettingsForTests.ConfigureSettings(config); _helper = new LegacyShortStringHelper(); } [TearDown] public void TearDown() { - TestHelper.CleanUmbracoSettingsConfig(); } diff --git a/src/Umbraco.Tests/IO/FileSystemProviderManagerTests.cs b/src/Umbraco.Tests/IO/FileSystemProviderManagerTests.cs index 48d5819ebb..56b487a82e 100644 --- a/src/Umbraco.Tests/IO/FileSystemProviderManagerTests.cs +++ b/src/Umbraco.Tests/IO/FileSystemProviderManagerTests.cs @@ -5,12 +5,21 @@ using System.Linq; using System.Text; using NUnit.Framework; using Umbraco.Core.IO; +using Umbraco.Tests.TestHelpers; namespace Umbraco.Tests.IO { [TestFixture] public class FileSystemProviderManagerTests { + [SetUp] + public void Setup() + { + //init the config singleton + var config = SettingsForTests.GetDefault(); + SettingsForTests.ConfigureSettings(config); + } + [Test] public void Can_Get_Base_File_System() { @@ -33,7 +42,6 @@ namespace Umbraco.Tests.IO Assert.Throws(() => FileSystemProviderManager.Current.GetFileSystemProvider()); } - #region /// /// Used in unit tests, for a typed file system we need to inherit from FileSystemWrapper and they MUST have a ctor @@ -46,6 +54,5 @@ namespace Umbraco.Tests.IO } } - #endregion } } diff --git a/src/Umbraco.Tests/Models/ContentTests.cs b/src/Umbraco.Tests/Models/ContentTests.cs index 321f106a5e..14f3029830 100644 --- a/src/Umbraco.Tests/Models/ContentTests.cs +++ b/src/Umbraco.Tests/Models/ContentTests.cs @@ -17,13 +17,14 @@ namespace Umbraco.Tests.Models [SetUp] public void Init() { - TestHelper.EnsureUmbracoSettingsConfig(); + var config = SettingsForTests.GetDefault(); + SettingsForTests.ConfigureSettings(config); } [TearDown] public void Dispose() { - TestHelper.CleanUmbracoSettingsConfig(); + } [TestCase("-1,-20,12,34,56", false)] diff --git a/src/Umbraco.Tests/TestHelpers/BaseUmbracoApplicationTest.cs b/src/Umbraco.Tests/TestHelpers/BaseUmbracoApplicationTest.cs index f42175c403..e010d9d936 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseUmbracoApplicationTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseUmbracoApplicationTest.cs @@ -32,14 +32,14 @@ namespace Umbraco.Tests.TestHelpers TestHelper.EnsureUmbracoSettingsConfig(); //mock the Umbraco settings that we need - //var settings = MockRepository.GenerateStub(); - var settings = SettingsForTests.GetDefault(); - settings.Stub(x => x.Content.UseLegacyXmlSchema).Return(false); - settings.Stub(x => x.Content.ForceSafeAliases).Return(true); - settings.Stub(x => x.Content.UmbracoLibraryCacheDuration).Return(1800); - SettingsForTests.ConfigureSettings(settings); + var settings = SettingsForTests.GetMockSettings(); + //sets the global singleton to use the mocked format + SettingsForTests.ConfigureSettings(settings); + //set our local variable for tests to use (preferably) + UmbracoSettings = settings; + //Create the legacy prop-eds mapping LegacyPropertyEditorIdToAliasConverter.CreateMappingsForCoreEditors(); @@ -77,6 +77,8 @@ namespace Umbraco.Tests.TestHelpers }); } + protected virtual IUmbracoSettingsSection UmbracoSettings { get; private set; } + /// /// By default this returns false which means the plugin manager will not be reset so it doesn't need to re-scan /// all of the assemblies. Inheritors can override this if plugin manager resetting is required, generally needs diff --git a/src/Umbraco.Tests/TestHelpers/SettingsForTests.cs b/src/Umbraco.Tests/TestHelpers/SettingsForTests.cs index 6f81b4a606..a841292762 100644 --- a/src/Umbraco.Tests/TestHelpers/SettingsForTests.cs +++ b/src/Umbraco.Tests/TestHelpers/SettingsForTests.cs @@ -24,83 +24,59 @@ namespace Umbraco.Tests.TestHelpers UmbracoConfiguration.Current.UmbracoSettings = settings; } - ///// - ///// Returns generated settings which can be stubbed to return whatever values necessary - ///// - ///// - //public static IUmbracoSettings GetMockSettings() - //{ - // var settings = MockRepository.GenerateMock(); + /// + /// Returns generated settings which can be stubbed to return whatever values necessary + /// + /// + public static IUmbracoSettingsSection GetMockSettings() + { + var settings = MockRepository.GenerateStub(); - // var content = MockRepository.GenerateMock(); - // var security = MockRepository.GenerateMock(); - // var requestHandler = MockRepository.GenerateMock(); - // var templates = MockRepository.GenerateMock(); - // var dev = MockRepository.GenerateMock(); - // var viewStateMover = MockRepository.GenerateMock(); - // var logging = MockRepository.GenerateMock(); - // var tasks = MockRepository.GenerateMock(); - // var distCall = MockRepository.GenerateMock(); - // var repos = MockRepository.GenerateMock(); - // var providers = MockRepository.GenerateMock(); - // var help = MockRepository.GenerateMock(); - // var routing = MockRepository.GenerateMock(); - // var scripting = MockRepository.GenerateMock(); + var content = MockRepository.GenerateStub(); + var security = MockRepository.GenerateStub(); + var requestHandler = MockRepository.GenerateStub(); + var templates = MockRepository.GenerateStub(); + var dev = MockRepository.GenerateStub(); + var viewStateMover = MockRepository.GenerateStub(); + var logging = MockRepository.GenerateStub(); + var tasks = MockRepository.GenerateStub(); + var distCall = MockRepository.GenerateStub(); + var repos = MockRepository.GenerateStub(); + var providers = MockRepository.GenerateStub(); + var help = MockRepository.GenerateStub(); + var routing = MockRepository.GenerateStub(); + var scripting = MockRepository.GenerateStub(); - // settings.Stub(x => x.Content).Return(content); - // settings.Stub(x => x.Security).Return(security); - // settings.Stub(x => x.RequestHandler).Return(requestHandler); - // settings.Stub(x => x.Templates).Return(templates); - // settings.Stub(x => x.Developer).Return(dev); - // settings.Stub(x => x.ViewstateMoverModule).Return(viewStateMover); - // settings.Stub(x => x.Logging).Return(logging); - // settings.Stub(x => x.ScheduledTasks).Return(tasks); - // settings.Stub(x => x.DistributedCall).Return(distCall); - // settings.Stub(x => x.PackageRepositories).Return(repos); - // settings.Stub(x => x.Providers).Return(providers); - // settings.Stub(x => x.Help).Return(help); - // settings.Stub(x => x.WebRouting).Return(routing); - // settings.Stub(x => x.Scripting).Return(scripting); + settings.Stub(x => x.Content).Return(content); + settings.Stub(x => x.Security).Return(security); + settings.Stub(x => x.RequestHandler).Return(requestHandler); + settings.Stub(x => x.Templates).Return(templates); + settings.Stub(x => x.Developer).Return(dev); + settings.Stub(x => x.ViewStateMoverModule).Return(viewStateMover); + settings.Stub(x => x.Logging).Return(logging); + settings.Stub(x => x.ScheduledTasks).Return(tasks); + settings.Stub(x => x.DistributedCall).Return(distCall); + settings.Stub(x => x.PackageRepositories).Return(repos); + settings.Stub(x => x.Providers).Return(providers); + settings.Stub(x => x.Help).Return(help); + settings.Stub(x => x.WebRouting).Return(routing); + settings.Stub(x => x.Scripting).Return(scripting); - // return settings; - //} + //Now configure some defaults - the defaults in the config section classes do NOT pertain to the mocked data!! + settings.Content.Stub(x => x.UseLegacyXmlSchema).Return(false); + settings.Content.Stub(x => x.ForceSafeAliases).Return(true); + settings.Content.Stub(x => x.ImageAutoFillProperties).Return(ContentImagingElement.GetDefaultImageAutoFillProperties()); + settings.Content.Stub(x => x.ImageFileTypes).Return(ContentImagingElement.GetDefaultImageFileTypes()); + settings.RequestHandler.Stub(x => x.AddTrailingSlash).Return(true); + settings.RequestHandler.Stub(x => x.UseDomainPrefixes).Return(false); + settings.RequestHandler.Stub(x => x.CharCollection).Return(RequestHandlerElement.GetDefaultCharReplacements()); + settings.Content.Stub(x => x.UmbracoLibraryCacheDuration).Return(1800); + settings.WebRouting.Stub(x => x.UrlProviderMode).Return("Auto"); + - //public static int UmbracoLibraryCacheDuration - //{ - // get { return LegacyUmbracoSettings.UmbracoLibraryCacheDuration; } - // set { LegacyUmbracoSettings.UmbracoLibraryCacheDuration = value; } - //} - - //public static bool UseLegacyXmlSchema - //{ - // get { return LegacyUmbracoSettings.UseLegacyXmlSchema; } - // set { LegacyUmbracoSettings.UseLegacyXmlSchema = value; } - //} - - //public static bool AddTrailingSlash - //{ - // get { return LegacyUmbracoSettings.AddTrailingSlash; } - // set { LegacyUmbracoSettings.AddTrailingSlash = value; } - //} - - //public static bool UseDomainPrefixes - //{ - // get { return LegacyUmbracoSettings.UseDomainPrefixes; } - // set { LegacyUmbracoSettings.UseDomainPrefixes = value; } - //} - - //public static string SettingsFilePath - //{ - // get { return LegacyUmbracoSettings.SettingsFilePath; } - // set { LegacyUmbracoSettings.SettingsFilePath = value; } - //} - - //public static bool ForceSafeAliases - //{ - // get { return LegacyUmbracoSettings.ForceSafeAliases; } - // set { LegacyUmbracoSettings.ForceSafeAliases = value; } - //} + return settings; + } // from appSettings diff --git a/src/Umbraco.Web/Routing/UrlProvider.cs b/src/Umbraco.Web/Routing/UrlProvider.cs index 50c62497ca..9235248d54 100644 --- a/src/Umbraco.Web/Routing/UrlProvider.cs +++ b/src/Umbraco.Web/Routing/UrlProvider.cs @@ -28,11 +28,6 @@ namespace Umbraco.Web.Routing var provider = UrlProviderMode.Auto; Mode = provider; - //if (Enum.TryParse(UmbracoConfiguration.For(), out provider)) - //{ - - //} - if (Enum.TryParse(UmbracoConfiguration.Current.UmbracoSettings.WebRouting.UrlProviderMode, out provider)) { Mode = provider; diff --git a/src/Umbraco.Web/Trees/TreeNode.cs b/src/Umbraco.Web/Trees/TreeNode.cs index 769bef4719..fd62dff815 100644 --- a/src/Umbraco.Web/Trees/TreeNode.cs +++ b/src/Umbraco.Web/Trees/TreeNode.cs @@ -53,6 +53,7 @@ namespace Umbraco.Web.Trees [DataMember(Name = "name")] public string Title { get; set; } + //TODO: This doesn't seem to be used by anything! /// /// Gets or sets the node path. /// diff --git a/src/umbraco.businesslogic/UmbracoSettings.cs b/src/umbraco.businesslogic/UmbracoSettings.cs index 11803dc1d8..5f067477ac 100644 --- a/src/umbraco.businesslogic/UmbracoSettings.cs +++ b/src/umbraco.businesslogic/UmbracoSettings.cs @@ -619,12 +619,11 @@ namespace umbraco private static string _path; /// - /// Gets/sets the settings file path, the setter can be used in unit tests + /// Gets the settings file path /// internal static string SettingsFilePath { get { return _path ?? (_path = GlobalSettings.FullpathToRoot + Path.DirectorySeparatorChar + "config" + Path.DirectorySeparatorChar); } - set { _path = value; } } internal const string Filename = "umbracoSettings.config";