From 217267bf94acc19c3f180905b40a5a49fe15213c Mon Sep 17 00:00:00 2001 From: Shannon Date: Mon, 17 Mar 2014 22:22:44 +1100 Subject: [PATCH] Supercharges integration tests - now running at a great speed. --- src/Umbraco.Core/EnumerableExtensions.cs | 23 +++++--------- src/Umbraco.Core/TypeFinder.cs | 10 ++++++- .../Services/ContentTypeServiceTests.cs | 4 +-- .../TestHelpers/BaseDatabaseFactoryTest.cs | 30 +++++++++++++++---- 4 files changed, 42 insertions(+), 25 deletions(-) diff --git a/src/Umbraco.Core/EnumerableExtensions.cs b/src/Umbraco.Core/EnumerableExtensions.cs index 349c374bb7..525f75e709 100644 --- a/src/Umbraco.Core/EnumerableExtensions.cs +++ b/src/Umbraco.Core/EnumerableExtensions.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text; +using Umbraco.Core.Logging; namespace Umbraco.Core { @@ -14,7 +15,7 @@ namespace Umbraco.Core public static IEnumerable> InGroupsOf(this IEnumerable source, int groupSize) { if (source == null) - throw new NullReferenceException("source"); + throw new NullReferenceException("source"); // enumerate the source only once! return new InGroupsEnumerator(source, groupSize).Groups(); @@ -125,23 +126,13 @@ namespace Umbraco.Core } /// The flatten list. - /// The items. - /// The select child. - /// Item type + /// The items. + /// The select child. + /// Item type /// list of TItem - [SuppressMessage("Microsoft.Design", "CA1006:DoNotNestGenericTypesInMemberSignatures", Justification = "By design")] - public static IEnumerable FlattenList(this IEnumerable items, Func> selectChild) + public static IEnumerable FlattenList(this IEnumerable e, Func> f) { - IEnumerable children = items != null && items.Any() - ? items.SelectMany(selectChild).FlattenList(selectChild) - : Enumerable.Empty(); - - if (items != null) - { - return items.Concat(children); - } - - return null; + return e.SelectMany(c => f(c).FlattenList(f)).Concat(e); } /// diff --git a/src/Umbraco.Core/TypeFinder.cs b/src/Umbraco.Core/TypeFinder.cs index 36a5deff75..14795e146d 100644 --- a/src/Umbraco.Core/TypeFinder.cs +++ b/src/Umbraco.Core/TypeFinder.cs @@ -290,7 +290,15 @@ namespace Umbraco.Core "HtmlAgilityPack.", "TidyNet.", "ICSharpCode.", - "CookComputing." + "CookComputing.", + "AutoMapper,", + "HtmlAgilityPack,", + "itextsharp,", + "MiniProfiler,", + "Moq,", + "nunit.framework,", + "TidyNet,", + "WebDriver," }; /// diff --git a/src/Umbraco.Tests/Services/ContentTypeServiceTests.cs b/src/Umbraco.Tests/Services/ContentTypeServiceTests.cs index 9ac45cfc61..467bb35250 100644 --- a/src/Umbraco.Tests/Services/ContentTypeServiceTests.cs +++ b/src/Umbraco.Tests/Services/ContentTypeServiceTests.cs @@ -394,7 +394,7 @@ namespace Umbraco.Tests.Services return contentType; } - private IEnumerable CreateContentTypeHierarchy() + private IContentType[] CreateContentTypeHierarchy() { //create the master type var masterContentType = MockedContentTypes.CreateSimpleContentType("masterContentType", "MasterContentType"); @@ -413,7 +413,7 @@ namespace Umbraco.Tests.Services list.Add(contentType); } - return list; + return list.ToArray(); } } } \ No newline at end of file diff --git a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs index 582e5ad94f..05d3198b80 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs @@ -49,6 +49,10 @@ namespace Umbraco.Tests.TestHelpers private ApplicationContext _appContext; + private string _dbPath; + //used to store (globally) the pre-built db with schema and initial data + private static Byte[] _dbBytes; + [SetUp] public override void Initialize() { @@ -135,7 +139,7 @@ namespace Umbraco.Tests.TestHelpers Core.Configuration.GlobalSettings.UmbracoConnectionName, GetDbConnectionString()); - string dbFilePath = string.Concat(path, "\\UmbracoPetaPocoTests.sdf"); + _dbPath = string.Concat(path, "\\UmbracoPetaPocoTests.sdf"); //create a new database file if // - is the first test in the session @@ -144,7 +148,7 @@ namespace Umbraco.Tests.TestHelpers // - _isFirstTestInFixture + DbInitBehavior.NewDbFileAndSchemaPerFixture //if this is the first test in the session, always ensure a new db file is created - if (_isFirstRunInTestSession || !File.Exists(dbFilePath) + if (_isFirstRunInTestSession || File.Exists(_dbPath) == false || DatabaseTestBehavior == DatabaseBehavior.NewDbFileAndSchemaPerTest || (_isFirstTestInFixture && DatabaseTestBehavior == DatabaseBehavior.NewDbFileAndSchemaPerFixture)) { @@ -163,8 +167,15 @@ namespace Umbraco.Tests.TestHelpers //Create the Sql CE database using (DisposableTimer.TraceDuration("Create database file")) { - var engine = new SqlCeEngine(settings.ConnectionString); - engine.CreateDatabase(); + if (_dbBytes != null) + { + File.WriteAllBytes(_dbPath, _dbBytes); + } + else + { + var engine = new SqlCeEngine(settings.ConnectionString); + engine.CreateDatabase(); + } } } @@ -210,12 +221,19 @@ namespace Umbraco.Tests.TestHelpers // - NewDbFileAndSchemaPerTest // - _isFirstTestInFixture + DbInitBehavior.NewDbFileAndSchemaPerFixture - if (_isFirstRunInTestSession + if (_dbBytes == null && + (_isFirstRunInTestSession || DatabaseTestBehavior == DatabaseBehavior.NewDbFileAndSchemaPerTest - || (_isFirstTestInFixture && DatabaseTestBehavior == DatabaseBehavior.NewDbFileAndSchemaPerFixture)) + || (_isFirstTestInFixture && DatabaseTestBehavior == DatabaseBehavior.NewDbFileAndSchemaPerFixture))) { //Create the umbraco database and its base data DatabaseContext.Database.CreateDatabaseSchema(false); + + //close the connections, we're gonna read this baby in as a byte array so we don't have to re-initialize the + // damn db for each test + CloseDbConnections(); + + _dbBytes = File.ReadAllBytes(_dbPath); } }