From 2b750843c58b5bb600fa0d860f337359826bb93a Mon Sep 17 00:00:00 2001 From: Shannon Deminick Date: Fri, 15 Mar 2013 11:28:05 +0600 Subject: [PATCH] Fixed up base web test, removes RequiresDbSetup in place of new database behavior - NoDatabasePerFixture. Fixed issue with another test... no idea how it didn't show up failing before. Fixes issue with string extensions and an infinite loop when the string to strip is empty/null. --- src/Umbraco.Core/StringExtensions.cs | 4 +++ src/Umbraco.Tests/BusinessLogic/BaseTest.cs | 3 ++ src/Umbraco.Tests/GlobalSettingsTests.cs | 8 ++--- src/Umbraco.Tests/LibraryTests.cs | 8 ++--- .../DynamicDocumentTestsBase.cs | 8 ++--- .../PublishedContent/DynamicNodeTests.cs | 9 ++---- .../PublishedContent/PublishedContentTests.cs | 8 ++--- .../StronglyTypedQueryTests.cs | 8 ++--- .../Routing/ContentFinderByAliasTests.cs | 4 +-- .../ContentFinderByAliasWithDomainsTests.cs | 4 +-- .../Routing/ContentFinderByIdTests.cs | 8 ++--- .../Routing/ContentFinderByNiceUrlTests.cs | 8 ++--- .../ContentFinderByPageIdQueryTests.cs | 8 ++--- .../Routing/RenderRouteHandlerTests.cs | 5 +++ .../Surface/PluginControllerAreaTests.cs | 8 ++--- .../TestHelpers/BaseDatabaseFactoryTest.cs | 31 +++++++++++-------- src/Umbraco.Tests/TestHelpers/BaseWebTest.cs | 14 --------- ...{DbInitBehavior.cs => DatabaseBehavior.cs} | 7 ++++- src/Umbraco.Tests/Umbraco.Tests.csproj | 2 +- 19 files changed, 79 insertions(+), 76 deletions(-) rename src/Umbraco.Tests/TestHelpers/{DbInitBehavior.cs => DatabaseBehavior.cs} (81%) diff --git a/src/Umbraco.Core/StringExtensions.cs b/src/Umbraco.Core/StringExtensions.cs index d93ec84ff0..9a56fe87b0 100644 --- a/src/Umbraco.Core/StringExtensions.cs +++ b/src/Umbraco.Core/StringExtensions.cs @@ -188,6 +188,8 @@ namespace Umbraco.Core public static string TrimEnd(this string value, string forRemoving) { if (string.IsNullOrEmpty(value)) return value; + if (string.IsNullOrEmpty(forRemoving)) return value; + while (value.EndsWith(forRemoving, StringComparison.InvariantCultureIgnoreCase)) { value = value.Remove(value.LastIndexOf(forRemoving, StringComparison.InvariantCultureIgnoreCase)); @@ -198,6 +200,8 @@ namespace Umbraco.Core public static string TrimStart(this string value, string forRemoving) { if (string.IsNullOrEmpty(value)) return value; + if (string.IsNullOrEmpty(forRemoving)) return value; + while (value.StartsWith(forRemoving, StringComparison.InvariantCultureIgnoreCase)) { value = value.Substring(forRemoving.Length); diff --git a/src/Umbraco.Tests/BusinessLogic/BaseTest.cs b/src/Umbraco.Tests/BusinessLogic/BaseTest.cs index 06c62a9de2..ad727d1df7 100644 --- a/src/Umbraco.Tests/BusinessLogic/BaseTest.cs +++ b/src/Umbraco.Tests/BusinessLogic/BaseTest.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Configuration; using NUnit.Framework; using SqlCE4Umbraco; +using Umbraco.Core; using Umbraco.Tests.TestHelpers; using umbraco.BusinessLogic; using umbraco.DataLayer; @@ -22,6 +23,7 @@ namespace Umbraco.Tests.BusinessLogic { ClearDatabase(); ConfigurationManager.AppSettings.Set(Core.Configuration.GlobalSettings.UmbracoConnectionName, ""); + ApplicationContext.Current.DisposeIfDisposable(); } /// @@ -30,6 +32,7 @@ namespace Umbraco.Tests.BusinessLogic [SetUp] public void Initialize() { + ApplicationContext.Current = new ApplicationContext(){IsReady = true}; InitializeDatabase(); InitializeApps(); InitializeAppConfigFile(); diff --git a/src/Umbraco.Tests/GlobalSettingsTests.cs b/src/Umbraco.Tests/GlobalSettingsTests.cs index 6ea6b93e38..0c86a20a77 100644 --- a/src/Umbraco.Tests/GlobalSettingsTests.cs +++ b/src/Umbraco.Tests/GlobalSettingsTests.cs @@ -11,10 +11,10 @@ namespace Umbraco.Tests [TestFixture] public class GlobalSettingsTests : BaseWebTest { - protected override bool RequiresDbSetup - { - get { return false; } - } + protected override DatabaseBehavior DatabaseTestBehavior + { + get { return DatabaseBehavior.NoDatabasePerFixture; } + } public override void Initialize() { diff --git a/src/Umbraco.Tests/LibraryTests.cs b/src/Umbraco.Tests/LibraryTests.cs index 38ea6da5f1..7174094e5a 100644 --- a/src/Umbraco.Tests/LibraryTests.cs +++ b/src/Umbraco.Tests/LibraryTests.cs @@ -51,10 +51,10 @@ namespace Umbraco.Tests UmbracoContext.Current = null; } - protected override bool RequiresDbSetup - { - get { return false; } - } + protected override DatabaseBehavior DatabaseTestBehavior + { + get { return DatabaseBehavior.NoDatabasePerFixture; } + } [Test] public void Get_Item_User_Property() diff --git a/src/Umbraco.Tests/PublishedContent/DynamicDocumentTestsBase.cs b/src/Umbraco.Tests/PublishedContent/DynamicDocumentTestsBase.cs index 867e574abd..897c01cf70 100644 --- a/src/Umbraco.Tests/PublishedContent/DynamicDocumentTestsBase.cs +++ b/src/Umbraco.Tests/PublishedContent/DynamicDocumentTestsBase.cs @@ -24,10 +24,10 @@ namespace Umbraco.Tests.PublishedContent } - protected override bool RequiresDbSetup - { - get { return false; } - } + protected override DatabaseBehavior DatabaseTestBehavior + { + get { return DatabaseBehavior.NoDatabasePerFixture; } + } protected override string GetXmlContent(int templateId) { diff --git a/src/Umbraco.Tests/PublishedContent/DynamicNodeTests.cs b/src/Umbraco.Tests/PublishedContent/DynamicNodeTests.cs index 2d7e6aa69d..2540c4bf53 100644 --- a/src/Umbraco.Tests/PublishedContent/DynamicNodeTests.cs +++ b/src/Umbraco.Tests/PublishedContent/DynamicNodeTests.cs @@ -15,17 +15,12 @@ namespace Umbraco.Tests.PublishedContent [TestFixture] public class DynamicNodeTests : DynamicDocumentTestsBase { - protected override bool RequiresDbSetup - { - get { return true; } - } - /// /// We only need a new schema per fixture... speeds up testing /// - protected override DbInitBehavior DatabaseTestBehavior + protected override DatabaseBehavior DatabaseTestBehavior { - get { return DbInitBehavior.NewSchemaPerFixture; } + get { return DatabaseBehavior.NewSchemaPerFixture; } } public override void Initialize() diff --git a/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs index 50b8f7d39b..cfce19ecd1 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs @@ -17,10 +17,10 @@ namespace Umbraco.Tests.PublishedContent [TestFixture] public class PublishedContentTests : PublishedContentTestBase { - protected override bool RequiresDbSetup - { - get { return false; } - } + protected override DatabaseBehavior DatabaseTestBehavior + { + get { return DatabaseBehavior.NoDatabasePerFixture; } + } protected override string GetXmlContent(int templateId) { diff --git a/src/Umbraco.Tests/PublishedContent/StronglyTypedQueryTests.cs b/src/Umbraco.Tests/PublishedContent/StronglyTypedQueryTests.cs index 40371a653a..a5ae0874fc 100644 --- a/src/Umbraco.Tests/PublishedContent/StronglyTypedQueryTests.cs +++ b/src/Umbraco.Tests/PublishedContent/StronglyTypedQueryTests.cs @@ -24,10 +24,10 @@ namespace Umbraco.Tests.PublishedContent base.TearDown(); } - protected override bool RequiresDbSetup - { - get { return false; } - } + protected override DatabaseBehavior DatabaseTestBehavior + { + get { return DatabaseBehavior.NoDatabasePerFixture; } + } protected override string GetXmlContent(int templateId) { diff --git a/src/Umbraco.Tests/Routing/ContentFinderByAliasTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByAliasTests.cs index bd3c838e8e..70ca81fcc4 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByAliasTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByAliasTests.cs @@ -8,9 +8,9 @@ namespace Umbraco.Tests.Routing [TestFixture] public class ContentFinderByAliasTests : BaseRoutingTest { - protected override bool RequiresDbSetup + protected override DatabaseBehavior DatabaseTestBehavior { - get { return false; } + get { return DatabaseBehavior.NoDatabasePerFixture; } } [TestCase("/this/is/my/alias", 1001)] diff --git a/src/Umbraco.Tests/Routing/ContentFinderByAliasWithDomainsTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByAliasWithDomainsTests.cs index 4bc57de463..95215333b8 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByAliasWithDomainsTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByAliasWithDomainsTests.cs @@ -20,9 +20,9 @@ namespace Umbraco.Tests.Routing InitializeLanguagesAndDomains(); } - protected override bool RequiresDbSetup + protected override DatabaseBehavior DatabaseTestBehavior { - get { return true; } + get { return DatabaseBehavior.NewSchemaPerFixture; } } void InitializeLanguagesAndDomains() diff --git a/src/Umbraco.Tests/Routing/ContentFinderByIdTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByIdTests.cs index 5a4b51082e..14bf23d0a2 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByIdTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByIdTests.cs @@ -12,10 +12,10 @@ namespace Umbraco.Tests.Routing /// /// We don't need a db for this test, will run faster without one /// - protected override bool RequiresDbSetup - { - get { return false; } - } + protected override DatabaseBehavior DatabaseTestBehavior + { + get { return DatabaseBehavior.NoDatabasePerFixture; } + } [TestCase("/1046", 1046)] [TestCase("/1046.aspx", 1046)] diff --git a/src/Umbraco.Tests/Routing/ContentFinderByNiceUrlTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByNiceUrlTests.cs index c8c64aeaf2..bee591e6a1 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByNiceUrlTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByNiceUrlTests.cs @@ -13,10 +13,10 @@ namespace Umbraco.Tests.Routing /// /// We don't need a db for this test, will run faster without one /// - protected override bool RequiresDbSetup - { - get { return false; } - } + protected override DatabaseBehavior DatabaseTestBehavior + { + get { return DatabaseBehavior.NoDatabasePerFixture; } + } [TestCase("/", 1046)] [TestCase("/default.aspx", 1046)] //this one is actually rather important since this is the path that comes through when we are running in pre-IIS 7 for the root document '/' ! diff --git a/src/Umbraco.Tests/Routing/ContentFinderByPageIdQueryTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByPageIdQueryTests.cs index b82e25e020..6852f72fe0 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByPageIdQueryTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByPageIdQueryTests.cs @@ -13,10 +13,10 @@ namespace Umbraco.Tests.Routing /// /// We don't need a db for this test, will run faster without one /// - protected override bool RequiresDbSetup - { - get { return false; } - } + protected override DatabaseBehavior DatabaseTestBehavior + { + get { return DatabaseBehavior.NoDatabasePerFixture; } + } [TestCase("/?umbPageId=1046", 1046)] [TestCase("/?UMBPAGEID=1046", 1046)] diff --git a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs index cbb8b161e9..8bc4f58786 100644 --- a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs +++ b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs @@ -18,6 +18,11 @@ namespace Umbraco.Tests.Routing [TestFixture] public class RenderRouteHandlerTests : BaseRoutingTest { + protected override DatabaseBehavior DatabaseTestBehavior + { + get { return DatabaseBehavior.NewSchemaPerFixture; } + } + public override void Initialize() { base.Initialize(); diff --git a/src/Umbraco.Tests/Surface/PluginControllerAreaTests.cs b/src/Umbraco.Tests/Surface/PluginControllerAreaTests.cs index ce0895e98f..c20723ffd4 100644 --- a/src/Umbraco.Tests/Surface/PluginControllerAreaTests.cs +++ b/src/Umbraco.Tests/Surface/PluginControllerAreaTests.cs @@ -12,10 +12,10 @@ namespace Umbraco.Tests.Surface [TestFixture] public class PluginControllerAreaTests : BaseWebTest { - protected override bool RequiresDbSetup - { - get { return false; } - } + protected override DatabaseBehavior DatabaseTestBehavior + { + get { return DatabaseBehavior.NoDatabasePerFixture; } + } [Test] public void Ensure_Same_Area1() diff --git a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs index cbbfc23bb3..a9209cf9c9 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs @@ -73,9 +73,9 @@ namespace Umbraco.Tests.TestHelpers /// /// The database behavior to use for the test/fixture /// - protected virtual DbInitBehavior DatabaseTestBehavior + protected virtual DatabaseBehavior DatabaseTestBehavior { - get { return DbInitBehavior.NewSchemaPerTest; } + get { return DatabaseBehavior.NewSchemaPerTest; } } /// @@ -83,6 +83,9 @@ namespace Umbraco.Tests.TestHelpers /// protected virtual void CreateDatabase() { + if (DatabaseTestBehavior == DatabaseBehavior.NoDatabasePerFixture) + return; + var path = TestHelper.CurrentAssemblyDirectory; //Get the connectionstring settings from config @@ -99,8 +102,8 @@ namespace Umbraco.Tests.TestHelpers //if this is the first test in the session, always ensure a new db file is created if (_isFirstRunInTestSession || !File.Exists(dbFilePath) - || DatabaseTestBehavior == DbInitBehavior.NewDbFileAndSchemaPerTest - || (_isFirstTestInFixture && DatabaseTestBehavior == DbInitBehavior.NewDbFileAndSchemaPerFixture)) + || DatabaseTestBehavior == DatabaseBehavior.NewDbFileAndSchemaPerTest + || (_isFirstTestInFixture && DatabaseTestBehavior == DatabaseBehavior.NewDbFileAndSchemaPerFixture)) { RemoveDatabaseFile(ex => @@ -120,8 +123,8 @@ namespace Umbraco.Tests.TestHelpers // - NewSchemaPerTest // - _isFirstTestInFixture + DbInitBehavior.NewSchemaPerFixture - else if (DatabaseTestBehavior == DbInitBehavior.NewSchemaPerTest - || (_isFirstTestInFixture && DatabaseTestBehavior == DbInitBehavior.NewSchemaPerFixture)) + else if (DatabaseTestBehavior == DatabaseBehavior.NewSchemaPerTest + || (_isFirstTestInFixture && DatabaseTestBehavior == DatabaseBehavior.NewSchemaPerFixture)) { DatabaseContext.Database.UninstallDatabaseSchema(); } @@ -152,6 +155,9 @@ namespace Umbraco.Tests.TestHelpers /// protected virtual void InitializeDatabase() { + if (DatabaseTestBehavior == DatabaseBehavior.NoDatabasePerFixture) + return; + //create the schema and load default data if: // - is the first test in the session // - NewSchemaPerTest @@ -160,8 +166,8 @@ namespace Umbraco.Tests.TestHelpers // - _isFirstTestInFixture + DbInitBehavior.NewDbFileAndSchemaPerFixture if (_isFirstRunInTestSession - || DatabaseTestBehavior == DbInitBehavior.NewSchemaPerTest - || (_isFirstTestInFixture && DatabaseTestBehavior == DbInitBehavior.NewSchemaPerFixture)) + || DatabaseTestBehavior == DatabaseBehavior.NewSchemaPerTest + || (_isFirstTestInFixture && DatabaseTestBehavior == DatabaseBehavior.NewSchemaPerFixture)) { //Create the umbraco database and its base data DatabaseContext.Database.CreateDatabaseSchema(false); @@ -171,7 +177,7 @@ namespace Umbraco.Tests.TestHelpers [TestFixtureTearDown] public void FixtureTearDown() { - if (DatabaseTestBehavior == DbInitBehavior.NewDbFileAndSchemaPerFixture) + if (DatabaseTestBehavior == DatabaseBehavior.NewDbFileAndSchemaPerFixture) { RemoveDatabaseFile(); } @@ -182,15 +188,14 @@ namespace Umbraco.Tests.TestHelpers { _isFirstTestInFixture = false; //ensure this is false before anything! - if (DatabaseTestBehavior == DbInitBehavior.NewDbFileAndSchemaPerTest) + if (DatabaseTestBehavior == DatabaseBehavior.NewDbFileAndSchemaPerTest) { RemoveDatabaseFile(); } - else if (DatabaseTestBehavior == DbInitBehavior.NewSchemaPerTest) + else if (DatabaseTestBehavior == DatabaseBehavior.NewSchemaPerTest) { DatabaseContext.Database.UninstallDatabaseSchema(); - //TestHelper.ClearDatabase(); - } + } AppDomain.CurrentDomain.SetData("DataDirectory", null); diff --git a/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs b/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs index ae5eb1cc1f..101c5c7ccc 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs @@ -30,26 +30,12 @@ namespace Umbraco.Tests.TestHelpers base.Initialize(); } - protected override void InitializeDatabase() - { - if (RequiresDbSetup) - base.InitializeDatabase(); - } - [TearDown] public override void TearDown() { base.TearDown(); } - /// - /// By default this unit test will create and initialize an umbraco database - /// - protected virtual bool RequiresDbSetup - { - get { return true; } - } - protected override string GetXmlContent(int templateId) { return @" diff --git a/src/Umbraco.Tests/TestHelpers/DbInitBehavior.cs b/src/Umbraco.Tests/TestHelpers/DatabaseBehavior.cs similarity index 81% rename from src/Umbraco.Tests/TestHelpers/DbInitBehavior.cs rename to src/Umbraco.Tests/TestHelpers/DatabaseBehavior.cs index ec9f2419f2..40c5190047 100644 --- a/src/Umbraco.Tests/TestHelpers/DbInitBehavior.cs +++ b/src/Umbraco.Tests/TestHelpers/DatabaseBehavior.cs @@ -3,8 +3,13 @@ /// /// The behavior used to control how the database is handled for test fixtures inheriting from BaseDatabaseFactoryTest /// - public enum DbInitBehavior + public enum DatabaseBehavior { + /// + /// A database is not required whatsoever for the fixture + /// + NoDatabasePerFixture, + /// /// For each test a new database file and schema will be created /// diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 2373fc3f4d..eab3db317e 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -302,7 +302,7 @@ - +