From e29f8bedb5160830279966d4875c8c09085e1640 Mon Sep 17 00:00:00 2001 From: Stephan Date: Tue, 29 Nov 2016 18:59:01 +0100 Subject: [PATCH] Fix tests --- src/Umbraco.Core/CoreRuntime.cs | 1 + .../Repositories/RepositoryBase.cs | 10 ++++-- .../Persistence/UmbracoDatabase.cs | 6 ++-- src/Umbraco.Tests/IO/ShadowFileSystemTests.cs | 2 +- .../Templates/TemplateRepositoryTests.cs | 20 +++++------ src/Umbraco.Tests/TestHelpers/TestObjects.cs | 6 ++-- .../TestHelpers/TestWithApplicationBase.cs | 34 +++++++++++++++++-- src/umbraco.datalayer/SqlHelper.cs | 4 +-- 8 files changed, 58 insertions(+), 25 deletions(-) diff --git a/src/Umbraco.Core/CoreRuntime.cs b/src/Umbraco.Core/CoreRuntime.cs index b8a526be8b..1486d86e44 100644 --- a/src/Umbraco.Core/CoreRuntime.cs +++ b/src/Umbraco.Core/CoreRuntime.cs @@ -259,6 +259,7 @@ namespace Umbraco.Core .Add() .Add() .Add() + .Add() .Add() .Add() .Add() diff --git a/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs index 42e7a837fd..66ad88810d 100644 --- a/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs @@ -88,8 +88,14 @@ namespace Umbraco.Core.Persistence.Repositories get { if (_cachePolicy != null) return _cachePolicy; - if (_hasIdQuery == null) _hasIdQuery = Query.Where(x => x.Id != 0); - var options = new RepositoryCachePolicyOptions(() => PerformCount(_hasIdQuery)); + // fixme - no query for some TEntity?! + //if (_hasIdQuery == null) _hasIdQuery = Query.Where(x => x.Id != 0); + //var options = new RepositoryCachePolicyOptions(() => PerformCount(_hasIdQuery)); + var options = new RepositoryCachePolicyOptions(() => + { + if (_hasIdQuery == null) _hasIdQuery = Query.Where(x => x.Id != 0); + return PerformCount(_hasIdQuery); + }); return _cachePolicy = new DefaultRepositoryCachePolicy(RuntimeCache, options); } set diff --git a/src/Umbraco.Core/Persistence/UmbracoDatabase.cs b/src/Umbraco.Core/Persistence/UmbracoDatabase.cs index e1805a917d..e915b32138 100644 --- a/src/Umbraco.Core/Persistence/UmbracoDatabase.cs +++ b/src/Umbraco.Core/Persistence/UmbracoDatabase.cs @@ -84,10 +84,10 @@ namespace Umbraco.Core.Persistence // INTERNAL FOR UNIT TESTS internal UmbracoDatabase(DbConnection connection, - ISqlSyntaxProvider sqlSyntax, DatabaseType databaseType, ILogger logger) - : base(connection, databaseType, DefaultIsolationLevel) + SqlContext sqlContext, ILogger logger) + : base(connection, sqlContext.DatabaseType, DefaultIsolationLevel) { - _sqlContext = new SqlContext(sqlSyntax, null, databaseType); // beware! no pocoDataFactory! + _sqlContext = sqlContext; _logger = logger; diff --git a/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs b/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs index 080d3e87ef..19f4cc0d9d 100644 --- a/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs +++ b/src/Umbraco.Tests/IO/ShadowFileSystemTests.cs @@ -439,7 +439,7 @@ namespace Umbraco.Tests.IO Assert.IsTrue(fs.FileExists("sub/f5.txt")); scope.Dispose(); Assert.IsTrue(fs.FileExists("sub/f5.txt")); - Assert.IsFalse(Directory.Exists(appdata + "/Shadow/" + id)); + TestHelper.TryAssert(() => Assert.IsFalse(Directory.Exists(appdata + "/Shadow/" + id))); } [Test] diff --git a/src/Umbraco.Tests/Templates/TemplateRepositoryTests.cs b/src/Umbraco.Tests/Templates/TemplateRepositoryTests.cs index 1da24611bc..8ec7e422e8 100644 --- a/src/Umbraco.Tests/Templates/TemplateRepositoryTests.cs +++ b/src/Umbraco.Tests/Templates/TemplateRepositoryTests.cs @@ -1,12 +1,5 @@ using Moq; using NUnit.Framework; -using System; -using System.Collections.Generic; -using System.Data.Common; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using NPoco; using Umbraco.Core; using Umbraco.Core.Cache; using Umbraco.Core.Configuration.UmbracoSettings; @@ -14,10 +7,8 @@ using Umbraco.Core.IO; using Umbraco.Core.Logging; using Umbraco.Core.Models; using Umbraco.Core.Persistence; -using Umbraco.Core.Persistence.Mappers; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.Repositories; -using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Persistence.UnitOfWork; using Umbraco.Tests.TestHelpers; @@ -29,7 +20,7 @@ namespace Umbraco.Tests.Templates private readonly Mock _cacheMock = new Mock(); private readonly Mock _viewFileSystemMock = new Mock(); private readonly Mock _masterpageFileSystemMock = new Mock(); - private readonly Mock _templateConfigMock = new Mock(); + private readonly Mock _templateConfigMock = new Mock(); private TemplateRepository _templateRepository; [SetUp] @@ -38,8 +29,13 @@ namespace Umbraco.Tests.Templates var logger = Mock.Of(); var unitOfWorkMock = new Mock(); - var db = TestObjects.GetUmbracoSqlCeDatabase(logger); - unitOfWorkMock.Setup(x => x.Database).Returns(db); + var database = TestObjects.GetUmbracoSqlCeDatabase(logger); + unitOfWorkMock.Setup(x => x.Database).Returns(database); + + var databaseFactoryMock = new Mock(); + databaseFactoryMock.Setup(x => x.QueryFactory).Returns(Mock.Of()); + var databaseContext = new DatabaseContext(databaseFactoryMock.Object); + unitOfWorkMock.Setup(x => x.DatabaseContext).Returns(databaseContext); _templateRepository = new TemplateRepository(unitOfWorkMock.Object, _cacheMock.Object, logger, _masterpageFileSystemMock.Object, _viewFileSystemMock.Object, _templateConfigMock.Object); diff --git a/src/Umbraco.Tests/TestHelpers/TestObjects.cs b/src/Umbraco.Tests/TestHelpers/TestObjects.cs index 70218ba2ec..3563295176 100644 --- a/src/Umbraco.Tests/TestHelpers/TestObjects.cs +++ b/src/Umbraco.Tests/TestHelpers/TestObjects.cs @@ -54,7 +54,8 @@ namespace Umbraco.Tests.TestHelpers { var syntax = new SqlCeSyntaxProvider(); var connection = GetDbConnection(); - return new UmbracoDatabase(connection, syntax, DatabaseType.SQLCe, logger); + var sqlContext = new SqlContext(syntax, Mock.Of(), DatabaseType.SQLCe); + return new UmbracoDatabase(connection, sqlContext, logger); } /// @@ -68,7 +69,8 @@ namespace Umbraco.Tests.TestHelpers { var syntax = new SqlServerSyntaxProvider(new Lazy(() => null)); // do NOT try to get the server's version! var connection = GetDbConnection(); - return new UmbracoDatabase(connection, syntax, DatabaseType.SqlServer2008, logger); + var sqlContext = new SqlContext(syntax, Mock.Of(), DatabaseType.SqlServer2008); + return new UmbracoDatabase(connection, sqlContext, logger); } public static void RegisterServices(IServiceContainer container) diff --git a/src/Umbraco.Tests/TestHelpers/TestWithApplicationBase.cs b/src/Umbraco.Tests/TestHelpers/TestWithApplicationBase.cs index 19d5a78852..92eaf08a50 100644 --- a/src/Umbraco.Tests/TestHelpers/TestWithApplicationBase.cs +++ b/src/Umbraco.Tests/TestHelpers/TestWithApplicationBase.cs @@ -50,7 +50,7 @@ namespace Umbraco.Tests.TestHelpers protected IMapperCollection Mappers => Container.GetInstance(); - protected IQueryFactory QueryFactory => Container.GetInstance(); + protected IQueryFactory QueryFactory => Container.GetInstance().QueryFactory; /// /// Gets a value indicating whether the plugin manager should be resetted before and after each test. @@ -114,8 +114,36 @@ namespace Umbraco.Tests.TestHelpers Container.RegisterSingleton(); // register application stuff (database factory & context, services...) - Container.RegisterCollectionBuilder() - .Add(f => f.GetInstance().ResolveAssignedMapperTypes()); + Container.RegisterCollectionBuilder() // fixme - see CoreRuntime, should not duplicate core here + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add() + .Add(); Container.RegisterSingleton(_ => new TransientEventMessagesFactory()); Container.RegisterSingleton(); diff --git a/src/umbraco.datalayer/SqlHelper.cs b/src/umbraco.datalayer/SqlHelper.cs index 0799643bcd..488a2d128e 100644 --- a/src/umbraco.datalayer/SqlHelper.cs +++ b/src/umbraco.datalayer/SqlHelper.cs @@ -389,8 +389,8 @@ namespace umbraco.DataLayer var databaseContextProperty = currentType.GetProperty("DatabaseContext", BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static); var databaseContext = databaseContextProperty.GetValue(null); - var factoryField = databaseContextType.GetField("_factory", BindingFlags.Instance | BindingFlags.NonPublic); - Factory = factoryField.GetValue(databaseContext); + var factoryProperty = databaseContextType.GetProperty("DatabaseFactory", BindingFlags.Instance | BindingFlags.NonPublic); + Factory = factoryProperty.GetValue(databaseContext); GetMethod = defaultDatabaseFactoryType.GetMethod("GetDatabase", BindingFlags.Instance | BindingFlags.Public);