From 56281d64b0bea6ba5d838f7bdd11ed90df4a09df Mon Sep 17 00:00:00 2001 From: Stephan Date: Wed, 30 Jan 2013 14:46:38 -0100 Subject: [PATCH] Tests.Routing - fix tests that were failing due to Models.ITemplate, Resolution, database constraints... --- src/SQLCE4Umbraco/SqlCEHelper.cs | 19 +++++++++++++++++++ src/Umbraco.Tests/Models/ContentXmlTest.cs | 8 ++++++-- src/Umbraco.Tests/Models/MediaXmlTest.cs | 8 ++++++-- .../ContentFinderByNiceUrlAndTemplateTests.cs | 14 ++++++++++---- .../ContentFinderByNiceUrlWithDomainsTests.cs | 6 +++++- .../NiceUrlsProviderWithDomainsTests.cs | 8 ++++++++ .../Routing/RenderRouteHandlerTests.cs | 15 ++++++++++----- .../Routing/UrlsWithNestedDomains.cs | 8 ++++++++ .../TestHelpers/BaseDatabaseFactoryTest.cs | 1 + src/Umbraco.Tests/TestHelpers/BaseWebTest.cs | 2 ++ src/Umbraco.Tests/TestHelpers/TestHelper.cs | 11 +++++++++++ 11 files changed, 86 insertions(+), 14 deletions(-) diff --git a/src/SQLCE4Umbraco/SqlCEHelper.cs b/src/SQLCE4Umbraco/SqlCEHelper.cs index 669aa3ea68..a35f84de82 100644 --- a/src/SQLCE4Umbraco/SqlCEHelper.cs +++ b/src/SQLCE4Umbraco/SqlCEHelper.cs @@ -118,6 +118,25 @@ namespace SqlCE4Umbraco } } + /// + /// Drops all foreign keys on a table. + /// + /// The name of the table. + /// To be used in unit tests. + internal void DropForeignKeys(string table) + { + var constraints = new List(); + using (var reader = ExecuteReader("select constraint_name from information_schema.table_constraints where constraint_type = 'FOREIGN KEY' and table_name = '" + table + "' order by constraint_name")) + { + while (reader.Read()) constraints.Add(reader.GetString("constraint_name").Trim()); + } + foreach (var constraint in constraints) + { + // SQL may need "[dbo].[table]" + ExecuteNonQuery("alter table [" + table + "] drop constraint [" + constraint + "]"); + } + } + /// /// Replaces the data directory with a local path. /// diff --git a/src/Umbraco.Tests/Models/ContentXmlTest.cs b/src/Umbraco.Tests/Models/ContentXmlTest.cs index 38f75bf9c6..18824949ee 100644 --- a/src/Umbraco.Tests/Models/ContentXmlTest.cs +++ b/src/Umbraco.Tests/Models/ContentXmlTest.cs @@ -2,6 +2,7 @@ using System.Xml.Linq; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.ObjectResolution; using Umbraco.Core.Models; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; @@ -16,6 +17,8 @@ namespace Umbraco.Tests.Models [SetUp] public override void Initialize() { + Resolution.Reset(); + //this ensures its reset PluginManager.Current = new PluginManager(); @@ -26,6 +29,7 @@ namespace Umbraco.Tests.Models typeof(tinyMCE3dataType).Assembly }; + DataTypesResolver.Reset(); DataTypesResolver.Current = new DataTypesResolver( () => PluginManager.Current.ResolveDataTypes()); @@ -35,10 +39,10 @@ namespace Umbraco.Tests.Models [TearDown] public override void TearDown() { + base.TearDown(); + //reset the app context DataTypesResolver.Reset(); - - base.TearDown(); } [Test] public void Can_Generate_Xml_Representation_Of_Content() diff --git a/src/Umbraco.Tests/Models/MediaXmlTest.cs b/src/Umbraco.Tests/Models/MediaXmlTest.cs index ff7756b804..a76cb30cfa 100644 --- a/src/Umbraco.Tests/Models/MediaXmlTest.cs +++ b/src/Umbraco.Tests/Models/MediaXmlTest.cs @@ -2,6 +2,7 @@ using System.Xml.Linq; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.ObjectResolution; using Umbraco.Core.Models; using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers.Entities; @@ -16,6 +17,8 @@ namespace Umbraco.Tests.Models [SetUp] public override void Initialize() { + Resolution.Reset(); + //this ensures its reset PluginManager.Current = new PluginManager(); @@ -26,6 +29,7 @@ namespace Umbraco.Tests.Models typeof(tinyMCE3dataType).Assembly }; + DataTypesResolver.Reset(); DataTypesResolver.Current = new DataTypesResolver( () => PluginManager.Current.ResolveDataTypes()); @@ -35,10 +39,10 @@ namespace Umbraco.Tests.Models [TearDown] public override void TearDown() { + base.TearDown(); + //reset the app context DataTypesResolver.Reset(); - - base.TearDown(); } [Test] public void Can_Generate_Xml_Representation_Of_Media() diff --git a/src/Umbraco.Tests/Routing/ContentFinderByNiceUrlAndTemplateTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByNiceUrlAndTemplateTests.cs index 1010d07dbd..aef1f50881 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByNiceUrlAndTemplateTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByNiceUrlAndTemplateTests.cs @@ -15,6 +15,14 @@ namespace Umbraco.Tests.Routing Umbraco.Core.Configuration.UmbracoSettings.UseLegacyXmlSchema = false; } + Template CreateTemplate(string alias) + { + var template = new Template(alias, alias, alias); + template.Content = ""; // else saving throws with a dirty internal error + ApplicationContext.Services.FileService.SaveTemplate(template); + return template; + } + [TestCase("/blah")] [TestCase("/default.aspx/blah")] //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 '/' ! [TestCase("/home/Sub1/blah")] @@ -22,10 +30,8 @@ namespace Umbraco.Tests.Routing [TestCase("/home/Sub1.aspx/blah")] public void Match_Document_By_Url_With_Template(string urlAsString) { - var template = new Template("test"); - ApplicationContext.Services.FileService.SaveTemplate(template); - var altTemplate = new Template("blah"); - ApplicationContext.Services.FileService.SaveTemplate(altTemplate); + var template = CreateTemplate("test"); + var altTemplate = CreateTemplate("blah"); var routingContext = GetRoutingContext(urlAsString, template); var url = routingContext.UmbracoContext.CleanedUmbracoUrl; //very important to use the cleaned up umbraco url var docRequest = new PublishedContentRequest(url, routingContext); diff --git a/src/Umbraco.Tests/Routing/ContentFinderByNiceUrlWithDomainsTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByNiceUrlWithDomainsTests.cs index 0ad0270e18..8ce9febc21 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByNiceUrlWithDomainsTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByNiceUrlWithDomainsTests.cs @@ -17,7 +17,11 @@ namespace Umbraco.Tests.Routing public override void Initialize() { base.Initialize(); - InitializeLanguagesAndDomains(); + + // ensure we can create them although the content is not in the database + TestHelper.DropForeignKeys("umbracoDomains"); + + InitializeLanguagesAndDomains(); Umbraco.Core.Configuration.UmbracoSettings.UseLegacyXmlSchema = false; } diff --git a/src/Umbraco.Tests/Routing/NiceUrlsProviderWithDomainsTests.cs b/src/Umbraco.Tests/Routing/NiceUrlsProviderWithDomainsTests.cs index d6ad9917bb..fbcc4afe75 100644 --- a/src/Umbraco.Tests/Routing/NiceUrlsProviderWithDomainsTests.cs +++ b/src/Umbraco.Tests/Routing/NiceUrlsProviderWithDomainsTests.cs @@ -14,6 +14,14 @@ namespace Umbraco.Tests.Routing [TestFixture] public class NiceUrlsProviderWithDomainsTests : BaseRoutingTest { + public override void Initialize() + { + base.Initialize(); + + // ensure we can create them although the content is not in the database + TestHelper.DropForeignKeys("umbracoDomains"); + } + public override void TearDown() { base.TearDown(); diff --git a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs index ae44930f53..34aa5040f6 100644 --- a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs +++ b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs @@ -16,7 +16,6 @@ namespace Umbraco.Tests.Routing [TestFixture] public class RenderRouteHandlerTests : BaseRoutingTest { - public override void Initialize() { //this ensures its reset @@ -44,14 +43,21 @@ namespace Umbraco.Tests.Routing SurfaceControllerResolver.Reset(); } + Template CreateTemplate(string alias) + { + var template = new Template(alias, alias, alias); + template.Content = ""; // else saving throws with a dirty internal error + ApplicationContext.Services.FileService.SaveTemplate(template); + return template; + } + /// /// Will route to the default controller and action since no custom controller is defined for this node route /// [Test] public void Umbraco_Route_Umbraco_Defined_Controller_Action() { - var template = new Template("homePage"); - ApplicationContext.Current.Services.FileService.SaveTemplate(template); + var template = CreateTemplate("homePage"); var route = RouteTable.Routes["Umbraco_default"]; var routeData = new RouteData() { Route = route }; var routingContext = GetRoutingContext("~/dummy-page", template.Id, routeData); @@ -79,8 +85,7 @@ namespace Umbraco.Tests.Routing [TestCase("homePage")] public void Umbraco_Route_User_Defined_Controller_Action(string templateName) { - var template = new Template(templateName); - ApplicationContext.Current.Services.FileService.SaveTemplate(template); + var template = CreateTemplate(templateName); var route = RouteTable.Routes["Umbraco_default"]; var routeData = new RouteData() {Route = route}; var routingContext = GetRoutingContext("~/dummy-page", template.Id, routeData); diff --git a/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs b/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs index 0ab9c95660..d6f066924a 100644 --- a/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs +++ b/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs @@ -63,6 +63,14 @@ namespace Umbraco.Tests.Routing //Assert.AreEqual("http://domain1.com/1001-1/1001-1-1", routingContext.NiceUrlProvider.GetNiceUrl(100111, true)); // bad } + public override void Initialize() + { + base.Initialize(); + + // ensure we can create them although the content is not in the database + TestHelper.DropForeignKeys("umbracoDomains"); + } + public override void TearDown() { base.TearDown(); diff --git a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs index d3c272204f..c71befe7e2 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs @@ -33,6 +33,7 @@ namespace Umbraco.Tests.TestHelpers public virtual void Initialize() { TestHelper.SetupLog4NetForTests(); + Resolution.Reset(); TestHelper.InitializeContentDirectories(); string path = TestHelper.CurrentAssemblyDirectory; diff --git a/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs b/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs index 2ba6c98f23..3e172e260f 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs @@ -32,6 +32,8 @@ namespace Umbraco.Tests.TestHelpers public virtual void Initialize() { TestHelper.SetupLog4NetForTests(); + Resolution.Reset(); + RepositoryResolver.Reset(); TestHelper.InitializeContentDirectories(); string path = TestHelper.CurrentAssemblyDirectory; diff --git a/src/Umbraco.Tests/TestHelpers/TestHelper.cs b/src/Umbraco.Tests/TestHelpers/TestHelper.cs index 819ccdb68b..6ab161a3b0 100644 --- a/src/Umbraco.Tests/TestHelpers/TestHelper.cs +++ b/src/Umbraco.Tests/TestHelpers/TestHelper.cs @@ -31,6 +31,17 @@ namespace Umbraco.Tests.TestHelpers dataHelper.ClearDatabase(); } + public static void DropForeignKeys(string table) + { + var databaseSettings = ConfigurationManager.ConnectionStrings[Core.Configuration.GlobalSettings.UmbracoConnectionName]; + var dataHelper = DataLayerHelper.CreateSqlHelper(databaseSettings.ConnectionString, false) as SqlCEHelper; + + if (dataHelper == null) + throw new InvalidOperationException("The sql helper for unit tests must be of type SqlCEHelper, check the ensure the connection string used for this test is set to use SQLCE"); + + dataHelper.DropForeignKeys(table); + } + /// /// Initializes a new database ///