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 8df446ed7a..eb2443cea9 100644 --- a/src/Umbraco.Core/TypeFinder.cs +++ b/src/Umbraco.Core/TypeFinder.cs @@ -294,9 +294,14 @@ namespace Umbraco.Core "AutoMapper,", "AutoMapper.", "AzureDirectory,", - "itextsharp,", - "Lucene.Net,", + "itextsharp,", "UrlRewritingNet." + "HtmlAgilityPack,", + "MiniProfiler,", + "Moq,", + "nunit.framework,", + "TidyNet,", + "WebDriver," }; /// diff --git a/src/Umbraco.Tests/Services/ContentTypeServiceTests.cs b/src/Umbraco.Tests/Services/ContentTypeServiceTests.cs index 4932431587..7a6da7653e 100644 --- a/src/Umbraco.Tests/Services/ContentTypeServiceTests.cs +++ b/src/Umbraco.Tests/Services/ContentTypeServiceTests.cs @@ -10,7 +10,7 @@ using Umbraco.Tests.TestHelpers.Entities; namespace Umbraco.Tests.Services { - [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerFixture)] + [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerTest)] [TestFixture, RequiresSTA] public class ContentTypeServiceTests : BaseServiceTest { @@ -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/Services/DataTypeServiceTests.cs b/src/Umbraco.Tests/Services/DataTypeServiceTests.cs index c93949c3ac..4ba5a05688 100644 --- a/src/Umbraco.Tests/Services/DataTypeServiceTests.cs +++ b/src/Umbraco.Tests/Services/DataTypeServiceTests.cs @@ -11,7 +11,7 @@ namespace Umbraco.Tests.Services /// /// Tests covering the DataTypeService /// - [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerFixture)] + [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerTest)] [TestFixture, RequiresSTA] public class DataTypeServiceTests : BaseServiceTest { diff --git a/src/Umbraco.Tests/Services/MediaServiceTests.cs b/src/Umbraco.Tests/Services/MediaServiceTests.cs index d6a3fe82c9..10dfc6790b 100644 --- a/src/Umbraco.Tests/Services/MediaServiceTests.cs +++ b/src/Umbraco.Tests/Services/MediaServiceTests.cs @@ -9,7 +9,7 @@ using Umbraco.Tests.TestHelpers.Entities; namespace Umbraco.Tests.Services { - [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerFixture)] + [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerTest)] [TestFixture, RequiresSTA] public class MediaServiceTests : BaseServiceTest { diff --git a/src/Umbraco.Tests/Services/MemberServiceTests.cs b/src/Umbraco.Tests/Services/MemberServiceTests.cs index 76ec157313..8ba2cea5c0 100644 --- a/src/Umbraco.Tests/Services/MemberServiceTests.cs +++ b/src/Umbraco.Tests/Services/MemberServiceTests.cs @@ -13,7 +13,7 @@ using Umbraco.Tests.TestHelpers.Entities; namespace Umbraco.Tests.Services { - [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerFixture)] + [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerTest)] [TestFixture, RequiresSTA] public class MemberServiceTests : BaseServiceTest { diff --git a/src/Umbraco.Tests/Services/MemberTypeServiceTests.cs b/src/Umbraco.Tests/Services/MemberTypeServiceTests.cs index e4b891ac2e..3335d298b8 100644 --- a/src/Umbraco.Tests/Services/MemberTypeServiceTests.cs +++ b/src/Umbraco.Tests/Services/MemberTypeServiceTests.cs @@ -11,7 +11,7 @@ using Umbraco.Tests.TestHelpers.Entities; namespace Umbraco.Tests.Services { - [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerFixture)] + [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerTest)] [TestFixture, RequiresSTA] public class MemberTypeServiceTests : BaseServiceTest { diff --git a/src/Umbraco.Tests/Services/PackagingServiceTests.cs b/src/Umbraco.Tests/Services/PackagingServiceTests.cs index db260b650c..6be4d6acbc 100644 --- a/src/Umbraco.Tests/Services/PackagingServiceTests.cs +++ b/src/Umbraco.Tests/Services/PackagingServiceTests.cs @@ -9,7 +9,7 @@ using Umbraco.Tests.TestHelpers; namespace Umbraco.Tests.Services { - [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerFixture)] + [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerTest)] [TestFixture] public class PackagingServiceTests : BaseServiceTest { diff --git a/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs b/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs index c225c23993..6a5930723b 100644 --- a/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs +++ b/src/Umbraco.Tests/Services/ThreadSafetyServiceTest.cs @@ -19,7 +19,7 @@ using umbraco.interfaces; namespace Umbraco.Tests.Services { - [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerFixture)] + [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerTest)] [TestFixture, RequiresSTA] public class ThreadSafetyServiceTest : BaseDatabaseFactoryTest { diff --git a/src/Umbraco.Tests/Services/UserServiceTests.cs b/src/Umbraco.Tests/Services/UserServiceTests.cs index e327c2fbaf..e20fed31b5 100644 --- a/src/Umbraco.Tests/Services/UserServiceTests.cs +++ b/src/Umbraco.Tests/Services/UserServiceTests.cs @@ -18,7 +18,7 @@ namespace Umbraco.Tests.Services /// /// Tests covering the UserService /// - [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerFixture)] + [DatabaseTestBehavior(DatabaseBehavior.NewDbFileAndSchemaPerTest)] [TestFixture, RequiresSTA] public class UserServiceTests : BaseServiceTest { diff --git a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs index e234c140fa..e79db0e4b0 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs @@ -51,6 +51,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() { @@ -137,7 +141,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 @@ -146,7 +150,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)) { @@ -165,8 +169,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(); + } } } @@ -215,12 +226,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); } }