starts fixing up all the tests

This commit is contained in:
Shannon
2015-02-23 00:02:12 +01:00
parent 3e18c93cf5
commit c76be66028
21 changed files with 125 additions and 79 deletions

View File

@@ -146,6 +146,10 @@ namespace Umbraco.Core
container.Register<IDatabaseUnitOfWorkProvider, PetaPocoUnitOfWorkProvider>();
container.Register<IUnitOfWorkProvider, FileUnitOfWorkProvider>();
container.Register<BasePublishingStrategy, PublishingStrategy>();
container.Register<IMappingResolver>(factory => new MappingResolver(
factory.GetInstance<IServiceContainer>(),
factory.GetInstance<ILogger>(),
() => PluginManager.ResolveAssignedMapperTypes()));
container.Register<RepositoryFactory>();
container.Register<ServiceContext>(factory => new ServiceContext(
factory.GetInstance<RepositoryFactory>(),
@@ -338,11 +342,6 @@ namespace Umbraco.Core
// .. we'll override this in the WebBootManager
ServerMessengerResolver.Current = new ServerMessengerResolver(Container, typeof (DefaultServerMessenger));
MappingResolver.Current = new MappingResolver(
Container, ProfilingLogger.Logger,
() => PluginManager.ResolveAssignedMapperTypes());
//RepositoryResolver.Current = new RepositoryResolver(
// new RepositoryFactory(ApplicationCache));

View File

@@ -599,7 +599,7 @@ namespace Umbraco.Core
/// This assumes all of the previous checks are done!
/// </summary>
/// <returns></returns>
internal Result UpgradeSchemaAndData()
internal Result UpgradeSchemaAndData(IMigrationResolver migrationResolver)
{
try
{
@@ -626,7 +626,7 @@ namespace Umbraco.Core
? installedVersion
: new Version(GlobalSettings.ConfigurationStatus);
var targetVersion = UmbracoVersion.Current;
var runner = new MigrationRunner(_logger, currentVersion, targetVersion, GlobalSettings.UmbracoMigrationName);
var runner = new MigrationRunner(migrationResolver, _logger, currentVersion, targetVersion, GlobalSettings.UmbracoMigrationName);
var upgraded = runner.Execute(database, DatabaseProvider, SqlSyntax, true);
message = message + "<p>Upgrade completed!</p>";

View File

@@ -13,16 +13,13 @@ namespace Umbraco.Core.Persistence.Mappers
protected BaseMapper(ISqlSyntaxProvider sqlSyntax)
{
_sqlSyntax = sqlSyntax;
Build();
}
internal abstract ConcurrentDictionary<string, DtoMapModel> PropertyInfoCache { get; }
private bool _built = false;
public void Build()
private void Build()
{
if (_built) return;
_built = true;
BuildMap();
}

View File

@@ -42,8 +42,6 @@ namespace Umbraco.Core.Persistence.Mappers
var byAttribute = TryGetMapperByAttribute(type);
if (byAttribute.Success)
{
//ensure it's built
byAttribute.Result.Build();
return byAttribute.Result;
}
throw new Exception("Invalid Type: A Mapper could not be resolved based on the passed in Type");
@@ -67,9 +65,6 @@ namespace Umbraco.Core.Persistence.Mappers
return Attempt<BaseMapper>.Fail();
}
//ensure it's built
mapper.Build();
return Attempt<BaseMapper>.Succeed(mapper);
}

View File

@@ -0,0 +1,12 @@
using System.Collections.Generic;
namespace Umbraco.Core.Persistence.Migrations
{
public interface IMigrationResolver
{
/// <summary>
/// Gets the migrations
/// </summary>
IEnumerable<IMigration> Migrations { get; }
}
}

View File

@@ -9,7 +9,7 @@ namespace Umbraco.Core.Persistence.Migrations
/// <summary>
/// A resolver to return all IMigrations
/// </summary>
internal class MigrationResolver : ContainerLazyManyObjectsResolver<MigrationResolver, IMigration>
internal class MigrationResolver : ContainerLazyManyObjectsResolver<MigrationResolver, IMigration>, IMigrationResolver
{
public MigrationResolver(IServiceContainer container, ILogger logger, Func<IEnumerable<Type>> migrations)

View File

@@ -14,19 +14,21 @@ namespace Umbraco.Core.Persistence.Migrations
/// </summary>
public class MigrationRunner
{
private readonly IMigrationResolver _resolver;
private readonly ILogger _logger;
private readonly Version _currentVersion;
private readonly Version _targetVersion;
private readonly string _productName;
public MigrationRunner(ILogger logger, Version currentVersion, Version targetVersion, string productName)
public MigrationRunner(IMigrationResolver resolver, ILogger logger, Version currentVersion, Version targetVersion, string productName)
{
if (logger == null) throw new ArgumentNullException("logger");
if (currentVersion == null) throw new ArgumentNullException("currentVersion");
if (targetVersion == null) throw new ArgumentNullException("targetVersion");
Mandate.ParameterNotNullOrEmpty(productName, "productName");
_resolver = resolver;
_logger = logger;
_currentVersion = currentVersion;
_targetVersion = targetVersion;
@@ -136,7 +138,7 @@ namespace Umbraco.Core.Persistence.Migrations
protected virtual IMigration[] FindMigrations()
{
//MCH NOTE: Consider adding the ProductName filter to the Resolver so we don't get a bunch of irrelevant migrations
return MigrationResolver.Current.Migrations.ToArray();
return _resolver.Migrations.ToArray();
}
internal MigrationContext InitializeMigrations(

View File

@@ -19,6 +19,11 @@ namespace Umbraco.Core.Persistence.Querying
: base(sqlSyntax)
{
_mapper = mappingResolver.ResolveMapperByType(typeof(T));
if (_mapper == null)
{
throw new InvalidOperationException("Could not resolve a mapper for type " + typeof (T));
}
}
protected override string VisitMemberAccess(MemberExpression m)

View File

@@ -316,6 +316,7 @@
<Compile Include="Persistence\Factories\TaskTypeFactory.cs" />
<Compile Include="Persistence\Mappers\DomainMapper.cs" />
<Compile Include="Persistence\Mappers\IMappingResolver.cs" />
<Compile Include="Persistence\Migrations\IMigrationResolver.cs" />
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenThreeZero\AddPublicAccessTables.cs" />
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenThreeZero\RemoveLanguageLocaleColumn.cs" />
<Compile Include="Persistence\Migrations\Upgrades\TargetVersionSevenThreeZero\RemoveStylesheetDataAndTables.cs" />

View File

@@ -19,7 +19,7 @@ namespace Umbraco.Tests.Migrations
{
// Arrange
var sqlSyntax = new SqlCeSyntaxProvider();
var context = new MigrationContext(DatabaseProviders.SqlServerCE, null, Mock.Of<ILogger>(), sqlSyntax);
var context = new MigrationContext(DatabaseProviders.SqlServerCE, new Database("test", "System.Data.SqlClient"), Mock.Of<ILogger>(), sqlSyntax);
var stub = new DropForeignKeyMigrationStub(sqlSyntax, Mock.Of<ILogger>());
// Act

View File

@@ -17,11 +17,18 @@ namespace Umbraco.Tests.Migrations
[TestFixture]
public class FindingMigrationsTest
{
private MigrationResolver _migrationResolver;
[SetUp]
public void Initialize()
{
MigrationResolver.Current = new MigrationResolver(
new ServiceContainer(),
var container = new ServiceContainer();
container.Register<ILogger>(factory => Mock.Of<ILogger>(), new PerContainerLifetime());
container.Register<ISqlSyntaxProvider>(factory => Mock.Of<ISqlSyntaxProvider>(), new PerContainerLifetime());
_migrationResolver = new MigrationResolver(
container,
Mock.Of<ILogger>(),
() => new List<Type>
{
@@ -38,7 +45,7 @@ namespace Umbraco.Tests.Migrations
[Test]
public void Can_Find_Migrations_With_Target_Version_Six()
{
var foundMigrations = MigrationResolver.Current.Migrations;
var foundMigrations = _migrationResolver.Migrations;
var targetVersion = new Version("6.0.0");
var list = new List<IMigration>();
@@ -56,7 +63,11 @@ namespace Umbraco.Tests.Migrations
Assert.That(list.Count, Is.EqualTo(3));
var context = new MigrationContext(DatabaseProviders.SqlServerCE, null, Mock.Of<ILogger>(), new SqlCeSyntaxProvider());
var context = new MigrationContext(
DatabaseProviders.SqlServerCE,
new Database("test", "System.Data.SqlClient"),
Mock.Of<ILogger>(),
new SqlCeSyntaxProvider());
foreach (var migration1 in list)
{
var migration = (MigrationBase) migration1;
@@ -72,11 +83,5 @@ namespace Umbraco.Tests.Migrations
}
}
[TearDown]
public void TearDown()
{
LoggerResolver.Reset();
MigrationResolver.Reset();
}
}
}

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using Moq;
using NUnit.Framework;
using Umbraco.Core.LightInject;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.Migrations;
@@ -18,7 +19,9 @@ namespace Umbraco.Tests.Migrations
public void Executes_Only_One_Migration_For_Spanning_Multiple_Targets()
{
var sqlSyntax = new SqlCeSyntaxProvider();
var runner = new MigrationRunner(Mock.Of<ILogger>(), new Version(4, 0, 0), new Version(6, 0, 0), "Test");
var runner = new MigrationRunner(
Mock.Of<IMigrationResolver>(),
Mock.Of<ILogger>(), new Version(4, 0, 0), new Version(6, 0, 0), "Test");
var migrations = runner.OrderedUpgradeMigrations(new List<IMigration> { new MultiMigration(sqlSyntax, Mock.Of<ILogger>()) });
@@ -35,7 +38,9 @@ namespace Umbraco.Tests.Migrations
public void Executes_Migration_For_Spanning_One_Target_1()
{
var sqlSyntax = new SqlCeSyntaxProvider();
var runner = new MigrationRunner(Mock.Of<ILogger>(), new Version(4, 0, 0), new Version(5, 0, 0), "Test");
var runner = new MigrationRunner(
Mock.Of<IMigrationResolver>(),
Mock.Of<ILogger>(), new Version(4, 0, 0), new Version(5, 0, 0), "Test");
var migrations = runner.OrderedUpgradeMigrations(new List<IMigration> { new MultiMigration(sqlSyntax, Mock.Of<ILogger>()) });
@@ -52,7 +57,9 @@ namespace Umbraco.Tests.Migrations
public void Executes_Migration_For_Spanning_One_Target_2()
{
var sqlSyntax = new SqlCeSyntaxProvider();
var runner = new MigrationRunner(Mock.Of<ILogger>(), new Version(5, 0, 1), new Version(6, 0, 0), "Test");
var runner = new MigrationRunner(
Mock.Of<IMigrationResolver>(),
Mock.Of<ILogger>(), new Version(5, 0, 1), new Version(6, 0, 0), "Test");
var migrations = runner.OrderedUpgradeMigrations(new List<IMigration> { new MultiMigration(sqlSyntax, Mock.Of<ILogger>()) });

View File

@@ -19,22 +19,27 @@ using GlobalSettings = Umbraco.Core.Configuration.GlobalSettings;
namespace Umbraco.Tests.Migrations
{
[DatabaseTestBehavior(DatabaseBehavior.NoDatabasePerFixture)]
[TestFixture]
public class TargetVersionSixthMigrationsTest : BaseDatabaseFactoryTest
{
/// <summary>Regular expression that finds multiline block comments.</summary>
private static readonly Regex FindComments = new Regex(@"\/\*.*?\*\/", RegexOptions.Singleline | RegexOptions.Compiled);
private MigrationResolver _migrationResolver;
[SetUp]
public override void Initialize()
{
base.Initialize();
TestHelper.InitializeContentDirectories();
Path = TestHelper.CurrentAssemblyDirectory;
AppDomain.CurrentDomain.SetData("DataDirectory", Path);
MigrationResolver.Current = new MigrationResolver(
new ServiceContainer(),
_migrationResolver = new MigrationResolver(
Container,
ProfilingLogger.Logger,
() => new List<Type>
{
@@ -52,14 +57,6 @@ namespace Umbraco.Tests.Migrations
typeof (UpdateCmsPropertyTypeGroupTable)
}.OrderByDescending(x => x.Name));
//This is needed because the PluginManager is creating the migration instances with their default ctors
LoggerResolver.Current = new LoggerResolver(Logger)
{
CanResolveBeforeFrozen = true
};
Resolution.Freeze();
var engine = new SqlCeEngine("Datasource=|DataDirectory|UmbracoPetaPocoTests.sdf;Flush Interval=1;");
engine.CreateDatabase();
}
@@ -83,9 +80,11 @@ namespace Umbraco.Tests.Migrations
var configuredVersion = new Version("4.8.0");
var targetVersion = new Version("6.0.0");
var foundMigrations = MigrationResolver.Current.Migrations;
var foundMigrations = _migrationResolver.Migrations;
var migrationRunner = new MigrationRunner(Logger, configuredVersion, targetVersion, GlobalSettings.UmbracoMigrationName);
var migrationRunner = new MigrationRunner(
_migrationResolver,
Logger, configuredVersion, targetVersion, GlobalSettings.UmbracoMigrationName);
var migrations = migrationRunner.OrderedUpgradeMigrations(foundMigrations).ToList();
var context = new MigrationContext(DatabaseProviders.SqlServerCE, db, Logger, SqlSyntax);
@@ -108,7 +107,6 @@ namespace Umbraco.Tests.Migrations
base.TearDown();
PluginManager.Current = null;
MigrationResolver.Reset();
TestHelper.CleanContentDirectories();

View File

@@ -23,6 +23,8 @@ namespace Umbraco.Tests.Migrations.Upgrades
/// <summary>Regular expression that finds multiline block comments.</summary>
private static readonly Regex FindComments = new Regex(@"\/\*.*?\*\/", RegexOptions.Singleline | RegexOptions.Compiled);
internal MigrationResolver MigrationResolver { get; private set; }
[SetUp]
public virtual void Initialize()
{
@@ -30,9 +32,13 @@ namespace Umbraco.Tests.Migrations.Upgrades
Path = TestHelper.CurrentAssemblyDirectory;
AppDomain.CurrentDomain.SetData("DataDirectory", Path);
MigrationResolver.Current = new MigrationResolver(
new ServiceContainer(),
var container = new ServiceContainer();
container.Register<ILogger>(factory => Mock.Of<ILogger>(), new PerContainerLifetime());
container.Register<ISqlSyntaxProvider>(factory => Mock.Of<ISqlSyntaxProvider>(), new PerContainerLifetime());
MigrationResolver = new MigrationResolver(
container,
Mock.Of<ILogger>(),
() => new List<Type>
{
@@ -50,12 +56,6 @@ namespace Umbraco.Tests.Migrations.Upgrades
typeof (UpdateCmsPropertyTypeGroupTable)
});
LoggerResolver.Current = new LoggerResolver(Mock.Of<ILogger>())
{
CanResolveBeforeFrozen = true
};
Resolution.Freeze();
DatabaseSpecificSetUp();
@@ -85,7 +85,9 @@ namespace Umbraco.Tests.Migrations.Upgrades
}
//Setup the MigrationRunner
var migrationRunner = new MigrationRunner(Mock.Of<ILogger>(), configuredVersion, targetVersion, GlobalSettings.UmbracoMigrationName);
var migrationRunner = new MigrationRunner(
MigrationResolver,
Mock.Of<ILogger>(), configuredVersion, targetVersion, GlobalSettings.UmbracoMigrationName);
bool upgraded = migrationRunner.Execute(db, provider, sqlHelper, true);
Assert.That(upgraded, Is.True);
@@ -105,9 +107,7 @@ namespace Umbraco.Tests.Migrations.Upgrades
public virtual void TearDown()
{
PluginManager.Current = null;
MigrationResolver.Reset();
LoggerResolver.Reset();
TestHelper.CleanContentDirectories();
Path = TestHelper.CurrentAssemblyDirectory;

View File

@@ -28,7 +28,9 @@ namespace Umbraco.Tests.Migrations.Upgrades
var fix = new PublishAfterUpgradeToVersionSixth(sqlSyntax);
//Setup the MigrationRunner
var migrationRunner = new MigrationRunner(Mock.Of<ILogger>(), configuredVersion, targetVersion, GlobalSettings.UmbracoMigrationName);
var migrationRunner = new MigrationRunner(
MigrationResolver,
Mock.Of<ILogger>(), configuredVersion, targetVersion, GlobalSettings.UmbracoMigrationName);
bool upgraded = migrationRunner.Execute(db, provider, sqlSyntax, true);
Assert.That(upgraded, Is.True);

View File

@@ -19,7 +19,7 @@ namespace Umbraco.Tests.Migrations.Upgrades
{
var sqlSyntax = new SqlCeSyntaxProvider();
var migration = new AddIndexToCmsMacroTable(true, sqlSyntax, Mock.Of<ILogger>());
var migrationContext = new MigrationContext(DatabaseProviders.SqlServerCE, null, Mock.Of<ILogger>(),
var migrationContext = new MigrationContext(DatabaseProviders.SqlServerCE, new Database("test", "System.Data.SqlClient"), Mock.Of<ILogger>(),
sqlSyntax);
migration.GetUpExpressions(migrationContext);
@@ -35,7 +35,7 @@ namespace Umbraco.Tests.Migrations.Upgrades
{
var sqlSyntax = new SqlCeSyntaxProvider();
var migration = new AddIndexToCmsMacroPropertyTable(true, sqlSyntax, Mock.Of<ILogger>());
var migrationContext = new MigrationContext(DatabaseProviders.SqlServerCE, null, Mock.Of<ILogger>(), sqlSyntax);
var migrationContext = new MigrationContext(DatabaseProviders.SqlServerCE, new Database("test", "System.Data.SqlClient"), Mock.Of<ILogger>(), sqlSyntax);
migration.GetUpExpressions(migrationContext);
Assert.AreEqual(1, migrationContext.Expressions.Count);

View File

@@ -14,6 +14,7 @@ namespace Umbraco.Tests.Persistence.Mappers
// Act
string column = new ContentMapper(new SqlCeSyntaxProvider()).Map("Id");
// Assert
Assert.That(column, Is.EqualTo("[umbracoNode].[id]"));
}

View File

@@ -104,9 +104,21 @@ namespace Umbraco.Tests.TestHelpers
}
}
protected override void ConfigureContainer()
{
base.ConfigureContainer();
Container.Register<ISqlSyntaxProvider, SqlCeSyntaxProvider>();
}
private MappingResolver _mappingResolver;
protected IMappingResolver MappingResolver
{
get { return Mock.Of<IMappingResolver>(); }
get
{
return _mappingResolver ??
(_mappingResolver = new MappingResolver(Container, Mock.Of<ILogger>(), () => PluginManager.Current.ResolveAssignedMapperTypes()));
}
}
protected virtual ISqlSyntaxProvider SqlSyntax

View File

@@ -65,17 +65,7 @@ namespace Umbraco.Tests.TestHelpers
InitializeMappers();
//register basic stuff that might need to be there for some container resolvers to work, we can
// add more to this in base classes in resolution freezing
Container.Register<ILogger>(factory => Logger);
Container.Register<CacheHelper>(factory => CacheHelper);
Container.Register<ProfilingLogger>(factory => ProfilingLogger);
var settings = SettingsForTests.GetDefault();
Container.Register<IUmbracoSettingsSection>(factory => SettingsForTests.GetDefault(), new PerContainerLifetime());
Container.Register<IContentSection>(factory => settings.Content, new PerContainerLifetime());
Container.Register<IRuntimeCacheProvider>(factory => CacheHelper.RuntimeCache);
Container.Register<IServiceProvider, ActivatorServiceProvider>();
Container.Register<MediaFileSystem>(factory => new MediaFileSystem(Mock.Of<IFileSystem>()));
ConfigureContainer();
FreezeResolution();
@@ -101,6 +91,21 @@ namespace Umbraco.Tests.TestHelpers
}
protected virtual void ConfigureContainer()
{
//register basic stuff that might need to be there for some container resolvers to work, we can
// add more to this in base classes in resolution freezing
Container.Register<ILogger>(factory => Logger);
Container.Register<CacheHelper>(factory => CacheHelper);
Container.Register<ProfilingLogger>(factory => ProfilingLogger);
var settings = SettingsForTests.GetDefault();
Container.Register<IUmbracoSettingsSection>(factory => SettingsForTests.GetDefault(), new PerContainerLifetime());
Container.Register<IContentSection>(factory => settings.Content, new PerContainerLifetime());
Container.Register<IRuntimeCacheProvider>(factory => CacheHelper.RuntimeCache);
Container.Register<IServiceProvider, ActivatorServiceProvider>();
Container.Register<MediaFileSystem>(factory => new MediaFileSystem(Mock.Of<IFileSystem>()));
}
private static readonly object Locker = new object();
private static void InitializeLegacyMappingsForCoreEditors()

View File

@@ -20,10 +20,10 @@ namespace Umbraco.Tests.TestHelpers
get { return _sqlSyntax ?? (_sqlSyntax = new SqlCeSyntaxProvider()); }
}
private IMappingResolver _mappingResolver;
private MappingResolver _mappingResolver;
protected IMappingResolver MappingResolver
{
get { return _mappingResolver ?? (_mappingResolver = Mock.Of<IMappingResolver>()); }
get { return _mappingResolver; }
}
[SetUp]
@@ -34,6 +34,9 @@ namespace Umbraco.Tests.TestHelpers
container.Register<ILogger>(factory => Mock.Of<ILogger>(), new PerContainerLifetime());
container.Register<IProfiler>(factory => Mock.Of<IProfiler>(), new PerContainerLifetime());
_mappingResolver = new MappingResolver(container, Mock.Of<ILogger>(),
() => PluginManager.Current.ResolveAssignedMapperTypes());
var logger = new ProfilingLogger(Mock.Of<ILogger>(), Mock.Of<IProfiler>());
PluginManager.Current = new PluginManager(new ActivatorServiceProvider(), new NullCacheProvider(),
@@ -54,6 +57,7 @@ namespace Umbraco.Tests.TestHelpers
[TearDown]
public virtual void TearDown()
{
Resolution.Reset();
//MappingResolver.Reset();
PluginManager.Current = null;
}

View File

@@ -5,6 +5,7 @@ using System.Linq;
using Umbraco.Core;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence.Migrations;
using Umbraco.Web.Install.Models;
namespace Umbraco.Web.Install.InstallSteps
@@ -30,7 +31,7 @@ namespace Umbraco.Web.Install.InstallSteps
{
LogHelper.Info<DatabaseUpgradeStep>("Running 'Upgrade' service");
var result = _applicationContext.DatabaseContext.UpgradeSchemaAndData();
var result = _applicationContext.DatabaseContext.UpgradeSchemaAndData(MigrationResolver.Current);
if (result.Success == false)
{