diff --git a/src/Umbraco.Core/Models/Content.cs b/src/Umbraco.Core/Models/Content.cs index 60d20ccf35..4dbde74b63 100644 --- a/src/Umbraco.Core/Models/Content.cs +++ b/src/Umbraco.Core/Models/Content.cs @@ -36,6 +36,8 @@ namespace Umbraco.Core.Models /// Collection of properties public Content(int parentId, IContentType contentType, PropertyCollection properties) : base(parentId, contentType, properties) { + Mandate.ParameterNotNull(contentType, "contentType"); + _contentType = contentType; } diff --git a/src/Umbraco.Core/Models/ContentBase.cs b/src/Umbraco.Core/Models/ContentBase.cs index 43dcf69768..1f61bce6cd 100644 --- a/src/Umbraco.Core/Models/ContentBase.cs +++ b/src/Umbraco.Core/Models/ContentBase.cs @@ -27,6 +27,10 @@ namespace Umbraco.Core.Models protected ContentBase(int parentId, IContentTypeComposition contentType, PropertyCollection properties) { + Mandate.ParameterCondition(parentId != 0, "parentId"); + Mandate.ParameterNotNull(contentType, "contentType"); + Mandate.ParameterNotNull(properties, "properties"); + _parentId = parentId; _contentTypeId = int.Parse(contentType.Id.ToString(CultureInfo.InvariantCulture)); ContentTypeBase = contentType; diff --git a/src/Umbraco.Core/Persistence/PetaPocoExtensions.cs b/src/Umbraco.Core/Persistence/PetaPocoExtensions.cs index e13aa756bc..0a76fbbff5 100644 --- a/src/Umbraco.Core/Persistence/PetaPocoExtensions.cs +++ b/src/Umbraco.Core/Persistence/PetaPocoExtensions.cs @@ -35,6 +35,7 @@ namespace Umbraco.Core.Persistence var foreignSql = SyntaxConfig.SqlSyntaxProvider.ToCreateForeignKeyStatements(tableDefinition); var indexSql = SyntaxConfig.SqlSyntaxProvider.ToCreateIndexStatements(tableDefinition); + /* #if DEBUG Console.WriteLine(createSql); Console.WriteLine(createPrimaryKeySql); @@ -47,6 +48,7 @@ namespace Umbraco.Core.Persistence Console.WriteLine(sql); } #endif + */ var tableExist = db.TableExist(tableName); if (overwrite && tableExist) diff --git a/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs index 294bbbdbaa..4b1cda10c4 100644 --- a/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs @@ -38,6 +38,14 @@ namespace Umbraco.Core.Persistence.Repositories get { return _work; } } + /// + /// Internal for testing purposes + /// + internal Guid UnitKey + { + get { return (Guid)_work.Key; } + } + #region IRepository Members /// diff --git a/src/Umbraco.Core/Persistence/RepositoryResolver.cs b/src/Umbraco.Core/Persistence/RepositoryResolver.cs index 5921b90d72..50bd73dfd3 100644 --- a/src/Umbraco.Core/Persistence/RepositoryResolver.cs +++ b/src/Umbraco.Core/Persistence/RepositoryResolver.cs @@ -36,7 +36,7 @@ namespace Umbraco.Core.Persistence if (Repositories.ContainsKey(interfaceShortName)) { repository = (TRepository)Repositories[interfaceShortName]; - if (unitOfWork != null && repository.GetType().IsSubclassOf(typeof(IRepository))) + if (unitOfWork != null && (typeof(IRepository).IsInstanceOfType(repository))) { repository.SetUnitOfWork(unitOfWork); } diff --git a/src/Umbraco.Tests/Persistence/RepositoryResolverTests.cs b/src/Umbraco.Tests/Persistence/RepositoryResolverTests.cs index 5666b0a551..917f8769c8 100644 --- a/src/Umbraco.Tests/Persistence/RepositoryResolverTests.cs +++ b/src/Umbraco.Tests/Persistence/RepositoryResolverTests.cs @@ -190,5 +190,37 @@ namespace Umbraco.Tests.Persistence // Assert Assert.That(repository, Is.Not.Null); } + + [Test] + public void Can_Verify_UOW_In_Repository() + { + // Arrange + var uow = new PetaPocoUnitOfWork(); + + // Act + var repository = RepositoryResolver.ResolveByType(uow); + + // Assert + Assert.That(repository, Is.Not.Null); + Assert.That(uow.Key, Is.EqualTo(((RepositoryBase)repository).UnitKey)); + } + + [Test] + public void Type_Checking() + { + var repositoryType = typeof (IContentRepository); + bool isSubclassOf = repositoryType.IsSubclassOf(typeof(IRepository)); + bool isAssignableFrom = typeof(IRepository).IsAssignableFrom(repositoryType); + + Assert.That(isSubclassOf, Is.False); + Assert.That(isAssignableFrom, Is.True); + + var uow = new PetaPocoUnitOfWork(); + var repository = RepositoryResolver.ResolveByType(uow); + bool subclassOf = repository.GetType().IsSubclassOf(typeof (IRepository)); + + Assert.That(subclassOf, Is.False); + Assert.That((typeof(IRepository).IsInstanceOfType(repository)), Is.True); + } } } \ No newline at end of file