From 4dfb4df9529f8c62162c7389f55110b0b77fb439 Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Fri, 9 Nov 2012 08:49:48 -0100 Subject: [PATCH] Adding unit tests for RelationTypeRepository. Correcting a few mappers and adding identityseed for RelationType plus adding default data. --- .../Models/Rdbms/RelationTypeDto.cs | 2 +- .../Mappers/PropertyGroupMapper.cs | 3 + .../Persistence/Mappers/PropertyTypeMapper.cs | 3 + .../Persistence/Mappers/RelationMapper.cs | 3 + .../Persistence/Mappers/RelationTypeMapper.cs | 3 + .../Migrations/Initial/BaseDataCreation.cs | 32 ++- .../Repositories/RelationRepositoryTest.cs | 93 +++++++ .../RelationTypeRepositoryTest.cs | 230 ++++++++++++++++++ src/Umbraco.Tests/Umbraco.Tests.csproj | 2 + 9 files changed, 363 insertions(+), 8 deletions(-) create mode 100644 src/Umbraco.Tests/Persistence/Repositories/RelationRepositoryTest.cs create mode 100644 src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs diff --git a/src/Umbraco.Core/Models/Rdbms/RelationTypeDto.cs b/src/Umbraco.Core/Models/Rdbms/RelationTypeDto.cs index ffa65948be..62a27e9506 100644 --- a/src/Umbraco.Core/Models/Rdbms/RelationTypeDto.cs +++ b/src/Umbraco.Core/Models/Rdbms/RelationTypeDto.cs @@ -10,7 +10,7 @@ namespace Umbraco.Core.Models.Rdbms internal class RelationTypeDto { [Column("id")] - [PrimaryKeyColumn] + [PrimaryKeyColumn(IdentitySeed = 2)] public int Id { get; set; } [Column("dual")] diff --git a/src/Umbraco.Core/Persistence/Mappers/PropertyGroupMapper.cs b/src/Umbraco.Core/Persistence/Mappers/PropertyGroupMapper.cs index 5ddcbbbdc4..1eafceacbd 100644 --- a/src/Umbraco.Core/Persistence/Mappers/PropertyGroupMapper.cs +++ b/src/Umbraco.Core/Persistence/Mappers/PropertyGroupMapper.cs @@ -33,6 +33,9 @@ namespace Umbraco.Core.Persistence.Mappers internal override string Map(string propertyName) { + if (!PropertyInfoCache.ContainsKey(propertyName)) + return string.Empty; + var dtoTypeProperty = PropertyInfoCache[propertyName]; return base.GetColumnName(dtoTypeProperty.Type, dtoTypeProperty.PropertyInfo); diff --git a/src/Umbraco.Core/Persistence/Mappers/PropertyTypeMapper.cs b/src/Umbraco.Core/Persistence/Mappers/PropertyTypeMapper.cs index ca572f11ab..df3967ad85 100644 --- a/src/Umbraco.Core/Persistence/Mappers/PropertyTypeMapper.cs +++ b/src/Umbraco.Core/Persistence/Mappers/PropertyTypeMapper.cs @@ -43,6 +43,9 @@ namespace Umbraco.Core.Persistence.Mappers internal override string Map(string propertyName) { + if (!PropertyInfoCache.ContainsKey(propertyName)) + return string.Empty; + var dtoTypeProperty = PropertyInfoCache[propertyName]; return base.GetColumnName(dtoTypeProperty.Type, dtoTypeProperty.PropertyInfo); diff --git a/src/Umbraco.Core/Persistence/Mappers/RelationMapper.cs b/src/Umbraco.Core/Persistence/Mappers/RelationMapper.cs index d9ec666a88..3e58420b84 100644 --- a/src/Umbraco.Core/Persistence/Mappers/RelationMapper.cs +++ b/src/Umbraco.Core/Persistence/Mappers/RelationMapper.cs @@ -35,6 +35,9 @@ namespace Umbraco.Core.Persistence.Mappers internal override string Map(string propertyName) { + if (!PropertyInfoCache.ContainsKey(propertyName)) + return string.Empty; + var dtoTypeProperty = PropertyInfoCache[propertyName]; return base.GetColumnName(dtoTypeProperty.Type, dtoTypeProperty.PropertyInfo); diff --git a/src/Umbraco.Core/Persistence/Mappers/RelationTypeMapper.cs b/src/Umbraco.Core/Persistence/Mappers/RelationTypeMapper.cs index c9c9cdea84..eb64df3800 100644 --- a/src/Umbraco.Core/Persistence/Mappers/RelationTypeMapper.cs +++ b/src/Umbraco.Core/Persistence/Mappers/RelationTypeMapper.cs @@ -35,6 +35,9 @@ namespace Umbraco.Core.Persistence.Mappers internal override string Map(string propertyName) { + if (!PropertyInfoCache.ContainsKey(propertyName)) + return string.Empty; + var dtoTypeProperty = PropertyInfoCache[propertyName]; return base.GetColumnName(dtoTypeProperty.Type, dtoTypeProperty.PropertyInfo); diff --git a/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs b/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs index f59d7e34a0..5bc4074432 100644 --- a/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs +++ b/src/Umbraco.Core/Persistence/Migrations/Initial/BaseDataCreation.cs @@ -76,6 +76,11 @@ namespace Umbraco.Core.Persistence.Migrations.Initial { CreateCmsDataTypeData(); } + + if (tableName.Equals("umbracoRelationType")) + { + CreateUmbracoRelationTypeData(); + } } private void CreateUmbracNodeData() @@ -283,7 +288,25 @@ namespace Umbraco.Core.Persistence.Migrations.Initial {} private void CreateUmbracoRelationTypeData() - {} + { + using (var transaction = _database.GetTransaction()) + { + _database.Execute(new Sql("SET IDENTITY_INSERT [umbracoRelationType] ON ")); + _database.Insert("umbracoRelationType", "id", false, + new RelationTypeDto + { + Id = 1, + Alias = "relateDocumentOnCopy", + ChildObjectType = new Guid("C66BA18E-EAF3-4CFF-8A22-41B16D66A972"), + ParentObjectType = new Guid("C66BA18E-EAF3-4CFF-8A22-41B16D66A972"), + Dual = true, + Name = "Relate Document On Copy" + }); + _database.Execute(new Sql("SET IDENTITY_INSERT [umbracoRelationType] OFF;")); + + transaction.Complete(); + } + } private void CreateCmsTaskTypeData() { } @@ -299,12 +322,7 @@ values (4,1041,'default', 0, 'group') SET IDENTITY_INSERT [cmsDataTypePreValues] OFF ; - - * - * - -insert into umbracoRelationType (dual, parentObjectType, childObjectType, name, alias) values (1, 'c66ba18e-eaf3-4cff-8a22-41b16d66a972', 'c66ba18e-eaf3-4cff-8a22-41b16d66a972', 'Relate Document On Copy','relateDocumentOnCopy') -; + * * diff --git a/src/Umbraco.Tests/Persistence/Repositories/RelationRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/RelationRepositoryTest.cs new file mode 100644 index 0000000000..d556c0635e --- /dev/null +++ b/src/Umbraco.Tests/Persistence/Repositories/RelationRepositoryTest.cs @@ -0,0 +1,93 @@ +using System; +using NUnit.Framework; +using Umbraco.Core.Models; +using Umbraco.Core.Persistence.Caching; +using Umbraco.Core.Persistence.Repositories; +using Umbraco.Core.Persistence.UnitOfWork; +using Umbraco.Tests.TestHelpers; + +namespace Umbraco.Tests.Persistence.Repositories +{ + [TestFixture] + public class RelationRepositoryTest : BaseDatabaseFactoryTest + { + [SetUp] + public override void Initialize() + { + base.Initialize(); + + CreateTestData(); + } + + [Test] + public void Can_Instantiate_Repository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + + // Act + var repositoryType = new RelationTypeRepository(unitOfWork); + var repository = new RelationRepository(unitOfWork, NullCacheProvider.Current, repositoryType); + + // Assert + Assert.That(repository, Is.Not.Null); + } + + [Test] + public void Can_Perform_Add_On_RelationRepository() + { } + + [Test] + public void Can_Perform_Update_On_RelationRepository() + { } + + [Test] + public void Can_Perform_Delete_On_RelationRepository() + { } + + [Test] + public void Can_Perform_Get_On_RelationRepository() + { } + + [Test] + public void Can_Perform_GetAll_On_RelationRepository() + { } + + [Test] + public void Can_Perform_GetAll_With_Params_On_RelationRepository() + { } + + [Test] + public void Can_Perform_Exists_On_RelationRepository() + { } + + [Test] + public void Can_Perform_Count_On_RelationRepository() + { } + + [Test] + public void Can_Perform_GetByQuery_On_RelationRepository() + { } + + [TearDown] + public override void TearDown() + { + base.TearDown(); + } + + public void CreateTestData() + { + var relateContent = new RelationType(new Guid("C66BA18E-EAF3-4CFF-8A22-41B16D66A972"), new Guid("C66BA18E-EAF3-4CFF-8A22-41B16D66A972"), "relateContentOnCopy") { IsBidirectional = true, Name = "Relate Content on Copy" }; + var relateContentType = new RelationType(new Guid("A2CB7800-F571-4787-9638-BC48539A0EFB"), new Guid("A2CB7800-F571-4787-9638-BC48539A0EFB"), "relateContentTypeOnCopy") { IsBidirectional = true, Name = "Relate ContentType on Copy" }; + + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new RelationTypeRepository(unitOfWork); + + repository.AddOrUpdate(relateContent); + repository.AddOrUpdate(relateContentType); + unitOfWork.Commit(); + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs new file mode 100644 index 0000000000..b0cef6a21d --- /dev/null +++ b/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs @@ -0,0 +1,230 @@ +using System; +using System.Linq; +using NUnit.Framework; +using Umbraco.Core.Models; +using Umbraco.Core.Persistence.Querying; +using Umbraco.Core.Persistence.Repositories; +using Umbraco.Core.Persistence.UnitOfWork; +using Umbraco.Tests.TestHelpers; + +namespace Umbraco.Tests.Persistence.Repositories +{ + [TestFixture] + public class RelationTypeRepositoryTest : BaseDatabaseFactoryTest + { + [SetUp] + public override void Initialize() + { + base.Initialize(); + + CreateTestData(); + } + + [Test] + public void Can_Instantiate_Repository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + + // Act + var repository = new RelationTypeRepository(unitOfWork); + + // Assert + Assert.That(repository, Is.Not.Null); + } + + [Test] + public void Can_Perform_Add_On_RelationTypeRepository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new RelationTypeRepository(unitOfWork); + + // Act + var relateMemberToContent = new RelationType(new Guid("39eb0f98-b348-42a1-8662-e7eb18487560"), + new Guid("C66BA18E-EAF3-4CFF-8A22-41B16D66A972"), + "relateMemberToContent") + {IsBidirectional = true, Name = "Relate Member to Content"}; + + repository.AddOrUpdate(relateMemberToContent); + unitOfWork.Commit(); + + // Assert + Assert.That(relateMemberToContent.HasIdentity, Is.True); + Assert.That(repository.Exists(relateMemberToContent.Id), Is.True); + + } + + [Test] + public void Can_Perform_Update_On_RelationTypeRepository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new RelationTypeRepository(unitOfWork); + + // Act + var relationType = repository.Get(3); + relationType.Alias = relationType.Alias + "Updated"; + relationType.Name = relationType.Name + " Updated"; + repository.AddOrUpdate(relationType); + unitOfWork.Commit(); + + var relationTypeUpdated = repository.Get(3); + + // Assert + Assert.That(relationTypeUpdated, Is.Not.Null); + Assert.That(relationTypeUpdated.HasIdentity, Is.True); + Assert.That(relationTypeUpdated.Alias, Is.EqualTo(relationType.Alias)); + Assert.That(relationTypeUpdated.Name, Is.EqualTo(relationType.Name)); + } + + [Test] + public void Can_Perform_Delete_On_RelationTypeRepository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new RelationTypeRepository(unitOfWork); + + // Act + var relationType = repository.Get(3); + repository.Delete(relationType); + unitOfWork.Commit(); + + var exists = repository.Exists(3); + + // Assert + Assert.That(exists, Is.False); + } + + [Test] + public void Can_Perform_Get_On_RelationTypeRepository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new RelationTypeRepository(unitOfWork); + + // Act + var relationType = repository.Get(2); + + // Assert + Assert.That(relationType, Is.Not.Null); + Assert.That(relationType.HasIdentity, Is.True); + Assert.That(relationType.Alias, Is.EqualTo("relateContentOnCopy")); + Assert.That(relationType.Name, Is.EqualTo("Relate Content on Copy")); + } + + [Test] + public void Can_Perform_GetAll_On_RelationTypeRepository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new RelationTypeRepository(unitOfWork); + + // Act + var relationTypes = repository.GetAll(); + + // Assert + Assert.That(relationTypes, Is.Not.Null); + Assert.That(relationTypes.Any(), Is.True); + Assert.That(relationTypes.Any(x => x == null), Is.False); + Assert.That(relationTypes.Count(), Is.EqualTo(3)); + } + + [Test] + public void Can_Perform_GetAll_With_Params_On_RelationTypeRepository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new RelationTypeRepository(unitOfWork); + + // Act + var relationTypes = repository.GetAll(2, 3); + + // Assert + Assert.That(relationTypes, Is.Not.Null); + Assert.That(relationTypes.Any(), Is.True); + Assert.That(relationTypes.Any(x => x == null), Is.False); + Assert.That(relationTypes.Count(), Is.EqualTo(2)); + } + + [Test] + public void Can_Perform_Exists_On_RelationTypeRepository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new RelationTypeRepository(unitOfWork); + + // Act + var exists = repository.Exists(3); + var doesntExist = repository.Exists(5); + + // Assert + Assert.That(exists, Is.True); + Assert.That(doesntExist, Is.False); + } + + [Test] + public void Can_Perform_Count_On_RelationTypeRepository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new RelationTypeRepository(unitOfWork); + + // Act + var query = Query.Builder.Where(x => x.Alias.StartsWith("relate")); + int count = repository.Count(query); + + // Assert + Assert.That(count, Is.EqualTo(3)); + } + + [Test] + public void Can_Perform_GetByQuery_On_RelationTypeRepository() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new RelationTypeRepository(unitOfWork); + + // Act + var childObjType = new Guid("A2CB7800-F571-4787-9638-BC48539A0EFB"); + var query = Query.Builder.Where(x => x.ChildObjectType == childObjType); + var result = repository.GetByQuery(query); + + // Assert + Assert.That(result, Is.Not.Null); + Assert.That(result.Any(), Is.True); + Assert.That(result.Any(x => x == null), Is.False); + Assert.That(result.Count(), Is.EqualTo(1)); + } + + [TearDown] + public override void TearDown() + { + base.TearDown(); + } + + public void CreateTestData() + { + var relateContent = new RelationType(new Guid("C66BA18E-EAF3-4CFF-8A22-41B16D66A972"), new Guid("C66BA18E-EAF3-4CFF-8A22-41B16D66A972"), "relateContentOnCopy"){IsBidirectional = true, Name = "Relate Content on Copy"}; + var relateContentType = new RelationType(new Guid("A2CB7800-F571-4787-9638-BC48539A0EFB"), new Guid("A2CB7800-F571-4787-9638-BC48539A0EFB"), "relateContentTypeOnCopy") { IsBidirectional = true, Name = "Relate ContentType on Copy" }; + + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + var repository = new RelationTypeRepository(unitOfWork); + + repository.AddOrUpdate(relateContent);//Id 2 + repository.AddOrUpdate(relateContentType);//Id 3 + unitOfWork.Commit(); + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index d7c72e461d..dcc531f1c2 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -124,6 +124,8 @@ + +