From 57d1ff20fd55fb20c4ab8bac59d25e8d290ea81f Mon Sep 17 00:00:00 2001 From: Shannon Date: Sat, 28 Dec 2013 14:35:43 +1100 Subject: [PATCH] Improves test suite performance - this should shed a few minutes off of the test runs. --- .../PublishedContentCacheTests.cs | 4 ++-- .../DynamicDocumentTestsBase.cs | 8 ++++++- .../LegacyExamineBackedMediaTests.cs | 2 +- .../Routing/NiceUrlProviderTests.cs | 22 ++++++++++++++----- .../NiceUrlsProviderWithDomainsTests.cs | 19 +++++++++++----- .../Routing/UrlsWithNestedDomains.cs | 9 +++++++- .../Routing/uQueryGetNodeIdByUrlTests.cs | 18 +++++++++++---- .../BaseUmbracoConfigurationTest.cs | 13 +---------- .../TestHelpers/SettingsForTests.cs | 16 +++++++++----- src/Umbraco.Tests/UriUtilityTests.cs | 2 +- 10 files changed, 75 insertions(+), 38 deletions(-) diff --git a/src/Umbraco.Tests/PublishedCache/PublishedContentCacheTests.cs b/src/Umbraco.Tests/PublishedCache/PublishedContentCacheTests.cs index 20f2604c02..864bf491eb 100644 --- a/src/Umbraco.Tests/PublishedCache/PublishedContentCacheTests.cs +++ b/src/Umbraco.Tests/PublishedCache/PublishedContentCacheTests.cs @@ -78,7 +78,7 @@ namespace Umbraco.Tests.PublishedCache //ensure the StateHelper is using our custom context StateHelper.HttpContext = _httpContextFactory.HttpContext; - var settings = SettingsForTests.GetMockSettings(); + var settings = SettingsForTests.GenerateMockSettings(); var contentMock = Mock.Get(settings.Content); contentMock.Setup(x => x.UseLegacyXmlSchema).Returns(false); SettingsForTests.ConfigureSettings(settings); @@ -100,7 +100,7 @@ namespace Umbraco.Tests.PublishedCache private void SetupForLegacy() { - var settings = SettingsForTests.GetMockSettings(); + var settings = SettingsForTests.GenerateMockSettings(); var contentMock = Mock.Get(settings.Content); contentMock.Setup(x => x.UseLegacyXmlSchema).Returns(true); SettingsForTests.ConfigureSettings(settings); diff --git a/src/Umbraco.Tests/PublishedContent/DynamicDocumentTestsBase.cs b/src/Umbraco.Tests/PublishedContent/DynamicDocumentTestsBase.cs index 85dc2ab269..2bbd383041 100644 --- a/src/Umbraco.Tests/PublishedContent/DynamicDocumentTestsBase.cs +++ b/src/Umbraco.Tests/PublishedContent/DynamicDocumentTestsBase.cs @@ -22,6 +22,8 @@ namespace Umbraco.Tests.PublishedContent get { return DatabaseBehavior.NoDatabasePerFixture; } } + private IUmbracoSettingsSection _umbracoSettings; + public override void Initialize() { // required so we can access property.Value @@ -29,7 +31,11 @@ namespace Umbraco.Tests.PublishedContent base.Initialize(); - var scriptingMock = Mock.Get(UmbracoSettings.Scripting); + //generate new mock settings and assign so we can configure in individual tests + _umbracoSettings = SettingsForTests.GenerateMockSettings(); + SettingsForTests.ConfigureSettings(_umbracoSettings); + + var scriptingMock = Mock.Get(_umbracoSettings.Scripting); scriptingMock.Setup(x => x.DataTypeModelStaticMappings).Returns(new List()); // need to specify a custom callback for unit tests diff --git a/src/Umbraco.Tests/PublishedContent/LegacyExamineBackedMediaTests.cs b/src/Umbraco.Tests/PublishedContent/LegacyExamineBackedMediaTests.cs index 3e2739bc9a..7b0ffb41d7 100644 --- a/src/Umbraco.Tests/PublishedContent/LegacyExamineBackedMediaTests.cs +++ b/src/Umbraco.Tests/PublishedContent/LegacyExamineBackedMediaTests.cs @@ -16,7 +16,7 @@ namespace Umbraco.Tests.PublishedContent { base.TestSetup(); - var settings = SettingsForTests.GetMockSettings(); + var settings = SettingsForTests.GenerateMockSettings(); var contentMock = Mock.Get(settings.Content); contentMock.Setup(x => x.ForceSafeAliases).Returns(true); contentMock.Setup(x => x.UmbracoLibraryCacheDuration).Returns(1800); diff --git a/src/Umbraco.Tests/Routing/NiceUrlProviderTests.cs b/src/Umbraco.Tests/Routing/NiceUrlProviderTests.cs index 08c96c9207..a2ac098cad 100644 --- a/src/Umbraco.Tests/Routing/NiceUrlProviderTests.cs +++ b/src/Umbraco.Tests/Routing/NiceUrlProviderTests.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using Moq; using NUnit.Framework; +using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Tests.TestHelpers; using Umbraco.Web.PublishedCache.XmlPublishedCache; using Umbraco.Web.Routing; @@ -18,6 +19,17 @@ namespace Umbraco.Tests.Routing base.FreezeResolution(); } + private IUmbracoSettingsSection _umbracoSettings; + + public override void Initialize() + { + base.Initialize(); + + //generate new mock settings and assign so we can configure in individual tests + _umbracoSettings = SettingsForTests.GenerateMockSettings(); + SettingsForTests.ConfigureSettings(_umbracoSettings); + } + /// /// This checks that when we retreive a NiceUrl for multiple items that there are no issues with cache overlap /// and that they are all cached correctly. @@ -29,7 +41,7 @@ namespace Umbraco.Tests.Routing SettingsForTests.UseDirectoryUrls = true; SettingsForTests.HideTopLevelNodeFromPath = false; - 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 { @@ -93,7 +105,7 @@ namespace Umbraco.Tests.Routing SettingsForTests.UseDirectoryUrls = true; SettingsForTests.HideTopLevelNodeFromPath = false; - var requestMock = Mock.Get(UmbracoSettings.RequestHandler); + var requestMock = Mock.Get(_umbracoSettings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); var result = routingContext.UrlProvider.GetUrl(nodeId); @@ -117,7 +129,7 @@ namespace Umbraco.Tests.Routing SettingsForTests.UseDirectoryUrls = true; SettingsForTests.HideTopLevelNodeFromPath = true; - var requestMock = Mock.Get(UmbracoSettings.RequestHandler); + var requestMock = Mock.Get(_umbracoSettings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); var result = routingContext.UrlProvider.GetUrl(nodeId); @@ -131,7 +143,7 @@ namespace Umbraco.Tests.Routing SettingsForTests.UseDirectoryUrls = true; SettingsForTests.HideTopLevelNodeFromPath = false; - var requestMock = Mock.Get(UmbracoSettings.RequestHandler); + var requestMock = Mock.Get(_umbracoSettings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); Assert.AreEqual("/home/sub1/custom-sub-1/", routingContext.UrlProvider.GetUrl(1177)); @@ -153,7 +165,7 @@ namespace Umbraco.Tests.Routing SettingsForTests.HideTopLevelNodeFromPath = false; //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("#", routingContext.UrlProvider.GetUrl(999999)); diff --git a/src/Umbraco.Tests/Routing/NiceUrlsProviderWithDomainsTests.cs b/src/Umbraco.Tests/Routing/NiceUrlsProviderWithDomainsTests.cs index fdc395e0cf..a64f397c2c 100644 --- a/src/Umbraco.Tests/Routing/NiceUrlsProviderWithDomainsTests.cs +++ b/src/Umbraco.Tests/Routing/NiceUrlsProviderWithDomainsTests.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using Moq; using NUnit.Framework; +using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Tests.TestHelpers; using Umbraco.Web.PublishedCache.XmlPublishedCache; using Umbraco.Web.Routing; @@ -18,10 +19,16 @@ namespace Umbraco.Tests.Routing { base.Initialize(); + //generate new mock settings and assign so we can configure in individual tests + _umbracoSettings = SettingsForTests.GenerateMockSettings(); + SettingsForTests.ConfigureSettings(_umbracoSettings); + // ensure we can create them although the content is not in the database TestHelper.DropForeignKeys("umbracoDomains"); } + private IUmbracoSettingsSection _umbracoSettings; + protected override DatabaseBehavior DatabaseTestBehavior { get { return DatabaseBehavior.NewSchemaPerFixture; } @@ -202,7 +209,7 @@ namespace Umbraco.Tests.Routing SettingsForTests.UseDirectoryUrls = true; SettingsForTests.HideTopLevelNodeFromPath = false; // ignored w/domains - var requestMock = Mock.Get(UmbracoSettings.RequestHandler); + var requestMock = Mock.Get(_umbracoSettings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); InitializeLanguagesAndDomains(); @@ -232,7 +239,7 @@ namespace Umbraco.Tests.Routing SettingsForTests.UseDirectoryUrls = true; SettingsForTests.HideTopLevelNodeFromPath = false; // ignored w/domains - var requestMock = Mock.Get(UmbracoSettings.RequestHandler); + var requestMock = Mock.Get(_umbracoSettings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); InitializeLanguagesAndDomains(); @@ -254,7 +261,7 @@ namespace Umbraco.Tests.Routing SettingsForTests.UseDirectoryUrls = true; SettingsForTests.HideTopLevelNodeFromPath = false; // ignored w/domains - var requestMock = Mock.Get(UmbracoSettings.RequestHandler); + var requestMock = Mock.Get(_umbracoSettings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); InitializeLanguagesAndDomains(); @@ -282,7 +289,7 @@ namespace Umbraco.Tests.Routing SettingsForTests.UseDirectoryUrls = true; SettingsForTests.HideTopLevelNodeFromPath = false; // ignored w/domains - var requestMock = Mock.Get(UmbracoSettings.RequestHandler); + var requestMock = Mock.Get(_umbracoSettings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); InitializeLanguagesAndDomains(); @@ -300,7 +307,7 @@ namespace Umbraco.Tests.Routing SettingsForTests.UseDirectoryUrls = true; SettingsForTests.HideTopLevelNodeFromPath = false; // ignored w/domains - var requestMock = Mock.Get(UmbracoSettings.RequestHandler); + var requestMock = Mock.Get(_umbracoSettings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); InitializeLanguagesAndDomains(); @@ -367,7 +374,7 @@ namespace Umbraco.Tests.Routing SetDomains4(); //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("/en/1001-1-1/", routingContext.UrlProvider.GetUrl(100111)); diff --git a/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs b/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs index dafb27a2b5..9e45371de2 100644 --- a/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs +++ b/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs @@ -2,6 +2,7 @@ using System.Linq; using Moq; using NUnit.Framework; +using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Tests.TestHelpers; using Umbraco.Web.PublishedCache.XmlPublishedCache; using umbraco.cms.businesslogic.web; @@ -23,7 +24,7 @@ namespace Umbraco.Tests.Routing { SettingsForTests.UseDirectoryUrls = true; SettingsForTests.HideTopLevelNodeFromPath = false; // ignored w/domains - var requestMock = Mock.Get(UmbracoSettings.RequestHandler); + var requestMock = Mock.Get(_umbracoSettings.RequestHandler); requestMock.Setup(x => x.UseDomainPrefixes).Returns(true); InitializeLanguagesAndDomains(); @@ -65,12 +66,18 @@ namespace Umbraco.Tests.Routing //Assert.AreEqual("http://domain1.com/1001-1/1001-1-1", routingContext.NiceUrlProvider.GetNiceUrl(100111, true)); // bad } + private IUmbracoSettingsSection _umbracoSettings; + public override void Initialize() { base.Initialize(); // ensure we can create them although the content is not in the database TestHelper.DropForeignKeys("umbracoDomains"); + + //generate new mock settings and assign so we can configure in individual tests + _umbracoSettings = SettingsForTests.GenerateMockSettings(); + SettingsForTests.ConfigureSettings(_umbracoSettings); } protected override void FreezeResolution() diff --git a/src/Umbraco.Tests/Routing/uQueryGetNodeIdByUrlTests.cs b/src/Umbraco.Tests/Routing/uQueryGetNodeIdByUrlTests.cs index 375964c00d..3d6d402642 100644 --- a/src/Umbraco.Tests/Routing/uQueryGetNodeIdByUrlTests.cs +++ b/src/Umbraco.Tests/Routing/uQueryGetNodeIdByUrlTests.cs @@ -1,5 +1,6 @@ using Moq; using NUnit.Framework; +using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Stubs; using Umbraco.Web.Routing; @@ -11,6 +12,9 @@ namespace Umbraco.Tests.Routing [TestFixture] public class uQueryGetNodeIdByUrlTests : BaseRoutingTest { + + private IUmbracoSettingsSection _umbracoSettings; + public override void Initialize() { base.Initialize(); @@ -36,6 +40,10 @@ namespace Umbraco.Tests.Routing ////assign the routing context back to the umbraco context //umbracoContext.RoutingContext = routingContext; Umbraco.Web.UmbracoContext.Current = routingContext.UmbracoContext; + + //generate new mock settings and assign so we can configure in individual tests + _umbracoSettings = SettingsForTests.GenerateMockSettings(); + SettingsForTests.ConfigureSettings(_umbracoSettings); } public override void TearDown() @@ -57,9 +65,10 @@ namespace Umbraco.Tests.Routing { SettingsForTests.UseDirectoryUrls = true; SettingsForTests.HideTopLevelNodeFromPath = false; - var requestMock = Mock.Get(UmbracoSettings.RequestHandler); - requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); + var requestMock = Mock.Get(_umbracoSettings.RequestHandler); + requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); + Assert.AreEqual(nodeId, global::umbraco.uQuery.GetNodeIdByUrl("http://example.com" + url)); } @@ -76,9 +85,10 @@ namespace Umbraco.Tests.Routing { SettingsForTests.UseDirectoryUrls = true; SettingsForTests.HideTopLevelNodeFromPath = false; - var requestMock = Mock.Get(UmbracoSettings.RequestHandler); - requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); + var requestMock = Mock.Get(_umbracoSettings.RequestHandler); + requestMock.Setup(x => x.UseDomainPrefixes).Returns(false); + Assert.AreEqual(nodeId, global::umbraco.uQuery.GetNodeIdByUrl(url)); } } diff --git a/src/Umbraco.Tests/TestHelpers/BaseUmbracoConfigurationTest.cs b/src/Umbraco.Tests/TestHelpers/BaseUmbracoConfigurationTest.cs index 64769511b0..d1596e8ff3 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseUmbracoConfigurationTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseUmbracoConfigurationTest.cs @@ -19,16 +19,7 @@ namespace Umbraco.Tests.TestHelpers [SetUp] public virtual void Initialize() { - using (DisposableTimer.TraceDuration < BaseUmbracoConfigurationTest>("init")) - { - //mock the Umbraco settings that we need - 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; - } - + SettingsForTests.Reset(); } [TearDown] @@ -37,7 +28,5 @@ namespace Umbraco.Tests.TestHelpers //reset settings SettingsForTests.Reset(); } - - protected virtual IUmbracoSettingsSection UmbracoSettings { get; private set; } } } \ No newline at end of file diff --git a/src/Umbraco.Tests/TestHelpers/SettingsForTests.cs b/src/Umbraco.Tests/TestHelpers/SettingsForTests.cs index 4e5249b194..cdfc28c55c 100644 --- a/src/Umbraco.Tests/TestHelpers/SettingsForTests.cs +++ b/src/Umbraco.Tests/TestHelpers/SettingsForTests.cs @@ -25,7 +25,7 @@ namespace Umbraco.Tests.TestHelpers /// Returns generated settings which can be stubbed to return whatever values necessary /// /// - public static IUmbracoSettingsSection GetMockSettings() + public static IUmbracoSettingsSection GenerateMockSettings() { var settings = new Mock(); @@ -157,14 +157,20 @@ namespace Umbraco.Tests.TestHelpers ConfigureSettings(GetDefault()); } + private static IUmbracoSettingsSection _defaultSettings; + internal static IUmbracoSettingsSection GetDefault() { - var config = new FileInfo(TestHelper.MapPathForTest("~/Configurations/UmbracoSettings/web.config")); + 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); + var fileMap = new ExeConfigurationFileMap() { ExeConfigFilename = config.FullName }; + var configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); + _defaultSettings = configuration.GetSection("umbracoConfiguration/defaultSettings") as UmbracoSettingsSection; + } - return configuration.GetSection("umbracoConfiguration/defaultSettings") as UmbracoSettingsSection; + return _defaultSettings; } } } diff --git a/src/Umbraco.Tests/UriUtilityTests.cs b/src/Umbraco.Tests/UriUtilityTests.cs index 895ee247e8..835f004948 100644 --- a/src/Umbraco.Tests/UriUtilityTests.cs +++ b/src/Umbraco.Tests/UriUtilityTests.cs @@ -85,7 +85,7 @@ namespace Umbraco.Tests { ConfigurationManager.AppSettings.Set("umbracoUseDirectoryUrls", directoryUrls ? "true" : "false"); - var settings = SettingsForTests.GetMockSettings(); + var settings = SettingsForTests.GenerateMockSettings(); var requestMock = Mock.Get(settings.RequestHandler); requestMock.Setup(x => x.AddTrailingSlash).Returns(trailingSlash); SettingsForTests.ConfigureSettings(settings);