From 8fe7c0da9e145fb467b473684f295e8ba5512ea0 Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 18 Sep 2013 11:40:40 +1000 Subject: [PATCH 1/9] Changed all repository tests to ensure they are not testing with cache enabled... now to fix the problems :( --- .../Repositories/ContentRepositoryTest.cs | 450 ++++++++-------- .../Repositories/ContentTypeRepositoryTest.cs | 485 ++++++++++-------- .../DataTypeDefinitionRepositoryTest.cs | 217 ++++---- .../Repositories/DictionaryRepositoryTest.cs | 218 ++++---- .../Repositories/LanguageRepositoryTest.cs | 176 ++++--- .../Repositories/MediaRepositoryTest.cs | 285 +++++----- .../Repositories/MediaTypeRepositoryTest.cs | 224 ++++---- .../Repositories/MemberRepositoryTest.cs | 160 +++--- .../Repositories/MemberTypeRepositoryTest.cs | 80 +++ .../Repositories/RelationRepositoryTest.cs | 221 ++++---- .../RelationTypeRepositoryTest.cs | 187 ++++--- .../Repositories/ScriptRepositoryTest.cs | 5 +- .../ServerRegistrationRepositoryTest.cs | 28 +- .../Repositories/StylesheetRepositoryTest.cs | 5 +- .../Repositories/UserRepositoryTest.cs | 457 +++++++++-------- .../Repositories/UserTypeRepositoryTest.cs | 238 +++++---- src/Umbraco.Tests/Umbraco.Tests.csproj | 1 + 17 files changed, 1942 insertions(+), 1495 deletions(-) create mode 100644 src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs index fec3d9ca62..1990785938 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs @@ -6,6 +6,7 @@ using Umbraco.Core; using Umbraco.Core.Models; using Umbraco.Core.Models.Rdbms; using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.Caching; using Umbraco.Core.Persistence.Mappers; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.Repositories; @@ -34,17 +35,26 @@ namespace Umbraco.Tests.Persistence.Repositories base.TearDown(); } + private ContentRepository CreateRepository(IDatabaseUnitOfWork unitOfWork, out ContentTypeRepository contentTypeRepository) + { + var templateRepository = new TemplateRepository(unitOfWork, NullCacheProvider.Current); + contentTypeRepository = new ContentTypeRepository(unitOfWork, NullCacheProvider.Current, templateRepository); + var repository = new ContentRepository(unitOfWork, NullCacheProvider.Current, contentTypeRepository, templateRepository); + return repository; + } + [Test] public void Ensures_Permissions_Are_Set_If_Parent_Entity_Permissions_Exist() - { + { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var contentTypeRepository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var repository = (ContentRepository)RepositoryResolver.Current.ResolveByType(unitOfWork); - var contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage"); - contentType.AllowedContentTypes = new List + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + var contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage"); + contentType.AllowedContentTypes = new List { new ContentTypeSort { @@ -53,25 +63,27 @@ namespace Umbraco.Tests.Persistence.Repositories SortOrder = 0 } }; - var parentPage = MockedContent.CreateSimpleContent(contentType); - contentTypeRepository.AddOrUpdate(contentType); - repository.AddOrUpdate(parentPage); - unitOfWork.Commit(); + var parentPage = MockedContent.CreateSimpleContent(contentType); + contentTypeRepository.AddOrUpdate(contentType); + repository.AddOrUpdate(parentPage); + unitOfWork.Commit(); - // Act - repository.AssignEntityPermissions(parentPage, "A", new object[] {0}); - var childPage = MockedContent.CreateSimpleContent(contentType, "child", parentPage); - repository.AddOrUpdate(childPage); - unitOfWork.Commit(); + // Act + repository.AssignEntityPermissions(parentPage, "A", new object[] { 0 }); + var childPage = MockedContent.CreateSimpleContent(contentType, "child", parentPage); + repository.AddOrUpdate(childPage); + unitOfWork.Commit(); - // Assert - var permissions = repository.GetPermissionsForEntity(childPage.Id); - Assert.AreEqual(1, permissions.Count()); - Assert.AreEqual("A", permissions.Single().Permission); + // Assert + var permissions = repository.GetPermissionsForEntity(childPage.Id); + Assert.AreEqual(1, permissions.Count()); + Assert.AreEqual("A", permissions.Single().Permission); + } + } [Test] - public void Can_Instantiate_Repository() + public void Can_Instantiate_Repository_From_Resolver() { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); @@ -90,20 +102,21 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var contentTypeRepository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + ContentType contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage"); + Content textpage = MockedContent.CreateSimpleContent(contentType); - ContentType contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage"); - Content textpage = MockedContent.CreateSimpleContent(contentType); + // Act + contentTypeRepository.AddOrUpdate(contentType); + repository.AddOrUpdate(textpage); + unitOfWork.Commit(); - // Act - contentTypeRepository.AddOrUpdate(contentType); - repository.AddOrUpdate(textpage); - unitOfWork.Commit(); - - // Assert - Assert.That(contentType.HasIdentity, Is.True); - Assert.That(textpage.HasIdentity, Is.True); + // Assert + Assert.That(contentType.HasIdentity, Is.True); + Assert.That(textpage.HasIdentity, Is.True); + } } //Covers issue U4-2791 and U4-2607 @@ -113,28 +126,29 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var contentTypeRepository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + ContentType contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage"); + Content textpage = MockedContent.CreateSimpleContent(contentType, "test@umbraco.org", -1); + Content anotherTextpage = MockedContent.CreateSimpleContent(contentType, "@lightgiants", -1); - ContentType contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage"); - Content textpage = MockedContent.CreateSimpleContent(contentType, "test@umbraco.org", -1); - Content anotherTextpage = MockedContent.CreateSimpleContent(contentType, "@lightgiants", -1); + // Act + contentTypeRepository.AddOrUpdate(contentType); + repository.AddOrUpdate(textpage); + repository.AddOrUpdate(anotherTextpage); + unitOfWork.Commit(); - // Act - contentTypeRepository.AddOrUpdate(contentType); - repository.AddOrUpdate(textpage); - repository.AddOrUpdate(anotherTextpage); - unitOfWork.Commit(); + // Assert + Assert.That(contentType.HasIdentity, Is.True); + Assert.That(textpage.HasIdentity, Is.True); - // Assert - Assert.That(contentType.HasIdentity, Is.True); - Assert.That(textpage.HasIdentity, Is.True); + var content = repository.Get(textpage.Id); + Assert.That(content.Name, Is.EqualTo(textpage.Name)); - var content = repository.Get(textpage.Id); - Assert.That(content.Name, Is.EqualTo(textpage.Name)); - - var content2 = repository.Get(anotherTextpage.Id); - Assert.That(content2.Name, Is.EqualTo(anotherTextpage.Name)); + var content2 = repository.Get(anotherTextpage.Id); + Assert.That(content2.Name, Is.EqualTo(anotherTextpage.Name)); + } } [Test] @@ -143,26 +157,28 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var contentTypeRepository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + ContentType contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage"); + Content textpage = MockedContent.CreateSimpleContent(contentType); - ContentType contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage"); - Content textpage = MockedContent.CreateSimpleContent(contentType); - - // Act - contentTypeRepository.AddOrUpdate(contentType); - repository.AddOrUpdate(textpage); - unitOfWork.Commit(); - - Content subpage = MockedContent.CreateSimpleContent(contentType, "Text Page 1", textpage.Id); - repository.AddOrUpdate(subpage); - unitOfWork.Commit(); + // Act + contentTypeRepository.AddOrUpdate(contentType); + repository.AddOrUpdate(textpage); + unitOfWork.Commit(); - // Assert - Assert.That(contentType.HasIdentity, Is.True); - Assert.That(textpage.HasIdentity, Is.True); - Assert.That(subpage.HasIdentity, Is.True); - Assert.That(textpage.Id, Is.EqualTo(subpage.ParentId)); + Content subpage = MockedContent.CreateSimpleContent(contentType, "Text Page 1", textpage.Id); + repository.AddOrUpdate(subpage); + unitOfWork.Commit(); + + // Assert + Assert.That(contentType.HasIdentity, Is.True); + Assert.That(textpage.HasIdentity, Is.True); + Assert.That(subpage.HasIdentity, Is.True); + Assert.That(textpage.Id, Is.EqualTo(subpage.ParentId)); + } + } [Test] @@ -171,27 +187,28 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var contentTypeRepository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + ContentType contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage"); + Content textpage = MockedContent.CreateSimpleContent(contentType); - ContentType contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage"); - Content textpage = MockedContent.CreateSimpleContent(contentType); + // Act + contentTypeRepository.AddOrUpdate(contentType); + repository.AddOrUpdate(textpage); + unitOfWork.Commit(); - // Act - contentTypeRepository.AddOrUpdate(contentType); - repository.AddOrUpdate(textpage); - unitOfWork.Commit(); + var repository2 = RepositoryResolver.Current.ResolveByType(unitOfWork); + Content subpage = MockedContent.CreateSimpleContent(contentType, "Text Page 1", textpage.Id); + repository2.AddOrUpdate(subpage); + unitOfWork.Commit(); - var repository2 = RepositoryResolver.Current.ResolveByType(unitOfWork); - Content subpage = MockedContent.CreateSimpleContent(contentType, "Text Page 1", textpage.Id); - repository2.AddOrUpdate(subpage); - unitOfWork.Commit(); - - // Assert - Assert.That(contentType.HasIdentity, Is.True); - Assert.That(textpage.HasIdentity, Is.True); - Assert.That(subpage.HasIdentity, Is.True); - Assert.That(textpage.Id, Is.EqualTo(subpage.ParentId)); + // Assert + Assert.That(contentType.HasIdentity, Is.True); + Assert.That(textpage.HasIdentity, Is.True); + Assert.That(subpage.HasIdentity, Is.True); + Assert.That(textpage.Id, Is.EqualTo(subpage.ParentId)); + } } [Test] @@ -200,14 +217,16 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + // Act + var content = repository.Get(1048); + bool dirty = ((Content)content).IsDirty(); - // Act - var content = repository.Get(1048); - bool dirty = ((Content) content).IsDirty(); - - // Assert - Assert.That(dirty, Is.False); + // Assert + Assert.That(dirty, Is.False); + } } [Test] @@ -216,18 +235,21 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + // Act + var content = repository.Get(1047); + content.Name = "About 2"; + repository.AddOrUpdate(content); + unitOfWork.Commit(); + var updatedContent = repository.Get(1047); - // Act - var content = repository.Get(1047); - content.Name = "About 2"; - repository.AddOrUpdate(content); - unitOfWork.Commit(); - var updatedContent = repository.Get(1047); - - // Assert - Assert.That(updatedContent.Id, Is.EqualTo(content.Id)); - Assert.That(updatedContent.Name, Is.EqualTo(content.Name)); + // Assert + Assert.That(updatedContent.Id, Is.EqualTo(content.Id)); + Assert.That(updatedContent.Name, Is.EqualTo(content.Name)); + } + } [Test] @@ -236,27 +258,28 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var contentTypeRepository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + var contentType = contentTypeRepository.Get(1045); + var content = new Content("Textpage 2 Child Node", 1048, contentType); + content.CreatorId = 0; + content.WriterId = 0; - var contentType = contentTypeRepository.Get(1045); - var content = new Content("Textpage 2 Child Node", 1048, contentType); - content.CreatorId = 0; - content.WriterId = 0; + // Act + repository.AddOrUpdate(content); + unitOfWork.Commit(); + var id = content.Id; - // Act - repository.AddOrUpdate(content); - unitOfWork.Commit(); - var id = content.Id; + var repository2 = RepositoryResolver.Current.ResolveByType(unitOfWork); + repository2.Delete(content); + unitOfWork.Commit(); - var repository2 = RepositoryResolver.Current.ResolveByType(unitOfWork); - repository2.Delete(content); - unitOfWork.Commit(); + var content1 = repository2.Get(id); - var content1 = repository2.Get(id); - - // Assert - Assert.That(content1, Is.Null); + // Assert + Assert.That(content1, Is.Null); + } } [Test] @@ -265,22 +288,24 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + // Act + var content = repository.Get(1048); - // Act - var content = repository.Get(1048); - - // Assert - Assert.That(content.Id, Is.EqualTo(1048)); - Assert.That(content.CreateDate, Is.GreaterThan(DateTime.MinValue)); - Assert.That(content.UpdateDate, Is.GreaterThan(DateTime.MinValue)); - Assert.That(content.ParentId, Is.Not.EqualTo(0)); - Assert.That(content.Name, Is.EqualTo("Text Page 2")); - Assert.That(content.SortOrder, Is.EqualTo(1)); - Assert.That(content.Version, Is.Not.EqualTo(Guid.Empty)); - Assert.That(content.ContentTypeId, Is.EqualTo(1045)); - Assert.That(content.Path, Is.Not.Empty); - Assert.That(content.Properties.Any(), Is.True); + // Assert + Assert.That(content.Id, Is.EqualTo(1048)); + Assert.That(content.CreateDate, Is.GreaterThan(DateTime.MinValue)); + Assert.That(content.UpdateDate, Is.GreaterThan(DateTime.MinValue)); + Assert.That(content.ParentId, Is.Not.EqualTo(0)); + Assert.That(content.Name, Is.EqualTo("Text Page 2")); + Assert.That(content.SortOrder, Is.EqualTo(1)); + Assert.That(content.Version, Is.Not.EqualTo(Guid.Empty)); + Assert.That(content.ContentTypeId, Is.EqualTo(1045)); + Assert.That(content.Path, Is.Not.Empty); + Assert.That(content.Properties.Any(), Is.True); + } } [Test] @@ -289,14 +314,16 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + // Act + var query = Query.Builder.Where(x => x.Level == 2); + var result = repository.GetByQuery(query); - // Act - var query = Query.Builder.Where(x => x.Level == 2); - var result = repository.GetByQuery(query); - - // Assert - Assert.That(result.Count(), Is.GreaterThanOrEqualTo(2)); + // Assert + Assert.That(result.Count(), Is.GreaterThanOrEqualTo(2)); + } } [Test] @@ -305,15 +332,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + // Act + var contents = repository.GetAll(1047, 1048); - // Act - var contents = repository.GetAll(1047, 1048); - - // Assert - Assert.That(contents, Is.Not.Null); - Assert.That(contents.Any(), Is.True); - Assert.That(contents.Count(), Is.EqualTo(2)); + // Assert + Assert.That(contents, Is.Not.Null); + Assert.That(contents.Any(), Is.True); + Assert.That(contents.Count(), Is.EqualTo(2)); + } } [Test] @@ -322,15 +351,19 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + // Act + var contents = repository.GetAll(); - // Act - var contents = repository.GetAll(); + // Assert + Assert.That(contents, Is.Not.Null); + Assert.That(contents.Any(), Is.True); + Assert.That(contents.Count(), Is.GreaterThanOrEqualTo(4)); + } - // Assert - Assert.That(contents, Is.Not.Null); - Assert.That(contents.Any(), Is.True); - Assert.That(contents.Count(), Is.GreaterThanOrEqualTo(4)); + } [Test] @@ -339,13 +372,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + // Act + var exists = repository.Exists(1046); - // Act - var exists = repository.Exists(1046); + // Assert + Assert.That(exists, Is.True); + } - // Assert - Assert.That(exists, Is.True); + } [Test] @@ -354,15 +391,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + // Act + int level = 2; + var query = Query.Builder.Where(x => x.Level == level); + var result = repository.Count(query); - // Act - int level = 2; - var query = Query.Builder.Where(x => x.Level == level); - var result = repository.Count(query); - - // Assert - Assert.That(result, Is.GreaterThanOrEqualTo(2)); + // Assert + Assert.That(result, Is.GreaterThanOrEqualTo(2)); + } } [Test] @@ -371,17 +410,19 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + // Act + var textpage = repository.Get(1046); + var subpage = repository.Get(1047); + var trashed = repository.Get(1049); - // Act - var textpage = repository.Get(1046); - var subpage = repository.Get(1047); - var trashed = repository.Get(1049); - - // Assert - Assert.That(textpage.Key.ToString().ToUpper(), Is.EqualTo("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0")); - Assert.That(subpage.Key.ToString().ToUpper(), Is.EqualTo("FF11402B-7E53-4654-81A7-462AC2108059")); - Assert.That(trashed.Key, Is.Not.EqualTo(Guid.Empty)); + // Assert + Assert.That(textpage.Key.ToString().ToUpper(), Is.EqualTo("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0")); + Assert.That(subpage.Key.ToString().ToUpper(), Is.EqualTo("FF11402B-7E53-4654-81A7-462AC2108059")); + Assert.That(trashed.Key, Is.Not.EqualTo(Guid.Empty)); + } } [Test] @@ -390,15 +431,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + // Act + var query = Query.Builder.Where(x => x.Key == new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0")); + var content = repository.GetByQuery(query).SingleOrDefault(); - // Act - var query = Query.Builder.Where(x => x.Key == new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0")); - var content = repository.GetByQuery(query).SingleOrDefault(); - - // Assert - Assert.That(content, Is.Not.Null); - Assert.That(content.Id, Is.EqualTo(1046)); + // Assert + Assert.That(content, Is.Not.Null); + Assert.That(content.Id, Is.EqualTo(1046)); + } } @@ -408,23 +451,26 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var content = repository.Get(1047); + ContentTypeRepository contentTypeRepository; + using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) + { + var content = repository.Get(1047); - // Act - content.Language = "da-DK"; - content.Name = "Tekst Side 1"; - repository.AddOrUpdate(content); - unitOfWork.Commit(); + // Act + content.Language = "da-DK"; + content.Name = "Tekst Side 1"; + repository.AddOrUpdate(content); + unitOfWork.Commit(); - var latest = repository.Get(1047); - var english = repository.GetByLanguage(1047, "en-US"); - var danish = repository.GetByLanguage(1047, "da-DK"); + var latest = repository.Get(1047); + var english = repository.GetByLanguage(1047, "en-US"); + var danish = repository.GetByLanguage(1047, "da-DK"); - // Assert - Assert.That(latest.Name, Is.EqualTo("Tekst Side 1")); - Assert.That(english.Name, Is.EqualTo("Text Page 1")); - Assert.That(danish.Name, Is.EqualTo("Tekst Side 1")); + // Assert + Assert.That(latest.Name, Is.EqualTo("Tekst Side 1")); + Assert.That(english.Name, Is.EqualTo("Text Page 1")); + Assert.That(danish.Name, Is.EqualTo("Tekst Side 1")); + } } public void CreateTestData() diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs index c02030d75e..a099b3c5a2 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs @@ -6,6 +6,7 @@ using Umbraco.Core; using Umbraco.Core.Models; using Umbraco.Core.Models.EntityBase; using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.Caching; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.UnitOfWork; using Umbraco.Tests.TestHelpers; @@ -30,10 +31,25 @@ namespace Umbraco.Tests.Persistence.Repositories base.TearDown(); } + private ContentRepository CreateRepository(IDatabaseUnitOfWork unitOfWork, out ContentTypeRepository contentTypeRepository) + { + var templateRepository = new TemplateRepository(unitOfWork, NullCacheProvider.Current); + contentTypeRepository = new ContentTypeRepository(unitOfWork, NullCacheProvider.Current, templateRepository); + var repository = new ContentRepository(unitOfWork, NullCacheProvider.Current, contentTypeRepository, templateRepository); + return repository; + } + + private ContentTypeRepository CreateRepository(IDatabaseUnitOfWork unitOfWork) + { + var templateRepository = new TemplateRepository(unitOfWork, NullCacheProvider.Current); + var contentTypeRepository = new ContentTypeRepository(unitOfWork, NullCacheProvider.Current, templateRepository); + return contentTypeRepository; + } + //TODO Add test to verify SetDefaultTemplates updates both AllowedTemplates and DefaultTemplate(id). [Test] - public void Can_Instantiate_Repository() + public void Can_Instantiate_Repository_From_Resolver() { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); @@ -52,18 +68,20 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { + // Act + var contentType = MockedContentTypes.CreateSimpleContentType(); + repository.AddOrUpdate(contentType); + unitOfWork.Commit(); - // Act - var contentType = MockedContentTypes.CreateSimpleContentType(); - repository.AddOrUpdate(contentType); - unitOfWork.Commit(); - - // Assert - Assert.That(contentType.HasIdentity, Is.True); - Assert.That(contentType.PropertyGroups.All(x => x.HasIdentity), Is.True); - Assert.That(contentType.Path.Contains(","), Is.True); - Assert.That(contentType.SortOrder, Is.GreaterThan(0)); + // Assert + Assert.That(contentType.HasIdentity, Is.True); + Assert.That(contentType.PropertyGroups.All(x => x.HasIdentity), Is.True); + Assert.That(contentType.Path.Contains(","), Is.True); + Assert.That(contentType.SortOrder, Is.GreaterThan(0)); + } + } [Test] @@ -72,32 +90,35 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - - // Act - var contentType = repository.Get(1046); - - contentType.Thumbnail = "Doc2.png"; - contentType.PropertyGroups["Content"].PropertyTypes.Add(new PropertyType(new Guid(), DataTypeDatabaseType.Ntext) + using (var repository = CreateRepository(unitOfWork)) { - Alias = "subtitle", - Name = "Subtitle", - Description = "Optional Subtitle", - HelpText = "", - Mandatory = false, - SortOrder = 1, - DataTypeDefinitionId = -88 - }); - repository.AddOrUpdate(contentType); - unitOfWork.Commit(); + // Act + var contentType = repository.Get(1046); - var dirty = ((ICanBeDirty) contentType).IsDirty(); + contentType.Thumbnail = "Doc2.png"; + contentType.PropertyGroups["Content"].PropertyTypes.Add(new PropertyType(new Guid(), DataTypeDatabaseType.Ntext) + { + Alias = "subtitle", + Name = "Subtitle", + Description = "Optional Subtitle", + HelpText = "", + Mandatory = false, + SortOrder = 1, + DataTypeDefinitionId = -88 + }); + repository.AddOrUpdate(contentType); + unitOfWork.Commit(); - // Assert - Assert.That(contentType.HasIdentity, Is.True); - Assert.That(dirty, Is.False); - Assert.That(contentType.Thumbnail, Is.EqualTo("Doc2.png")); - Assert.That(contentType.PropertyTypes.Any(x => x.Alias == "subtitle"), Is.True); + var dirty = ((ICanBeDirty)contentType).IsDirty(); + + // Assert + Assert.That(contentType.HasIdentity, Is.True); + Assert.That(dirty, Is.False); + Assert.That(contentType.Thumbnail, Is.EqualTo("Doc2.png")); + Assert.That(contentType.PropertyTypes.Any(x => x.Alias == "subtitle"), Is.True); + } + + } [Test] @@ -106,21 +127,22 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { + // Act + var contentType = MockedContentTypes.CreateSimpleContentType(); + repository.AddOrUpdate(contentType); + unitOfWork.Commit(); - // Act - var contentType = MockedContentTypes.CreateSimpleContentType(); - repository.AddOrUpdate(contentType); - unitOfWork.Commit(); + var contentType2 = repository.Get(contentType.Id); + repository.Delete(contentType2); + unitOfWork.Commit(); - var contentType2 = repository.Get(contentType.Id); - repository.Delete(contentType2); - unitOfWork.Commit(); + var exists = repository.Exists(contentType.Id); - var exists = repository.Exists(contentType.Id); - - // Assert - Assert.That(exists, Is.False); + // Assert + Assert.That(exists, Is.False); + } } [Test] @@ -129,14 +151,16 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var contentType = repository.Get(1046); + // Act + var contentType = repository.Get(1046); - // Assert - Assert.That(contentType, Is.Not.Null); - Assert.That(contentType.Id, Is.EqualTo(1046)); + // Assert + Assert.That(contentType, Is.Not.Null); + Assert.That(contentType.Id, Is.EqualTo(1046)); + } } [Test] @@ -145,18 +169,20 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var contentTypes = repository.GetAll(); - int count = - DatabaseContext.Database.ExecuteScalar( - "SELECT COUNT(*) FROM umbracoNode WHERE nodeObjectType = @NodeObjectType", - new { NodeObjectType = new Guid(Constants.ObjectTypes.DocumentType) }); + // Act + var contentTypes = repository.GetAll(); + int count = + DatabaseContext.Database.ExecuteScalar( + "SELECT COUNT(*) FROM umbracoNode WHERE nodeObjectType = @NodeObjectType", + new {NodeObjectType = new Guid(Constants.ObjectTypes.DocumentType)}); - // Assert - Assert.That(contentTypes.Any(), Is.True); - Assert.That(contentTypes.Count(), Is.EqualTo(count)); + // Assert + Assert.That(contentTypes.Any(), Is.True); + Assert.That(contentTypes.Count(), Is.EqualTo(count)); + } } [Test] @@ -165,13 +191,15 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var exists = repository.Exists(1045); + // Act + var exists = repository.Exists(1045); - // Assert - Assert.That(exists, Is.True); + // Assert + Assert.That(exists, Is.True); + } } [Test] @@ -180,21 +208,23 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var contentType = repository.Get(1046); + using (var repository = CreateRepository(unitOfWork)) + { + var contentType = repository.Get(1046); - // Act - var contentType2 = repository.Get(1046); - contentType2.PropertyGroups["Meta"].PropertyTypes.Remove("metaDescription"); - repository.AddOrUpdate(contentType2); - unitOfWork.Commit(); + // Act + var contentType2 = repository.Get(1046); + contentType2.PropertyGroups["Meta"].PropertyTypes.Remove("metaDescription"); + repository.AddOrUpdate(contentType2); + unitOfWork.Commit(); - var contentType3 = repository.Get(1046); + var contentType3 = repository.Get(1046); - // Assert - Assert.That(contentType3.PropertyTypes.Any(x => x.Alias == "metaDescription"), Is.False); - Assert.That(contentType.PropertyGroups.Count, Is.EqualTo(contentType3.PropertyGroups.Count)); - Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(contentType3.PropertyTypes.Count())); + // Assert + Assert.That(contentType3.PropertyTypes.Any(x => x.Alias == "metaDescription"), Is.False); + Assert.That(contentType.PropertyGroups.Count, Is.EqualTo(contentType3.PropertyGroups.Count)); + Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(contentType3.PropertyTypes.Count())); + } } [Test] @@ -203,14 +233,16 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var contentType = repository.Get(1045); + // Act + var contentType = repository.Get(1045); - // Assert - Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(3)); - Assert.That(contentType.PropertyGroups.Count(), Is.EqualTo(1)); + // Assert + Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(3)); + Assert.That(contentType.PropertyGroups.Count(), Is.EqualTo(1)); + } } [Test] @@ -219,14 +251,16 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var contentType = repository.Get(1046); + // Act + var contentType = repository.Get(1046); - // Assert - Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(4)); - Assert.That(contentType.PropertyGroups.Count(), Is.EqualTo(2)); + // Assert + Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(4)); + Assert.That(contentType.PropertyGroups.Count(), Is.EqualTo(2)); + } } [Test] @@ -235,32 +269,34 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var contentType = repository.Get(1046); + using (var repository = CreateRepository(unitOfWork)) + { + var contentType = repository.Get(1046); - // Act - var urlAlias = new PropertyType(new Guid(), DataTypeDatabaseType.Nvarchar) - { - Alias = "urlAlias", - Name = "Url Alias", - Description = "", - HelpText = "", - Mandatory = false, - SortOrder = 1, - DataTypeDefinitionId = -88 - }; - - var addedPropertyType = contentType.AddPropertyType(urlAlias); - repository.AddOrUpdate(contentType); - unitOfWork.Commit(); + // Act + var urlAlias = new PropertyType(new Guid(), DataTypeDatabaseType.Nvarchar) + { + Alias = "urlAlias", + Name = "Url Alias", + Description = "", + HelpText = "", + Mandatory = false, + SortOrder = 1, + DataTypeDefinitionId = -88 + }; - // Assert - var updated = repository.Get(1046); - Assert.That(addedPropertyType, Is.True); - Assert.That(updated.PropertyGroups.Count(), Is.EqualTo(2)); - Assert.That(updated.PropertyTypes.Count(), Is.EqualTo(5)); - Assert.That(updated.PropertyTypes.Any(x => x.Alias == "urlAlias"), Is.True); - Assert.That(updated.PropertyTypes.First(x => x.Alias == "urlAlias").PropertyGroupId, Is.Null); + var addedPropertyType = contentType.AddPropertyType(urlAlias); + repository.AddOrUpdate(contentType); + unitOfWork.Commit(); + + // Assert + var updated = repository.Get(1046); + Assert.That(addedPropertyType, Is.True); + Assert.That(updated.PropertyGroups.Count(), Is.EqualTo(2)); + Assert.That(updated.PropertyTypes.Count(), Is.EqualTo(5)); + Assert.That(updated.PropertyTypes.Any(x => x.Alias == "urlAlias"), Is.True); + Assert.That(updated.PropertyTypes.First(x => x.Alias == "urlAlias").PropertyGroupId, Is.Null); + } } [Test] @@ -269,40 +305,42 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - var subpageContentType = MockedContentTypes.CreateSimpleContentType("umbSubpage", "Subpage"); - var simpleSubpageContentType = MockedContentTypes.CreateSimpleContentType("umbSimpleSubpage", "Simple Subpage"); - repository.AddOrUpdate(subpageContentType); - repository.AddOrUpdate(simpleSubpageContentType); - unitOfWork.Commit(); + var subpageContentType = MockedContentTypes.CreateSimpleContentType("umbSubpage", "Subpage"); + var simpleSubpageContentType = MockedContentTypes.CreateSimpleContentType("umbSimpleSubpage", "Simple Subpage"); + repository.AddOrUpdate(subpageContentType); + repository.AddOrUpdate(simpleSubpageContentType); + unitOfWork.Commit(); - // Act - var contentType = repository.Get(1045); - contentType.AllowedContentTypes = new List - { - new ContentTypeSort - { - Alias = subpageContentType.Alias, - Id = new Lazy(() => subpageContentType.Id), - SortOrder = 0 - }, - new ContentTypeSort - { - Alias = simpleSubpageContentType.Alias, - Id = new Lazy(() => simpleSubpageContentType.Id), - SortOrder = 1 - } - }; - repository.AddOrUpdate(contentType); - unitOfWork.Commit(); + // Act + var contentType = repository.Get(1045); + contentType.AllowedContentTypes = new List + { + new ContentTypeSort + { + Alias = subpageContentType.Alias, + Id = new Lazy(() => subpageContentType.Id), + SortOrder = 0 + }, + new ContentTypeSort + { + Alias = simpleSubpageContentType.Alias, + Id = new Lazy(() => simpleSubpageContentType.Id), + SortOrder = 1 + } + }; + repository.AddOrUpdate(contentType); + unitOfWork.Commit(); - //Assert - var updated = repository.Get(1045); + //Assert + var updated = repository.Get(1045); - Assert.That(updated.AllowedContentTypes.Any(), Is.True); - Assert.That(updated.AllowedContentTypes.Any(x => x.Alias == subpageContentType.Alias), Is.True); - Assert.That(updated.AllowedContentTypes.Any(x => x.Alias == simpleSubpageContentType.Alias), Is.True); + Assert.That(updated.AllowedContentTypes.Any(), Is.True); + Assert.That(updated.AllowedContentTypes.Any(x => x.Alias == subpageContentType.Alias), Is.True); + Assert.That(updated.AllowedContentTypes.Any(x => x.Alias == simpleSubpageContentType.Alias), Is.True); + } } [Test] @@ -311,23 +349,25 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var contentRepository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var contentType = repository.Get(1046); + ContentTypeRepository repository; + using (var contentRepository = CreateRepository(unitOfWork, out repository)) + { + var contentType = repository.Get(1046); - var subpage = MockedContent.CreateTextpageContent(contentType, "Text Page 1", contentType.Id); - contentRepository.AddOrUpdate(subpage); - unitOfWork.Commit(); + var subpage = MockedContent.CreateTextpageContent(contentType, "Text Page 1", contentType.Id); + contentRepository.AddOrUpdate(subpage); + unitOfWork.Commit(); - // Act - contentType.RemovePropertyType("keywords"); - repository.AddOrUpdate(contentType); - unitOfWork.Commit(); + // Act + contentType.RemovePropertyType("keywords"); + repository.AddOrUpdate(contentType); + unitOfWork.Commit(); - // Assert - Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(3)); - Assert.That(contentType.PropertyTypes.Any(x => x.Alias == "keywords"), Is.False); - Assert.That(subpage.Properties.First(x => x.Alias == "metaDescription").Value, Is.EqualTo("This is the meta description for a textpage")); + // Assert + Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(3)); + Assert.That(contentType.PropertyTypes.Any(x => x.Alias == "keywords"), Is.False); + Assert.That(subpage.Properties.First(x => x.Alias == "metaDescription").Value, Is.EqualTo("This is the meta description for a textpage")); + } } [Test] @@ -336,23 +376,26 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var contentRepository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var contentType = repository.Get(1046); + ContentTypeRepository repository; + using (var contentRepository = CreateRepository(unitOfWork, out repository)) + { + var contentType = repository.Get(1046); - var subpage = MockedContent.CreateTextpageContent(contentType, "Text Page 1", contentType.Id); - contentRepository.AddOrUpdate(subpage); - unitOfWork.Commit(); + var subpage = MockedContent.CreateTextpageContent(contentType, "Text Page 1", contentType.Id); + contentRepository.AddOrUpdate(subpage); + unitOfWork.Commit(); - // Act - var propertyGroup = contentType.PropertyGroups.First(x => x.Name == "Meta"); - propertyGroup.PropertyTypes.Add(new PropertyType(new Guid(), DataTypeDatabaseType.Ntext) { Alias = "metaAuthor", Name = "Meta Author", Description = "", HelpText = "", Mandatory = false, SortOrder = 1, DataTypeDefinitionId = -88 }); - repository.AddOrUpdate(contentType); - unitOfWork.Commit(); + // Act + var propertyGroup = contentType.PropertyGroups.First(x => x.Name == "Meta"); + propertyGroup.PropertyTypes.Add(new PropertyType(new Guid(), DataTypeDatabaseType.Ntext) { Alias = "metaAuthor", Name = "Meta Author", Description = "", HelpText = "", Mandatory = false, SortOrder = 1, DataTypeDefinitionId = -88 }); + repository.AddOrUpdate(contentType); + unitOfWork.Commit(); - // Assert - Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(5)); - Assert.That(contentType.PropertyTypes.Any(x => x.Alias == "metaAuthor"), Is.True); + // Assert + Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(5)); + Assert.That(contentType.PropertyTypes.Any(x => x.Alias == "metaAuthor"), Is.True); + } + } [Test] @@ -361,30 +404,32 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var contentRepository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var contentType = repository.Get(1046); + ContentTypeRepository repository; + using (var contentRepository = CreateRepository(unitOfWork, out repository)) + { + var contentType = repository.Get(1046); - var subpage = MockedContent.CreateTextpageContent(contentType, "Text Page 1", contentType.Id); - contentRepository.AddOrUpdate(subpage); - unitOfWork.Commit(); + var subpage = MockedContent.CreateTextpageContent(contentType, "Text Page 1", contentType.Id); + contentRepository.AddOrUpdate(subpage); + unitOfWork.Commit(); - var propertyGroup = contentType.PropertyGroups.First(x => x.Name == "Meta"); - propertyGroup.PropertyTypes.Add(new PropertyType(new Guid(), DataTypeDatabaseType.Ntext) { Alias = "metaAuthor", Name = "Meta Author", Description = "", HelpText = "", Mandatory = false, SortOrder = 1, DataTypeDefinitionId = -88 }); - repository.AddOrUpdate(contentType); - unitOfWork.Commit(); + var propertyGroup = contentType.PropertyGroups.First(x => x.Name == "Meta"); + propertyGroup.PropertyTypes.Add(new PropertyType(new Guid(), DataTypeDatabaseType.Ntext) {Alias = "metaAuthor", Name = "Meta Author", Description = "", HelpText = "", Mandatory = false, SortOrder = 1, DataTypeDefinitionId = -88}); + repository.AddOrUpdate(contentType); + unitOfWork.Commit(); - // Act - var content = contentRepository.Get(subpage.Id); - content.SetValue("metaAuthor", "John Doe"); - contentRepository.AddOrUpdate(content); - unitOfWork.Commit(); + // Act + var content = contentRepository.Get(subpage.Id); + content.SetValue("metaAuthor", "John Doe"); + contentRepository.AddOrUpdate(content); + unitOfWork.Commit(); - //Assert - var updated = contentRepository.Get(subpage.Id); - Assert.That(updated.GetValue("metaAuthor").ToString(), Is.EqualTo("John Doe")); - Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(5)); - Assert.That(contentType.PropertyTypes.Any(x => x.Alias == "metaAuthor"), Is.True); + //Assert + var updated = contentRepository.Get(subpage.Id); + Assert.That(updated.GetValue("metaAuthor").ToString(), Is.EqualTo("John Doe")); + Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(5)); + Assert.That(contentType.PropertyTypes.Any(x => x.Alias == "metaAuthor"), Is.True); + } } [Test] @@ -395,36 +440,38 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var contentRepository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var contentType = repository.Get(1046); + ContentTypeRepository repository; + using (var contentRepository = CreateRepository(unitOfWork, out repository)) + { + var contentType = repository.Get(1046); - var subpage = MockedContent.CreateTextpageContent(contentType, "Text Page 1", contentType.Id); - contentRepository.AddOrUpdate(subpage); - unitOfWork.Commit(); + var subpage = MockedContent.CreateTextpageContent(contentType, "Text Page 1", contentType.Id); + contentRepository.AddOrUpdate(subpage); + unitOfWork.Commit(); - //Remove PropertyType - contentType.RemovePropertyType("keywords"); - //Add PropertyType - var propertyGroup = contentType.PropertyGroups.First(x => x.Name == "Meta"); - propertyGroup.PropertyTypes.Add(new PropertyType(new Guid(), DataTypeDatabaseType.Ntext) { Alias = "metaAuthor", Name = "Meta Author", Description = "", HelpText = "", Mandatory = false, SortOrder = 1, DataTypeDefinitionId = -88 }); - repository.AddOrUpdate(contentType); - unitOfWork.Commit(); + //Remove PropertyType + contentType.RemovePropertyType("keywords"); + //Add PropertyType + var propertyGroup = contentType.PropertyGroups.First(x => x.Name == "Meta"); + propertyGroup.PropertyTypes.Add(new PropertyType(new Guid(), DataTypeDatabaseType.Ntext) {Alias = "metaAuthor", Name = "Meta Author", Description = "", HelpText = "", Mandatory = false, SortOrder = 1, DataTypeDefinitionId = -88}); + repository.AddOrUpdate(contentType); + unitOfWork.Commit(); - // Act - var content = contentRepository.Get(subpage.Id); - content.SetValue("metaAuthor", "John Doe"); - contentRepository.AddOrUpdate(content); - unitOfWork.Commit(); + // Act + var content = contentRepository.Get(subpage.Id); + content.SetValue("metaAuthor", "John Doe"); + contentRepository.AddOrUpdate(content); + unitOfWork.Commit(); - //Assert - var updated = contentRepository.Get(subpage.Id); - Assert.That(updated.GetValue("metaAuthor").ToString(), Is.EqualTo("John Doe")); - Assert.That(updated.Properties.First(x => x.Alias == "metaDescription").Value, Is.EqualTo("This is the meta description for a textpage")); + //Assert + var updated = contentRepository.Get(subpage.Id); + Assert.That(updated.GetValue("metaAuthor").ToString(), Is.EqualTo("John Doe")); + Assert.That(updated.Properties.First(x => x.Alias == "metaDescription").Value, Is.EqualTo("This is the meta description for a textpage")); - Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(4)); - Assert.That(contentType.PropertyTypes.Any(x => x.Alias == "metaAuthor"), Is.True); - Assert.That(contentType.PropertyTypes.Any(x => x.Alias == "keywords"), Is.False); + Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(4)); + Assert.That(contentType.PropertyTypes.Any(x => x.Alias == "metaAuthor"), Is.True); + Assert.That(contentType.PropertyTypes.Any(x => x.Alias == "keywords"), Is.False); + } } public void CreateTestData() diff --git a/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs index 0f19a5083f..3825677fa8 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs @@ -4,6 +4,7 @@ using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Models; using Umbraco.Core.Models.Membership; +using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Caching; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.Repositories; @@ -21,15 +22,21 @@ namespace Umbraco.Tests.Persistence.Repositories base.Initialize(); } + private DataTypeDefinitionRepository CreateRepository(IDatabaseUnitOfWork unitOfWork) + { + var dataTypeDefinitionRepository = new DataTypeDefinitionRepository(unitOfWork, NullCacheProvider.Current); + return dataTypeDefinitionRepository; + } + [Test] - public void Can_Instantiate_Repository() + public void Can_Instantiate_Repository_From_Resolver() { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); // Act - var repository = new DataTypeDefinitionRepository(unitOfWork); + var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); // Assert Assert.That(repository, Is.Not.Null); @@ -41,15 +48,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new DataTypeDefinitionRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { + // Act + var dataTypeDefinition = repository.Get(-42); - // Act - var dataTypeDefinition = repository.Get(-42); - - // Assert - Assert.That(dataTypeDefinition, Is.Not.Null); - Assert.That(dataTypeDefinition.HasIdentity, Is.True); - Assert.That(dataTypeDefinition.Name, Is.EqualTo("Dropdown")); + // Assert + Assert.That(dataTypeDefinition, Is.Not.Null); + Assert.That(dataTypeDefinition.HasIdentity, Is.True); + Assert.That(dataTypeDefinition.Name, Is.EqualTo("Dropdown")); + } + } [Test] @@ -58,16 +67,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new DataTypeDefinitionRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var dataTypeDefinitions = repository.GetAll(); + // Act + var dataTypeDefinitions = repository.GetAll(); - // Assert - Assert.That(dataTypeDefinitions, Is.Not.Null); - Assert.That(dataTypeDefinitions.Any(), Is.True); - Assert.That(dataTypeDefinitions.Any(x => x == null), Is.False); - Assert.That(dataTypeDefinitions.Count(), Is.EqualTo(24)); + // Assert + Assert.That(dataTypeDefinitions, Is.Not.Null); + Assert.That(dataTypeDefinitions.Any(), Is.True); + Assert.That(dataTypeDefinitions.Any(x => x == null), Is.False); + Assert.That(dataTypeDefinitions.Count(), Is.EqualTo(24)); + } } [Test] @@ -76,16 +87,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new DataTypeDefinitionRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var dataTypeDefinitions = repository.GetAll(-40, -41, -42); + // Act + var dataTypeDefinitions = repository.GetAll(-40, -41, -42); - // Assert - Assert.That(dataTypeDefinitions, Is.Not.Null); - Assert.That(dataTypeDefinitions.Any(), Is.True); - Assert.That(dataTypeDefinitions.Any(x => x == null), Is.False); - Assert.That(dataTypeDefinitions.Count(), Is.EqualTo(3)); + // Assert + Assert.That(dataTypeDefinitions, Is.Not.Null); + Assert.That(dataTypeDefinitions.Any(), Is.True); + Assert.That(dataTypeDefinitions.Any(x => x == null), Is.False); + Assert.That(dataTypeDefinitions.Count(), Is.EqualTo(3)); + } } [Test] @@ -94,16 +107,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new DataTypeDefinitionRepository(unitOfWork, NullCacheProvider.Current); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var query = Query.Builder.Where(x => x.ControlId == new Guid(Constants.PropertyEditors.RadioButtonList)); - var result = repository.GetByQuery(query); + // Act + var query = Query.Builder.Where(x => x.ControlId == new Guid(Constants.PropertyEditors.RadioButtonList)); + var result = repository.GetByQuery(query); - // Assert - Assert.That(result, Is.Not.Null); - Assert.That(result.Any(), Is.True); - Assert.That(result.FirstOrDefault().Name, Is.EqualTo("Radiobox")); + // Assert + Assert.That(result, Is.Not.Null); + Assert.That(result.Any(), Is.True); + Assert.That(result.FirstOrDefault().Name, Is.EqualTo("Radiobox")); + } } [Test] @@ -112,14 +127,16 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new DataTypeDefinitionRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var query = Query.Builder.Where(x => x.Name.StartsWith("D")); - int count = repository.Count(query); + // Act + var query = Query.Builder.Where(x => x.Name.StartsWith("D")); + int count = repository.Count(query); - // Assert - Assert.That(count, Is.EqualTo(4)); + // Assert + Assert.That(count, Is.EqualTo(4)); + } } [Test] @@ -128,23 +145,25 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new DataTypeDefinitionRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - var dataTypeDefinition = new DataTypeDefinition(-1, new Guid("0FE4B127-D48C-4807-8371-67FC2A0E27D7")) - { - DatabaseType = DataTypeDatabaseType.Integer, - Name = "AgeDataType", - CreatorId = 0 - }; + var dataTypeDefinition = new DataTypeDefinition(-1, new Guid("0FE4B127-D48C-4807-8371-67FC2A0E27D7")) + { + DatabaseType = DataTypeDatabaseType.Integer, + Name = "AgeDataType", + CreatorId = 0 + }; - // Act - repository.AddOrUpdate(dataTypeDefinition); - unitOfWork.Commit(); - var exists = repository.Exists(dataTypeDefinition.Id); + // Act + repository.AddOrUpdate(dataTypeDefinition); + unitOfWork.Commit(); + var exists = repository.Exists(dataTypeDefinition.Id); - // Assert - Assert.That(dataTypeDefinition.HasIdentity, Is.True); - Assert.That(exists, Is.True); + // Assert + Assert.That(dataTypeDefinition.HasIdentity, Is.True); + Assert.That(exists, Is.True); + } } [Test] @@ -153,28 +172,30 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new DataTypeDefinitionRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - var dataTypeDefinition = new DataTypeDefinition(-1, new Guid("0FE4B127-D48C-4807-8371-67FC2A0E27D7")) - { - DatabaseType = DataTypeDatabaseType.Integer, - Name = "AgeDataType", - CreatorId = 0 - }; - repository.AddOrUpdate(dataTypeDefinition); - unitOfWork.Commit(); + var dataTypeDefinition = new DataTypeDefinition(-1, new Guid("0FE4B127-D48C-4807-8371-67FC2A0E27D7")) + { + DatabaseType = DataTypeDatabaseType.Integer, + Name = "AgeDataType", + CreatorId = 0 + }; + repository.AddOrUpdate(dataTypeDefinition); + unitOfWork.Commit(); - // Act - var definition = repository.Get(dataTypeDefinition.Id); - definition.Name = "AgeDataType Updated"; - repository.AddOrUpdate(definition); - unitOfWork.Commit(); + // Act + var definition = repository.Get(dataTypeDefinition.Id); + definition.Name = "AgeDataType Updated"; + repository.AddOrUpdate(definition); + unitOfWork.Commit(); - var definitionUpdated = repository.Get(dataTypeDefinition.Id); + var definitionUpdated = repository.Get(dataTypeDefinition.Id); - // Assert - Assert.That(definitionUpdated, Is.Not.Null); - Assert.That(definitionUpdated.Name, Is.EqualTo("AgeDataType Updated")); + // Assert + Assert.That(definitionUpdated, Is.Not.Null); + Assert.That(definitionUpdated.Name, Is.EqualTo("AgeDataType Updated")); + } } [Test] @@ -183,28 +204,30 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new DataTypeDefinitionRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - var dataTypeDefinition = new DataTypeDefinition(-1, new Guid("0FE4B127-D48C-4807-8371-67FC2A0E27D7")) - { - DatabaseType = DataTypeDatabaseType.Integer, - Name = "AgeDataType", - CreatorId = 0 - }; + var dataTypeDefinition = new DataTypeDefinition(-1, new Guid("0FE4B127-D48C-4807-8371-67FC2A0E27D7")) + { + DatabaseType = DataTypeDatabaseType.Integer, + Name = "AgeDataType", + CreatorId = 0 + }; - // Act - repository.AddOrUpdate(dataTypeDefinition); - unitOfWork.Commit(); - var existsBefore = repository.Exists(dataTypeDefinition.Id); + // Act + repository.AddOrUpdate(dataTypeDefinition); + unitOfWork.Commit(); + var existsBefore = repository.Exists(dataTypeDefinition.Id); - repository.Delete(dataTypeDefinition); - unitOfWork.Commit(); + repository.Delete(dataTypeDefinition); + unitOfWork.Commit(); - var existsAfter = repository.Exists(dataTypeDefinition.Id); + var existsAfter = repository.Exists(dataTypeDefinition.Id); - // Assert - Assert.That(existsBefore, Is.True); - Assert.That(existsAfter, Is.False); + // Assert + Assert.That(existsBefore, Is.True); + Assert.That(existsAfter, Is.False); + } } [Test] @@ -213,15 +236,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new DataTypeDefinitionRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var exists = repository.Exists(1042);//Macro Container - var doesntExist = repository.Exists(-80); + // Act + var exists = repository.Exists(1042); //Macro Container + var doesntExist = repository.Exists(-80); - // Assert - Assert.That(exists, Is.True); - Assert.That(doesntExist, Is.False); + // Assert + Assert.That(exists, Is.True); + Assert.That(doesntExist, Is.False); + } } [TearDown] diff --git a/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs index fe841d804b..554c0f7ec4 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs @@ -2,6 +2,8 @@ using System.Linq; using NUnit.Framework; using Umbraco.Core.Models; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.Caching; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.UnitOfWork; @@ -20,16 +22,22 @@ namespace Umbraco.Tests.Persistence.Repositories CreateTestData(); } + private DictionaryRepository CreateRepository(IDatabaseUnitOfWork unitOfWork, out LanguageRepository languageRepository) + { + languageRepository = new LanguageRepository(unitOfWork, NullCacheProvider.Current); + var dictionaryRepository = new DictionaryRepository(unitOfWork, NullCacheProvider.Current, languageRepository); + return dictionaryRepository; + } + [Test] - public void Can_Instantiate_Repository() + public void Can_Instantiate_Repository_From_Resolver() { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); // Act - var languageRepository = new LanguageRepository(unitOfWork); - var repository = new DictionaryRepository(unitOfWork, languageRepository); + var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); // Assert Assert.That(repository, Is.Not.Null); @@ -41,19 +49,21 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var languageRepository = new LanguageRepository(unitOfWork); - var repository = new DictionaryRepository(unitOfWork, languageRepository); + LanguageRepository languageRepository; + using (var repository = CreateRepository(unitOfWork, out languageRepository)) + { + // Act + var dictionaryItem = repository.Get(1); - // Act - var dictionaryItem = repository.Get(1); - - // Assert - Assert.That(dictionaryItem, Is.Not.Null); - Assert.That(dictionaryItem.ItemKey, Is.EqualTo("Read More")); - Assert.That(dictionaryItem.Translations.Any(), Is.True); - Assert.That(dictionaryItem.Translations.Any(x => x == null), Is.False); - Assert.That(dictionaryItem.Translations.First().Value, Is.EqualTo("Read More")); - Assert.That(dictionaryItem.Translations.Last().Value, Is.EqualTo("Læs mere")); + // Assert + Assert.That(dictionaryItem, Is.Not.Null); + Assert.That(dictionaryItem.ItemKey, Is.EqualTo("Read More")); + Assert.That(dictionaryItem.Translations.Any(), Is.True); + Assert.That(dictionaryItem.Translations.Any(x => x == null), Is.False); + Assert.That(dictionaryItem.Translations.First().Value, Is.EqualTo("Read More")); + Assert.That(dictionaryItem.Translations.Last().Value, Is.EqualTo("Læs mere")); + } + } [Test] @@ -62,18 +72,20 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var languageRepository = new LanguageRepository(unitOfWork); - var repository = new DictionaryRepository(unitOfWork, languageRepository); + LanguageRepository languageRepository; + using (var repository = CreateRepository(unitOfWork, out languageRepository)) + { - // Act - var dictionaryItem = repository.Get(1); - var dictionaryItems = repository.GetAll(); + // Act + var dictionaryItem = repository.Get(1); + var dictionaryItems = repository.GetAll(); - // Assert - Assert.That(dictionaryItems, Is.Not.Null); - Assert.That(dictionaryItems.Any(), Is.True); - Assert.That(dictionaryItems.Any(x => x == null), Is.False); - Assert.That(dictionaryItems.Count(), Is.EqualTo(2)); + // Assert + Assert.That(dictionaryItems, Is.Not.Null); + Assert.That(dictionaryItems.Any(), Is.True); + Assert.That(dictionaryItems.Any(x => x == null), Is.False); + Assert.That(dictionaryItems.Count(), Is.EqualTo(2)); + } } [Test] @@ -82,17 +94,19 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var languageRepository = new LanguageRepository(unitOfWork); - var repository = new DictionaryRepository(unitOfWork, languageRepository); + LanguageRepository languageRepository; + using (var repository = CreateRepository(unitOfWork, out languageRepository)) + { - // Act - var dictionaryItems = repository.GetAll(1, 2); + // Act + var dictionaryItems = repository.GetAll(1, 2); - // Assert - Assert.That(dictionaryItems, Is.Not.Null); - Assert.That(dictionaryItems.Any(), Is.True); - Assert.That(dictionaryItems.Any(x => x == null), Is.False); - Assert.That(dictionaryItems.Count(), Is.EqualTo(2)); + // Assert + Assert.That(dictionaryItems, Is.Not.Null); + Assert.That(dictionaryItems.Any(), Is.True); + Assert.That(dictionaryItems.Any(x => x == null), Is.False); + Assert.That(dictionaryItems.Count(), Is.EqualTo(2)); + } } [Test] @@ -101,17 +115,19 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var languageRepository = new LanguageRepository(unitOfWork); - var repository = new DictionaryRepository(unitOfWork, languageRepository); + LanguageRepository languageRepository; + using (var repository = CreateRepository(unitOfWork, out languageRepository)) + { - // Act - var query = Query.Builder.Where(x => x.ItemKey == "Article"); - var result = repository.GetByQuery(query); + // Act + var query = Query.Builder.Where(x => x.ItemKey == "Article"); + var result = repository.GetByQuery(query); - // Assert - Assert.That(result, Is.Not.Null); - Assert.That(result.Any(), Is.True); - Assert.That(result.FirstOrDefault().ItemKey, Is.EqualTo("Article")); + // Assert + Assert.That(result, Is.Not.Null); + Assert.That(result.Any(), Is.True); + Assert.That(result.FirstOrDefault().ItemKey, Is.EqualTo("Article")); + } } [Test] @@ -120,15 +136,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var languageRepository = new LanguageRepository(unitOfWork); - var repository = new DictionaryRepository(unitOfWork, languageRepository); + LanguageRepository languageRepository; + using (var repository = CreateRepository(unitOfWork, out languageRepository)) + { - // Act - var query = Query.Builder.Where(x => x.ItemKey.StartsWith("Read")); - var result = repository.Count(query); + // Act + var query = Query.Builder.Where(x => x.ItemKey.StartsWith("Read")); + var result = repository.Count(query); - // Assert - Assert.That(result, Is.EqualTo(1)); + // Assert + Assert.That(result, Is.EqualTo(1)); + } } [Test] @@ -137,54 +155,58 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var languageRepository = new LanguageRepository(unitOfWork); - var repository = new DictionaryRepository(unitOfWork, languageRepository); + LanguageRepository languageRepository; + using (var repository = CreateRepository(unitOfWork, out languageRepository)) + { - var language = languageRepository.Get(1); + var language = languageRepository.Get(1); - var read = new DictionaryItem("Read"); - var translations = new List - { - new DictionaryTranslation(language, "Read") - }; - read.Translations = translations; + var read = new DictionaryItem("Read"); + var translations = new List + { + new DictionaryTranslation(language, "Read") + }; + read.Translations = translations; - // Act - repository.AddOrUpdate(read); - unitOfWork.Commit(); + // Act + repository.AddOrUpdate(read); + unitOfWork.Commit(); - var exists = repository.Exists(read.Id); + var exists = repository.Exists(read.Id); - // Assert - Assert.That(read.HasIdentity, Is.True); - Assert.That(exists, Is.True); + // Assert + Assert.That(read.HasIdentity, Is.True); + Assert.That(exists, Is.True); + } } - [Ignore] + [NUnit.Framework.Ignore] [Test] public void Can_Perform_Update_On_DictionaryRepository() { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var languageRepository = new LanguageRepository(unitOfWork); - var repository = new DictionaryRepository(unitOfWork, languageRepository); + LanguageRepository languageRepository; + using (var repository = CreateRepository(unitOfWork, out languageRepository)) + { - // Act - var item = repository.Get(1); - var translations = item.Translations.ToList(); - translations[0].Value = "Read even more"; - item.Translations = translations; + // Act + var item = repository.Get(1); + var translations = item.Translations.ToList(); + translations[0].Value = "Read even more"; + item.Translations = translations; - repository.AddOrUpdate(item); - unitOfWork.Commit(); + repository.AddOrUpdate(item); + unitOfWork.Commit(); - var dictionaryItem = repository.Get(1); + var dictionaryItem = repository.Get(1); - // Assert - Assert.That(dictionaryItem, Is.Not.Null); - Assert.That(dictionaryItem.Translations.Count(), Is.EqualTo(2)); - Assert.That(dictionaryItem.Translations.FirstOrDefault().Value, Is.EqualTo("Read even more")); + // Assert + Assert.That(dictionaryItem, Is.Not.Null); + Assert.That(dictionaryItem.Translations.Count(), Is.EqualTo(2)); + Assert.That(dictionaryItem.Translations.FirstOrDefault().Value, Is.EqualTo("Read even more")); + } } [Test] @@ -193,18 +215,20 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var languageRepository = new LanguageRepository(unitOfWork); - var repository = new DictionaryRepository(unitOfWork, languageRepository); + LanguageRepository languageRepository; + using (var repository = CreateRepository(unitOfWork, out languageRepository)) + { - // Act - var item = repository.Get(1); - repository.Delete(item); - unitOfWork.Commit(); + // Act + var item = repository.Get(1); + repository.Delete(item); + unitOfWork.Commit(); - var exists = repository.Exists(1); + var exists = repository.Exists(1); - // Assert - Assert.That(exists, Is.False); + // Assert + Assert.That(exists, Is.False); + } } [Test] @@ -213,14 +237,16 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var languageRepository = new LanguageRepository(unitOfWork); - var repository = new DictionaryRepository(unitOfWork, languageRepository); + LanguageRepository languageRepository; + using (var repository = CreateRepository(unitOfWork, out languageRepository)) + { - // Act - var exists = repository.Exists(1); + // Act + var exists = repository.Exists(1); - // Assert - Assert.That(exists, Is.True); + // Assert + Assert.That(exists, Is.True); + } } [TearDown] diff --git a/src/Umbraco.Tests/Persistence/Repositories/LanguageRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/LanguageRepositoryTest.cs index f4b7529c0e..c1ac5fa6a9 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/LanguageRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/LanguageRepositoryTest.cs @@ -1,6 +1,8 @@ using System.Linq; using NUnit.Framework; using Umbraco.Core.Models; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.Caching; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.UnitOfWork; @@ -19,15 +21,20 @@ namespace Umbraco.Tests.Persistence.Repositories CreateTestData(); } + private LanguageRepository CreateRepository(IDatabaseUnitOfWork unitOfWork) + { + return new LanguageRepository(unitOfWork, NullCacheProvider.Current); + } + [Test] - public void Can_Instantiate_Repository() + public void Can_Instantiate_Repository_From_Resolver() { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); // Act - var repository = new LanguageRepository(unitOfWork); + var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); // Assert Assert.That(repository, Is.Not.Null); @@ -39,16 +46,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new LanguageRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { + // Act + var language = repository.Get(1); - // Act - var language = repository.Get(1); - - // Assert - Assert.That(language, Is.Not.Null); - Assert.That(language.HasIdentity, Is.True); - Assert.That(language.CultureName, Is.EqualTo("en-US")); - Assert.That(language.IsoCode, Is.EqualTo("en-US")); + // Assert + Assert.That(language, Is.Not.Null); + Assert.That(language.HasIdentity, Is.True); + Assert.That(language.CultureName, Is.EqualTo("en-US")); + Assert.That(language.IsoCode, Is.EqualTo("en-US")); + } } [Test] @@ -57,16 +65,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new LanguageRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var languages = repository.GetAll(); + // Act + var languages = repository.GetAll(); - // Assert - Assert.That(languages, Is.Not.Null); - Assert.That(languages.Any(), Is.True); - Assert.That(languages.Any(x => x == null), Is.False); - Assert.That(languages.Count(), Is.EqualTo(5)); + // Assert + Assert.That(languages, Is.Not.Null); + Assert.That(languages.Any(), Is.True); + Assert.That(languages.Any(x => x == null), Is.False); + Assert.That(languages.Count(), Is.EqualTo(5)); + } } [Test] @@ -75,16 +85,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new LanguageRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var languages = repository.GetAll(1, 2); + // Act + var languages = repository.GetAll(1, 2); - // Assert - Assert.That(languages, Is.Not.Null); - Assert.That(languages.Any(), Is.True); - Assert.That(languages.Any(x => x == null), Is.False); - Assert.That(languages.Count(), Is.EqualTo(2)); + // Assert + Assert.That(languages, Is.Not.Null); + Assert.That(languages.Any(), Is.True); + Assert.That(languages.Any(x => x == null), Is.False); + Assert.That(languages.Count(), Is.EqualTo(2)); + } } [Test] @@ -93,16 +105,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new LanguageRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var query = Query.Builder.Where(x => x.IsoCode == "da-DK"); - var result = repository.GetByQuery(query); + // Act + var query = Query.Builder.Where(x => x.IsoCode == "da-DK"); + var result = repository.GetByQuery(query); - // Assert - Assert.That(result, Is.Not.Null); - Assert.That(result.Any(), Is.True); - Assert.That(result.FirstOrDefault().CultureName, Is.EqualTo("da-DK")); + // Assert + Assert.That(result, Is.Not.Null); + Assert.That(result.Any(), Is.True); + Assert.That(result.FirstOrDefault().CultureName, Is.EqualTo("da-DK")); + } } [Test] @@ -111,14 +125,16 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new LanguageRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var query = Query.Builder.Where(x => x.IsoCode.StartsWith("D")); - int count = repository.Count(query); + // Act + var query = Query.Builder.Where(x => x.IsoCode.StartsWith("D")); + int count = repository.Count(query); - // Assert - Assert.That(count, Is.EqualTo(2)); + // Assert + Assert.That(count, Is.EqualTo(2)); + } } [Test] @@ -127,16 +143,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new LanguageRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var languageBR = new Language("pt-BR") { CultureName = "pt-BR" }; - repository.AddOrUpdate(languageBR); - unitOfWork.Commit(); + // Act + var languageBR = new Language("pt-BR") {CultureName = "pt-BR"}; + repository.AddOrUpdate(languageBR); + unitOfWork.Commit(); - // Assert - Assert.That(languageBR.HasIdentity, Is.True); - Assert.That(languageBR.Id, Is.EqualTo(6));//With 5 existing entries the Id should be 6 + // Assert + Assert.That(languageBR.HasIdentity, Is.True); + Assert.That(languageBR.Id, Is.EqualTo(6)); //With 5 existing entries the Id should be 6 + } } [Test] @@ -145,22 +163,24 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new LanguageRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var language = repository.Get(5); - language.IsoCode = "pt-BR"; - language.CultureName = "pt-BR"; + // Act + var language = repository.Get(5); + language.IsoCode = "pt-BR"; + language.CultureName = "pt-BR"; - repository.AddOrUpdate(language); - unitOfWork.Commit(); + repository.AddOrUpdate(language); + unitOfWork.Commit(); - var languageUpdated = repository.Get(5); + var languageUpdated = repository.Get(5); - // Assert - Assert.That(languageUpdated, Is.Not.Null); - Assert.That(languageUpdated.IsoCode, Is.EqualTo("pt-BR")); - Assert.That(languageUpdated.CultureName, Is.EqualTo("pt-BR")); + // Assert + Assert.That(languageUpdated, Is.Not.Null); + Assert.That(languageUpdated.IsoCode, Is.EqualTo("pt-BR")); + Assert.That(languageUpdated.CultureName, Is.EqualTo("pt-BR")); + } } [Test] @@ -169,17 +189,19 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new LanguageRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var language = repository.Get(3); - repository.Delete(language); - unitOfWork.Commit(); + // Act + var language = repository.Get(3); + repository.Delete(language); + unitOfWork.Commit(); - var exists = repository.Exists(3); + var exists = repository.Exists(3); - // Assert - Assert.That(exists, Is.False); + // Assert + Assert.That(exists, Is.False); + } } [Test] @@ -188,15 +210,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new LanguageRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var exists = repository.Exists(3); - var doesntExist = repository.Exists(10); + // Act + var exists = repository.Exists(3); + var doesntExist = repository.Exists(10); - // Assert - Assert.That(exists, Is.True); - Assert.That(doesntExist, Is.False); + // Assert + Assert.That(exists, Is.True); + Assert.That(doesntExist, Is.False); + } } [TearDown] diff --git a/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs index b022b0ff97..28d89f4baf 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MediaRepositoryTest.cs @@ -5,6 +5,7 @@ using Umbraco.Core; using Umbraco.Core.Models; using Umbraco.Core.Models.EntityBase; using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.Caching; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.UnitOfWork; @@ -26,8 +27,15 @@ namespace Umbraco.Tests.Persistence.Repositories CreateTestData(); } + private MediaRepository CreateRepository(IDatabaseUnitOfWork unitOfWork, out MediaTypeRepository mediaTypeRepository) + { + mediaTypeRepository = new MediaTypeRepository(unitOfWork, NullCacheProvider.Current); + var repository = new MediaRepository(unitOfWork, NullCacheProvider.Current, mediaTypeRepository); + return repository; + } + [Test] - public void Can_Instantiate_Repository() + public void Can_Instantiate_Repository_From_Resolver() { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); @@ -46,20 +54,22 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var mediaTypeRepository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + MediaTypeRepository mediaTypeRepository; + using (var repository = CreateRepository(unitOfWork, out mediaTypeRepository)) + { - var mediaType = mediaTypeRepository.Get(1032); - var image = MockedMedia.CreateMediaImage(mediaType, -1); + var mediaType = mediaTypeRepository.Get(1032); + var image = MockedMedia.CreateMediaImage(mediaType, -1); - // Act - mediaTypeRepository.AddOrUpdate(mediaType); - repository.AddOrUpdate(image); - unitOfWork.Commit(); + // Act + mediaTypeRepository.AddOrUpdate(mediaType); + repository.AddOrUpdate(image); + unitOfWork.Commit(); - // Assert - Assert.That(mediaType.HasIdentity, Is.True); - Assert.That(image.HasIdentity, Is.True); + // Assert + Assert.That(mediaType.HasIdentity, Is.True); + Assert.That(image.HasIdentity, Is.True); + } } [Test] @@ -68,27 +78,29 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var mediaTypeRepository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + MediaTypeRepository mediaTypeRepository; + using (var repository = CreateRepository(unitOfWork, out mediaTypeRepository)) + { - var mediaType = mediaTypeRepository.Get(1032); - var file = MockedMedia.CreateMediaFile(mediaType, -1); + var mediaType = mediaTypeRepository.Get(1032); + var file = MockedMedia.CreateMediaFile(mediaType, -1); - // Act - repository.AddOrUpdate(file); - unitOfWork.Commit(); + // Act + repository.AddOrUpdate(file); + unitOfWork.Commit(); - var image = MockedMedia.CreateMediaImage(mediaType, -1); - repository.AddOrUpdate(image); - unitOfWork.Commit(); + var image = MockedMedia.CreateMediaImage(mediaType, -1); + repository.AddOrUpdate(image); + unitOfWork.Commit(); - // Assert - Assert.That(file.HasIdentity, Is.True); - Assert.That(image.HasIdentity, Is.True); - Assert.That(file.Name, Is.EqualTo("Test File")); - Assert.That(image.Name, Is.EqualTo("Test Image")); - Assert.That(file.ContentTypeId, Is.EqualTo(mediaType.Id)); - Assert.That(image.ContentTypeId, Is.EqualTo(mediaType.Id)); + // Assert + Assert.That(file.HasIdentity, Is.True); + Assert.That(image.HasIdentity, Is.True); + Assert.That(file.Name, Is.EqualTo("Test File")); + Assert.That(image.Name, Is.EqualTo("Test Image")); + Assert.That(file.ContentTypeId, Is.EqualTo(mediaType.Id)); + Assert.That(image.ContentTypeId, Is.EqualTo(mediaType.Id)); + } } [Test] @@ -97,27 +109,29 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var mediaTypeRepository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + MediaTypeRepository mediaTypeRepository; + using (var repository = CreateRepository(unitOfWork, out mediaTypeRepository)) + { - var mediaType = mediaTypeRepository.Get(1032); - var file = MockedMedia.CreateMediaFile(mediaType, -1); + var mediaType = mediaTypeRepository.Get(1032); + var file = MockedMedia.CreateMediaFile(mediaType, -1); - // Act - repository.AddOrUpdate(file); - unitOfWork.Commit(); + // Act + repository.AddOrUpdate(file); + unitOfWork.Commit(); - var image = MockedMedia.CreateMediaImage(mediaType, -1); - repository.AddOrUpdate(image); - unitOfWork.Commit(); + var image = MockedMedia.CreateMediaImage(mediaType, -1); + repository.AddOrUpdate(image); + unitOfWork.Commit(); - // Assert - Assert.That(file.HasIdentity, Is.True); - Assert.That(image.HasIdentity, Is.True); - Assert.That(file.Name, Is.EqualTo("Test File")); - Assert.That(image.Name, Is.EqualTo("Test Image")); - Assert.That(file.ContentTypeId, Is.EqualTo(mediaType.Id)); - Assert.That(image.ContentTypeId, Is.EqualTo(mediaType.Id)); + // Assert + Assert.That(file.HasIdentity, Is.True); + Assert.That(image.HasIdentity, Is.True); + Assert.That(file.Name, Is.EqualTo("Test File")); + Assert.That(image.Name, Is.EqualTo("Test Image")); + Assert.That(file.ContentTypeId, Is.EqualTo(mediaType.Id)); + Assert.That(image.ContentTypeId, Is.EqualTo(mediaType.Id)); + } } [Test] @@ -126,14 +140,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + MediaTypeRepository mediaTypeRepository; + using (var repository = CreateRepository(unitOfWork, out mediaTypeRepository)) + { - // Act - var media = repository.Get(1046); - bool dirty = ((ICanBeDirty)media).IsDirty(); + // Act + var media = repository.Get(1046); + bool dirty = ((ICanBeDirty) media).IsDirty(); - // Assert - Assert.That(dirty, Is.False); + // Assert + Assert.That(dirty, Is.False); + } } [Test] @@ -142,19 +159,22 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + MediaTypeRepository mediaTypeRepository; + using (var repository = CreateRepository(unitOfWork, out mediaTypeRepository)) + { - // Act - var content = repository.Get(1047); - content.Name = "Test File Updated"; - repository.AddOrUpdate(content); - unitOfWork.Commit(); + // Act + var content = repository.Get(1047); + content.Name = "Test File Updated"; + repository.AddOrUpdate(content); + unitOfWork.Commit(); - var updatedContent = repository.Get(1047); + var updatedContent = repository.Get(1047); - // Assert - Assert.That(updatedContent.Id, Is.EqualTo(content.Id)); - Assert.That(updatedContent.Name, Is.EqualTo(content.Name)); + // Assert + Assert.That(updatedContent.Id, Is.EqualTo(content.Id)); + Assert.That(updatedContent.Name, Is.EqualTo(content.Name)); + } } [Test] @@ -163,19 +183,22 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + MediaTypeRepository mediaTypeRepository; + using (var repository = CreateRepository(unitOfWork, out mediaTypeRepository)) + { - // Act - var media = repository.Get(1047); - repository.Delete(media); - unitOfWork.Commit(); + // Act + var media = repository.Get(1047); + repository.Delete(media); + unitOfWork.Commit(); - var deleted = repository.Get(1047); - var exists = repository.Exists(1047); + var deleted = repository.Get(1047); + var exists = repository.Exists(1047); - // Assert - Assert.That(deleted, Is.Null); - Assert.That(exists, Is.False); + // Assert + Assert.That(deleted, Is.Null); + Assert.That(exists, Is.False); + } } [Test] @@ -184,22 +207,25 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + MediaTypeRepository mediaTypeRepository; + using (var repository = CreateRepository(unitOfWork, out mediaTypeRepository)) + { - // Act - var media = repository.Get(1046); + // Act + var media = repository.Get(1046); - // Assert - Assert.That(media.Id, Is.EqualTo(1046)); - Assert.That(media.CreateDate, Is.GreaterThan(DateTime.MinValue)); - Assert.That(media.UpdateDate, Is.GreaterThan(DateTime.MinValue)); - Assert.That(media.ParentId, Is.Not.EqualTo(0)); - Assert.That(media.Name, Is.EqualTo("Test Image")); - Assert.That(media.SortOrder, Is.EqualTo(0)); - Assert.That(media.Version, Is.Not.EqualTo(Guid.Empty)); - Assert.That(media.ContentTypeId, Is.EqualTo(1032)); - Assert.That(media.Path, Is.Not.Empty); - Assert.That(media.Properties.Any(), Is.True); + // Assert + Assert.That(media.Id, Is.EqualTo(1046)); + Assert.That(media.CreateDate, Is.GreaterThan(DateTime.MinValue)); + Assert.That(media.UpdateDate, Is.GreaterThan(DateTime.MinValue)); + Assert.That(media.ParentId, Is.Not.EqualTo(0)); + Assert.That(media.Name, Is.EqualTo("Test Image")); + Assert.That(media.SortOrder, Is.EqualTo(0)); + Assert.That(media.Version, Is.Not.EqualTo(Guid.Empty)); + Assert.That(media.ContentTypeId, Is.EqualTo(1032)); + Assert.That(media.Path, Is.Not.Empty); + Assert.That(media.Properties.Any(), Is.True); + } } [Test] @@ -208,14 +234,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + MediaTypeRepository mediaTypeRepository; + using (var repository = CreateRepository(unitOfWork, out mediaTypeRepository)) + { - // Act - var query = Query.Builder.Where(x => x.Level == 2); - var result = repository.GetByQuery(query); + // Act + var query = Query.Builder.Where(x => x.Level == 2); + var result = repository.GetByQuery(query); - // Assert - Assert.That(result.Count(), Is.GreaterThanOrEqualTo(2));//There should be two entities on level 2: File and Media + // Assert + Assert.That(result.Count(), Is.GreaterThanOrEqualTo(2)); //There should be two entities on level 2: File and Media + } } [Test] @@ -224,15 +253,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + MediaTypeRepository mediaTypeRepository; + using (var repository = CreateRepository(unitOfWork, out mediaTypeRepository)) + { - // Act - var medias = repository.GetAll(1046, 1047); + // Act + var medias = repository.GetAll(1046, 1047); - // Assert - Assert.That(medias, Is.Not.Null); - Assert.That(medias.Any(), Is.True); - Assert.That(medias.Count(), Is.EqualTo(2)); + // Assert + Assert.That(medias, Is.Not.Null); + Assert.That(medias.Any(), Is.True); + Assert.That(medias.Count(), Is.EqualTo(2)); + } } [Test] @@ -241,15 +273,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + MediaTypeRepository mediaTypeRepository; + using (var repository = CreateRepository(unitOfWork, out mediaTypeRepository)) + { - // Act - var medias = repository.GetAll(); + // Act + var medias = repository.GetAll(); - // Assert - Assert.That(medias, Is.Not.Null); - Assert.That(medias.Any(), Is.True); - Assert.That(medias.Count(), Is.GreaterThanOrEqualTo(3)); + // Assert + Assert.That(medias, Is.Not.Null); + Assert.That(medias.Any(), Is.True); + Assert.That(medias.Count(), Is.GreaterThanOrEqualTo(3)); + } } [Test] @@ -258,17 +293,20 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + MediaTypeRepository mediaTypeRepository; + using (var repository = CreateRepository(unitOfWork, out mediaTypeRepository)) + { - // Act - var exists = repository.Exists(1046); - var existsToo = repository.Exists(1046); - var doesntExists = repository.Exists(1050); + // Act + var exists = repository.Exists(1046); + var existsToo = repository.Exists(1046); + var doesntExists = repository.Exists(1050); - // Assert - Assert.That(exists, Is.True); - Assert.That(existsToo, Is.True); - Assert.That(doesntExists, Is.False); + // Assert + Assert.That(exists, Is.True); + Assert.That(existsToo, Is.True); + Assert.That(doesntExists, Is.False); + } } [Test] @@ -277,15 +315,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + MediaTypeRepository mediaTypeRepository; + using (var repository = CreateRepository(unitOfWork, out mediaTypeRepository)) + { - // Act - int level = 2; - var query = Query.Builder.Where(x => x.Level == level); - var result = repository.Count(query); + // Act + int level = 2; + var query = Query.Builder.Where(x => x.Level == level); + var result = repository.Count(query); - // Assert - Assert.That(result, Is.GreaterThanOrEqualTo(2)); + // Assert + Assert.That(result, Is.GreaterThanOrEqualTo(2)); + } } [TearDown] diff --git a/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs index 71351a6489..7c794d6f58 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs @@ -21,8 +21,13 @@ namespace Umbraco.Tests.Persistence.Repositories base.Initialize(); } + private MediaTypeRepository CreateRepository(IDatabaseUnitOfWork unitOfWork) + { + return new MediaTypeRepository(unitOfWork, NullCacheProvider.Current); + } + [Test] - public void Can_Instantiate_Repository() + public void Can_Instantiate_Repository_From_Resolver() { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); @@ -41,18 +46,21 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { + // Act + var contentType = MockedContentTypes.CreateVideoMediaType(); + repository.AddOrUpdate(contentType); + unitOfWork.Commit(); - // Act - var contentType = MockedContentTypes.CreateVideoMediaType(); - repository.AddOrUpdate(contentType); - unitOfWork.Commit(); + // Assert + Assert.That(contentType.HasIdentity, Is.True); + Assert.That(contentType.PropertyGroups.All(x => x.HasIdentity), Is.True); + Assert.That(contentType.Path.Contains(","), Is.True); + Assert.That(contentType.SortOrder, Is.GreaterThan(0)); + } - // Assert - Assert.That(contentType.HasIdentity, Is.True); - Assert.That(contentType.PropertyGroups.All(x => x.HasIdentity), Is.True); - Assert.That(contentType.Path.Contains(","), Is.True); - Assert.That(contentType.SortOrder, Is.GreaterThan(0)); + } [Test] @@ -61,35 +69,37 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var videoMediaType = MockedContentTypes.CreateVideoMediaType(); - repository.AddOrUpdate(videoMediaType); - unitOfWork.Commit(); - - // Act - var mediaType = repository.Get(1045); - - mediaType.Thumbnail = "Doc2.png"; - mediaType.PropertyGroups["Media"].PropertyTypes.Add(new PropertyType(new Guid(), DataTypeDatabaseType.Ntext) + using (var repository = CreateRepository(unitOfWork)) { - Alias = "subtitle", - Name = "Subtitle", - Description = "Optional Subtitle", - HelpText = "", - Mandatory = false, - SortOrder = 1, - DataTypeDefinitionId = -88 - }); - repository.AddOrUpdate(mediaType); - unitOfWork.Commit(); + var videoMediaType = MockedContentTypes.CreateVideoMediaType(); + repository.AddOrUpdate(videoMediaType); + unitOfWork.Commit(); - var dirty = ((MediaType)mediaType).IsDirty(); + // Act + var mediaType = repository.Get(1045); - // Assert - Assert.That(mediaType.HasIdentity, Is.True); - Assert.That(dirty, Is.False); - Assert.That(mediaType.Thumbnail, Is.EqualTo("Doc2.png")); - Assert.That(mediaType.PropertyTypes.Any(x => x.Alias == "subtitle"), Is.True); + mediaType.Thumbnail = "Doc2.png"; + mediaType.PropertyGroups["Media"].PropertyTypes.Add(new PropertyType(new Guid(), DataTypeDatabaseType.Ntext) + { + Alias = "subtitle", + Name = "Subtitle", + Description = "Optional Subtitle", + HelpText = "", + Mandatory = false, + SortOrder = 1, + DataTypeDefinitionId = -88 + }); + repository.AddOrUpdate(mediaType); + unitOfWork.Commit(); + + var dirty = ((MediaType) mediaType).IsDirty(); + + // Assert + Assert.That(mediaType.HasIdentity, Is.True); + Assert.That(dirty, Is.False); + Assert.That(mediaType.Thumbnail, Is.EqualTo("Doc2.png")); + Assert.That(mediaType.PropertyTypes.Any(x => x.Alias == "subtitle"), Is.True); + } } [Test] @@ -98,21 +108,23 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var mediaType = MockedContentTypes.CreateVideoMediaType(); - repository.AddOrUpdate(mediaType); - unitOfWork.Commit(); + // Act + var mediaType = MockedContentTypes.CreateVideoMediaType(); + repository.AddOrUpdate(mediaType); + unitOfWork.Commit(); - var contentType2 = repository.Get(mediaType.Id); - repository.Delete(contentType2); - unitOfWork.Commit(); + var contentType2 = repository.Get(mediaType.Id); + repository.Delete(contentType2); + unitOfWork.Commit(); - var exists = repository.Exists(mediaType.Id); + var exists = repository.Exists(mediaType.Id); - // Assert - Assert.That(exists, Is.False); + // Assert + Assert.That(exists, Is.False); + } } [Test] @@ -121,15 +133,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var mediaType = repository.Get(1033);//File + // Act + var mediaType = repository.Get(1033); //File - // Assert - Assert.That(mediaType, Is.Not.Null); - Assert.That(mediaType.Id, Is.EqualTo(1033)); - Assert.That(mediaType.Name, Is.EqualTo(Constants.Conventions.MediaTypes.File)); + // Assert + Assert.That(mediaType, Is.Not.Null); + Assert.That(mediaType.Id, Is.EqualTo(1033)); + Assert.That(mediaType.Name, Is.EqualTo(Constants.Conventions.MediaTypes.File)); + } } [Test] @@ -138,19 +152,19 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - InMemoryCacheProvider.Current.Clear(); + using (var repository = CreateRepository(unitOfWork)) + { + // Act + var mediaTypes = repository.GetAll(); + int count = + DatabaseContext.Database.ExecuteScalar( + "SELECT COUNT(*) FROM umbracoNode WHERE nodeObjectType = @NodeObjectType", + new {NodeObjectType = new Guid(Constants.ObjectTypes.MediaType)}); - // Act - var mediaTypes = repository.GetAll(); - int count = - DatabaseContext.Database.ExecuteScalar( - "SELECT COUNT(*) FROM umbracoNode WHERE nodeObjectType = @NodeObjectType", - new { NodeObjectType = new Guid(Constants.ObjectTypes.MediaType) }); - - // Assert - Assert.That(mediaTypes.Any(), Is.True); - Assert.That(mediaTypes.Count(), Is.EqualTo(count)); + // Assert + Assert.That(mediaTypes.Any(), Is.True); + Assert.That(mediaTypes.Count(), Is.EqualTo(count)); + } } [Test] @@ -159,13 +173,15 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var exists = repository.Exists(1032);//Image + // Act + var exists = repository.Exists(1032); //Image - // Assert - Assert.That(exists, Is.True); + // Assert + Assert.That(exists, Is.True); + } } [Test] @@ -174,23 +190,25 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var mediaType = MockedContentTypes.CreateVideoMediaType(); - repository.AddOrUpdate(mediaType); - unitOfWork.Commit(); + using (var repository = CreateRepository(unitOfWork)) + { + var mediaType = MockedContentTypes.CreateVideoMediaType(); + repository.AddOrUpdate(mediaType); + unitOfWork.Commit(); - // Act - var mediaTypeV2 = repository.Get(1045); - mediaTypeV2.PropertyGroups["Media"].PropertyTypes.Remove("title"); - repository.AddOrUpdate(mediaTypeV2); - unitOfWork.Commit(); + // Act + var mediaTypeV2 = repository.Get(1045); + mediaTypeV2.PropertyGroups["Media"].PropertyTypes.Remove("title"); + repository.AddOrUpdate(mediaTypeV2); + unitOfWork.Commit(); - var mediaTypeV3 = repository.Get(1045); + var mediaTypeV3 = repository.Get(1045); - // Assert - Assert.That(mediaTypeV3.PropertyTypes.Any(x => x.Alias == "title"), Is.False); - Assert.That(mediaType.PropertyGroups.Count, Is.EqualTo(mediaTypeV3.PropertyGroups.Count)); - Assert.That(mediaType.PropertyTypes.Count(), Is.EqualTo(mediaTypeV3.PropertyTypes.Count())); + // Assert + Assert.That(mediaTypeV3.PropertyTypes.Any(x => x.Alias == "title"), Is.False); + Assert.That(mediaType.PropertyGroups.Count, Is.EqualTo(mediaTypeV3.PropertyGroups.Count)); + Assert.That(mediaType.PropertyTypes.Count(), Is.EqualTo(mediaTypeV3.PropertyTypes.Count())); + } } [Test] @@ -199,17 +217,19 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var mediaType = MockedContentTypes.CreateVideoMediaType(); - repository.AddOrUpdate(mediaType); - unitOfWork.Commit(); + using (var repository = CreateRepository(unitOfWork)) + { + var mediaType = MockedContentTypes.CreateVideoMediaType(); + repository.AddOrUpdate(mediaType); + unitOfWork.Commit(); - // Act - var contentType = repository.Get(1045); + // Act + var contentType = repository.Get(1045); - // Assert - Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(2)); - Assert.That(contentType.PropertyGroups.Count(), Is.EqualTo(1)); + // Assert + Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(2)); + Assert.That(contentType.PropertyGroups.Count(), Is.EqualTo(1)); + } } [Test] @@ -218,14 +238,16 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var contentType = repository.Get(1033);//File + // Act + var contentType = repository.Get(1033); //File - // Assert - Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(3)); - Assert.That(contentType.PropertyGroups.Count(), Is.EqualTo(1)); + // Assert + Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(3)); + Assert.That(contentType.PropertyGroups.Count(), Is.EqualTo(1)); + } } [TearDown] diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs index 288afe4fa9..6aa9609807 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs @@ -6,8 +6,10 @@ using Umbraco.Core.Models; using Umbraco.Core.Models.Rdbms; using Umbraco.Core.ObjectResolution; using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.Caching; 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.Core.Publishing; @@ -47,41 +49,71 @@ namespace Umbraco.Tests.Persistence.Repositories #endregion + private MemberRepository CreateRepository(IDatabaseUnitOfWork unitOfWork, out MemberTypeRepository memberTypeRepository) + { + memberTypeRepository = new MemberTypeRepository(unitOfWork, NullCacheProvider.Current); + var repository = new MemberRepository(unitOfWork, NullCacheProvider.Current, memberTypeRepository); + return repository; + } + + [Test] + public void Can_Instantiate_Repository_From_Resolver() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + + // Act + var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + + // Assert + Assert.That(repository, Is.Not.Null); + } + [Test] public void MemberRepository_Can_Get_Member_By_Id() { var unitOfWork = UnitOfWorkProvider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.Factory.CreateMemberRepository(unitOfWork); + MemberTypeRepository memberTypeRepository; + using (var repository = CreateRepository(unitOfWork, out memberTypeRepository)) + { - var member = repository.Get(1341); + var member = repository.Get(1341); - Assert.That(member, Is.Not.Null); + Assert.That(member, Is.Not.Null); + } } [Test] public void MemberRepository_Can_Get_Specific_Members() { var unitOfWork = UnitOfWorkProvider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.Factory.CreateMemberRepository(unitOfWork); + MemberTypeRepository memberTypeRepository; + using (var repository = CreateRepository(unitOfWork, out memberTypeRepository)) + { - var members = repository.GetAll(1341, 1383); + var members = repository.GetAll(1341, 1383); - Assert.That(members, Is.Not.Null); - Assert.That(members.Any(x => x == null), Is.False); - Assert.That(members.Count(), Is.EqualTo(2)); + Assert.That(members, Is.Not.Null); + Assert.That(members.Any(x => x == null), Is.False); + Assert.That(members.Count(), Is.EqualTo(2)); + } } [Test] public void MemberRepository_Can_Get_All_Members() { var unitOfWork = UnitOfWorkProvider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.Factory.CreateMemberRepository(unitOfWork); + MemberTypeRepository memberTypeRepository; + using (var repository = CreateRepository(unitOfWork, out memberTypeRepository)) + { - var members = repository.GetAll(); + var members = repository.GetAll(); - Assert.That(members, Is.Not.Null); - Assert.That(members.Any(x => x == null), Is.False); - Assert.That(members.Count(), Is.EqualTo(6)); + Assert.That(members, Is.Not.Null); + Assert.That(members.Any(x => x == null), Is.False); + Assert.That(members.Count(), Is.EqualTo(6)); + } } [Test] @@ -89,15 +121,18 @@ namespace Umbraco.Tests.Persistence.Repositories { // Arrange var unitOfWork = UnitOfWorkProvider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.Factory.CreateMemberRepository(unitOfWork); + MemberTypeRepository memberTypeRepository; + using (var repository = CreateRepository(unitOfWork, out memberTypeRepository)) + { - // Act - var query = Query.Builder.Where(x => x.Key == new Guid("A6B9CA6B-0615-42CA-B5F5-338417EC76BE")); - var result = repository.GetByQuery(query); + // Act + var query = Query.Builder.Where(x => x.Key == new Guid("A6B9CA6B-0615-42CA-B5F5-338417EC76BE")); + var result = repository.GetByQuery(query); - // Assert - Assert.That(result.Count(), Is.EqualTo(1)); - Assert.That(result.First().Id, Is.EqualTo(1341)); + // Assert + Assert.That(result.Count(), Is.EqualTo(1)); + Assert.That(result.First().Id, Is.EqualTo(1341)); + } } [Test] @@ -105,16 +140,19 @@ namespace Umbraco.Tests.Persistence.Repositories { // Arrange var unitOfWork = UnitOfWorkProvider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.Factory.CreateMemberRepository(unitOfWork); + MemberTypeRepository memberTypeRepository; + using (var repository = CreateRepository(unitOfWork, out memberTypeRepository)) + { - // Act - var query = Query.Builder.Where(x => ((Member)x).ShortStringPropertyValue.EndsWith("piquet_h")); - var result = repository.GetByQuery(query); + // Act + var query = Query.Builder.Where(x => ((Member) x).ShortStringPropertyValue.EndsWith("piquet_h")); + var result = repository.GetByQuery(query); - // Assert - Assert.That(result.Any(x => x == null), Is.False); - Assert.That(result.Count(), Is.EqualTo(1)); - Assert.That(result.First().Id, Is.EqualTo(1341)); + // Assert + Assert.That(result.Any(x => x == null), Is.False); + Assert.That(result.Count(), Is.EqualTo(1)); + Assert.That(result.First().Id, Is.EqualTo(1341)); + } } [Test] @@ -122,15 +160,18 @@ namespace Umbraco.Tests.Persistence.Repositories { // Arrange var unitOfWork = UnitOfWorkProvider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.Factory.CreateMemberRepository(unitOfWork); + MemberTypeRepository memberTypeRepository; + using (var repository = CreateRepository(unitOfWork, out memberTypeRepository)) + { - // Act - var query = Query.Builder.Where(x => ((Member)x).LongStringPropertyValue.Contains("1095") && ((Member)x).PropertyTypeAlias == "headshot"); - var result = repository.GetByQuery(query); + // Act + var query = Query.Builder.Where(x => ((Member) x).LongStringPropertyValue.Contains("1095") && ((Member) x).PropertyTypeAlias == "headshot"); + var result = repository.GetByQuery(query); - // Assert - Assert.That(result.Any(x => x == null), Is.False); - Assert.That(result.Count(), Is.EqualTo(5)); + // Assert + Assert.That(result.Any(x => x == null), Is.False); + Assert.That(result.Count(), Is.EqualTo(5)); + } } [Test] @@ -212,55 +253,6 @@ namespace Umbraco.Tests.Persistence.Repositories } } - [TestFixture, NUnit.Framework.Ignore] - public class MemberTypeRepositoryTest : MemberRepositoryBaseTest - { - #region Overrides of MemberRepositoryBaseTest - - [SetUp] - public override void Initialize() - { - base.Initialize(); - - SqlSyntaxContext.SqlSyntaxProvider = SqlServerSyntax.Provider; - } - - [TearDown] - public override void TearDown() - { - base.TearDown(); - } - - public override string ConnectionString - { - get { return @"server=.\SQLEXPRESS;database=Kloud-Website-Production;user id=umbraco;password=umbraco"; } - } - - public override string ProviderName - { - get { return "System.Data.SqlClient"; } - } - - #endregion - - [Test] - public void MemberTypeRepository_Can_Get_MemberType_By_Id() - { - var unitOfWork = UnitOfWorkProvider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.Factory.CreateMemberTypeRepository(unitOfWork); - - var memberType = repository.Get(1340); - - Assert.That(memberType, Is.Not.Null); - Assert.That(memberType.PropertyTypes.Count(), Is.EqualTo(13)); - Assert.That(memberType.PropertyGroups.Any(), Is.False); - - repository.AddOrUpdate(memberType); - unitOfWork.Commit(); - Assert.That(memberType.PropertyTypes.Any(x => x.HasIdentity == false), Is.False); - } - } - [TestFixture] public abstract class MemberRepositoryBaseTest { diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs new file mode 100644 index 0000000000..cc4553cce5 --- /dev/null +++ b/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs @@ -0,0 +1,80 @@ +using System.Linq; +using NUnit.Framework; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.Caching; +using Umbraco.Core.Persistence.Repositories; +using Umbraco.Core.Persistence.SqlSyntax; +using Umbraco.Core.Persistence.UnitOfWork; + +namespace Umbraco.Tests.Persistence.Repositories +{ + [TestFixture, NUnit.Framework.Ignore] + public class MemberTypeRepositoryTest : MemberRepositoryBaseTest + { + #region Overrides of MemberRepositoryBaseTest + + [SetUp] + public override void Initialize() + { + base.Initialize(); + + SqlSyntaxContext.SqlSyntaxProvider = SqlServerSyntax.Provider; + } + + [TearDown] + public override void TearDown() + { + base.TearDown(); + } + + public override string ConnectionString + { + get { return @"server=.\SQLEXPRESS;database=Kloud-Website-Production;user id=umbraco;password=umbraco"; } + } + + public override string ProviderName + { + get { return "System.Data.SqlClient"; } + } + + #endregion + + private MemberTypeRepository CreateRepository(IDatabaseUnitOfWork unitOfWork) + { + return new MemberTypeRepository(unitOfWork, NullCacheProvider.Current); + } + + [Test] + public void Can_Instantiate_Repository_From_Resolver() + { + // Arrange + var provider = new PetaPocoUnitOfWorkProvider(); + var unitOfWork = provider.GetUnitOfWork(); + + // Act + var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + + // Assert + Assert.That(repository, Is.Not.Null); + } + + [Test] + public void MemberTypeRepository_Can_Get_MemberType_By_Id() + { + var unitOfWork = UnitOfWorkProvider.GetUnitOfWork(); + using (var repository = CreateRepository(unitOfWork)) + { + + var memberType = repository.Get(1340); + + Assert.That(memberType, Is.Not.Null); + Assert.That(memberType.PropertyTypes.Count(), Is.EqualTo(13)); + Assert.That(memberType.PropertyGroups.Any(), Is.False); + + repository.AddOrUpdate(memberType); + unitOfWork.Commit(); + Assert.That(memberType.PropertyTypes.Any(x => x.HasIdentity == false), Is.False); + } + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Tests/Persistence/Repositories/RelationRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/RelationRepositoryTest.cs index ec14d6aaf2..c727e04fd4 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/RelationRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/RelationRepositoryTest.cs @@ -3,6 +3,7 @@ using System.Linq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Models; +using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Caching; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.Repositories; @@ -25,16 +26,22 @@ namespace Umbraco.Tests.Persistence.Repositories CreateTestData(); } + private RelationRepository CreateRepository(IDatabaseUnitOfWork unitOfWork, out RelationTypeRepository relationTypeRepository) + { + relationTypeRepository = new RelationTypeRepository(unitOfWork, NullCacheProvider.Current); + var repository = new RelationRepository(unitOfWork, NullCacheProvider.Current, relationTypeRepository); + return repository; + } + [Test] - public void Can_Instantiate_Repository() + public void Can_Instantiate_Repository_From_Resolver() { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); // Act - var repositoryType = new RelationTypeRepository(unitOfWork); - var repository = new RelationRepository(unitOfWork, NullCacheProvider.Current, repositoryType); + var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); // Assert Assert.That(repository, Is.Not.Null); @@ -46,18 +53,20 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repositoryType = new RelationTypeRepository(unitOfWork); - var repository = new RelationRepository(unitOfWork, NullCacheProvider.Current, repositoryType); + RelationTypeRepository repositoryType; + using (var repository = CreateRepository(unitOfWork, out repositoryType)) + { - // Act - var relationType = repositoryType.Get(1); - var relation = new Relation(1047, 1048, relationType); - repository.AddOrUpdate(relation); - unitOfWork.Commit(); + // Act + var relationType = repositoryType.Get(1); + var relation = new Relation(1047, 1048, relationType); + repository.AddOrUpdate(relation); + unitOfWork.Commit(); - // Assert - Assert.That(relation, Is.Not.Null); - Assert.That(relation.HasIdentity, Is.True); + // Assert + Assert.That(relation, Is.Not.Null); + Assert.That(relation.HasIdentity, Is.True); + } } [Test] @@ -66,21 +75,23 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repositoryType = new RelationTypeRepository(unitOfWork); - var repository = new RelationRepository(unitOfWork, NullCacheProvider.Current, repositoryType); + RelationTypeRepository repositoryType; + using (var repository = CreateRepository(unitOfWork, out repositoryType)) + { - // Act - var relation = repository.Get(1); - relation.Comment = "This relation has been updated"; - repository.AddOrUpdate(relation); - unitOfWork.Commit(); + // Act + var relation = repository.Get(1); + relation.Comment = "This relation has been updated"; + repository.AddOrUpdate(relation); + unitOfWork.Commit(); - var relationUpdated = repository.Get(1); + var relationUpdated = repository.Get(1); - // Assert - Assert.That(relationUpdated, Is.Not.Null); - Assert.That(relationUpdated.Comment, Is.EqualTo("This relation has been updated")); - Assert.AreNotEqual(relationUpdated.UpdateDate, relation.UpdateDate); + // Assert + Assert.That(relationUpdated, Is.Not.Null); + Assert.That(relationUpdated.Comment, Is.EqualTo("This relation has been updated")); + Assert.AreNotEqual(relationUpdated.UpdateDate, relation.UpdateDate); + } } [Test] @@ -89,18 +100,20 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repositoryType = new RelationTypeRepository(unitOfWork); - var repository = new RelationRepository(unitOfWork, NullCacheProvider.Current, repositoryType); + RelationTypeRepository repositoryType; + using (var repository = CreateRepository(unitOfWork, out repositoryType)) + { - // Act - var relation = repository.Get(2); - repository.Delete(relation); - unitOfWork.Commit(); + // Act + var relation = repository.Get(2); + repository.Delete(relation); + unitOfWork.Commit(); - var exists = repository.Exists(2); + var exists = repository.Exists(2); - // Assert - Assert.That(exists, Is.False); + // Assert + Assert.That(exists, Is.False); + } } [Test] @@ -109,18 +122,20 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repositoryType = new RelationTypeRepository(unitOfWork); - var repository = new RelationRepository(unitOfWork, NullCacheProvider.Current, repositoryType); + RelationTypeRepository repositoryType; + using (var repository = CreateRepository(unitOfWork, out repositoryType)) + { - // Act - var relation = repository.Get(1); + // Act + var relation = repository.Get(1); - // Assert - Assert.That(relation, Is.Not.Null); - Assert.That(relation.HasIdentity, Is.True); - Assert.That(relation.ChildId, Is.EqualTo(1047)); - Assert.That(relation.ParentId, Is.EqualTo(1046)); - Assert.That(relation.RelationType.Alias, Is.EqualTo("relateContentOnCopy")); + // Assert + Assert.That(relation, Is.Not.Null); + Assert.That(relation.HasIdentity, Is.True); + Assert.That(relation.ChildId, Is.EqualTo(1047)); + Assert.That(relation.ParentId, Is.EqualTo(1046)); + Assert.That(relation.RelationType.Alias, Is.EqualTo("relateContentOnCopy")); + } } [Test] @@ -129,17 +144,19 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repositoryType = new RelationTypeRepository(unitOfWork); - var repository = new RelationRepository(unitOfWork, NullCacheProvider.Current, repositoryType); + RelationTypeRepository repositoryType; + using (var repository = CreateRepository(unitOfWork, out repositoryType)) + { - // Act - var relations = repository.GetAll(); + // Act + var relations = repository.GetAll(); - // Assert - Assert.That(relations, Is.Not.Null); - Assert.That(relations.Any(), Is.True); - Assert.That(relations.Any(x => x == null), Is.False); - Assert.That(relations.Count(), Is.EqualTo(2)); + // Assert + Assert.That(relations, Is.Not.Null); + Assert.That(relations.Any(), Is.True); + Assert.That(relations.Any(x => x == null), Is.False); + Assert.That(relations.Count(), Is.EqualTo(2)); + } } [Test] @@ -148,17 +165,19 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repositoryType = new RelationTypeRepository(unitOfWork); - var repository = new RelationRepository(unitOfWork, NullCacheProvider.Current, repositoryType); + RelationTypeRepository repositoryType; + using (var repository = CreateRepository(unitOfWork, out repositoryType)) + { - // Act - var relations = repository.GetAll(1, 2); + // Act + var relations = repository.GetAll(1, 2); - // Assert - Assert.That(relations, Is.Not.Null); - Assert.That(relations.Any(), Is.True); - Assert.That(relations.Any(x => x == null), Is.False); - Assert.That(relations.Count(), Is.EqualTo(2)); + // Assert + Assert.That(relations, Is.Not.Null); + Assert.That(relations.Any(), Is.True); + Assert.That(relations.Any(x => x == null), Is.False); + Assert.That(relations.Count(), Is.EqualTo(2)); + } } [Test] @@ -167,16 +186,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repositoryType = new RelationTypeRepository(unitOfWork); - var repository = new RelationRepository(unitOfWork, NullCacheProvider.Current, repositoryType); + RelationTypeRepository repositoryType; + using (var repository = CreateRepository(unitOfWork, out repositoryType)) + { - // Act - var exists = repository.Exists(2); - var doesntExist = repository.Exists(5); + // Act + var exists = repository.Exists(2); + var doesntExist = repository.Exists(5); - // Assert - Assert.That(exists, Is.True); - Assert.That(doesntExist, Is.False); + // Assert + Assert.That(exists, Is.True); + Assert.That(doesntExist, Is.False); + } } [Test] @@ -185,15 +206,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repositoryType = new RelationTypeRepository(unitOfWork); - var repository = new RelationRepository(unitOfWork, NullCacheProvider.Current, repositoryType); + RelationTypeRepository repositoryType; + using (var repository = CreateRepository(unitOfWork, out repositoryType)) + { - // Act - var query = Query.Builder.Where(x => x.ParentId == 1046); - int count = repository.Count(query); + // Act + var query = Query.Builder.Where(x => x.ParentId == 1046); + int count = repository.Count(query); - // Assert - Assert.That(count, Is.EqualTo(2)); + // Assert + Assert.That(count, Is.EqualTo(2)); + } } [Test] @@ -202,18 +225,20 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repositoryType = new RelationTypeRepository(unitOfWork); - var repository = new RelationRepository(unitOfWork, NullCacheProvider.Current, repositoryType); + RelationTypeRepository repositoryType; + using (var repository = CreateRepository(unitOfWork, out repositoryType)) + { - // Act - var query = Query.Builder.Where(x => x.RelationTypeId == 2); - var relations = repository.GetByQuery(query); + // Act + var query = Query.Builder.Where(x => x.RelationTypeId == 2); + var relations = repository.GetByQuery(query); - // Assert - Assert.That(relations, Is.Not.Null); - Assert.That(relations.Any(), Is.True); - Assert.That(relations.Any(x => x == null), Is.False); - Assert.That(relations.Count(), Is.EqualTo(2)); + // Assert + Assert.That(relations, Is.Not.Null); + Assert.That(relations.Any(), Is.True); + Assert.That(relations.Any(x => x == null), Is.False); + Assert.That(relations.Count(), Is.EqualTo(2)); + } } [Test] @@ -222,19 +247,21 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repositoryType = new RelationTypeRepository(unitOfWork); - var repository = new RelationRepository(unitOfWork, NullCacheProvider.Current, repositoryType); + RelationTypeRepository repositoryType; + using (var repository = CreateRepository(unitOfWork, out repositoryType)) + { - var content = ServiceContext.ContentService.GetById(1047); - ServiceContext.ContentService.Delete(content, 0); + var content = ServiceContext.ContentService.GetById(1047); + ServiceContext.ContentService.Delete(content, 0); - // Act - var shouldntExist = repository.Exists(1); - var shouldExist = repository.Exists(2); + // Act + var shouldntExist = repository.Exists(1); + var shouldExist = repository.Exists(2); - // Assert - Assert.That(shouldntExist, Is.False); - Assert.That(shouldExist, Is.True); + // Assert + Assert.That(shouldntExist, Is.False); + Assert.That(shouldExist, Is.True); + } } [TearDown] diff --git a/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs index eef7a8c133..1cea1b4bb3 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/RelationTypeRepositoryTest.cs @@ -3,6 +3,8 @@ using System.Linq; using NUnit.Framework; using Umbraco.Core; using Umbraco.Core.Models; +using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.Caching; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.UnitOfWork; @@ -21,15 +23,20 @@ namespace Umbraco.Tests.Persistence.Repositories CreateTestData(); } + private RelationTypeRepository CreateRepository(IDatabaseUnitOfWork unitOfWork) + { + return new RelationTypeRepository(unitOfWork, NullCacheProvider.Current); + } + [Test] - public void Can_Instantiate_Repository() + public void Can_Instantiate_Repository_From_Resolver() { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); // Act - var repository = new RelationTypeRepository(unitOfWork); + var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); // Assert Assert.That(repository, Is.Not.Null); @@ -41,21 +48,21 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new RelationTypeRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var relateMemberToContent = new RelationType(new Guid(Constants.ObjectTypes.Member), - new Guid(Constants.ObjectTypes.Document), - "relateMemberToContent") - {IsBidirectional = true, Name = "Relate Member to Content"}; - - repository.AddOrUpdate(relateMemberToContent); - unitOfWork.Commit(); + // Act + var relateMemberToContent = new RelationType(new Guid(Constants.ObjectTypes.Member), + new Guid(Constants.ObjectTypes.Document), + "relateMemberToContent") {IsBidirectional = true, Name = "Relate Member to Content"}; - // Assert - Assert.That(relateMemberToContent.HasIdentity, Is.True); - Assert.That(repository.Exists(relateMemberToContent.Id), Is.True); + repository.AddOrUpdate(relateMemberToContent); + unitOfWork.Commit(); + // Assert + Assert.That(relateMemberToContent.HasIdentity, Is.True); + Assert.That(repository.Exists(relateMemberToContent.Id), Is.True); + } } [Test] @@ -64,22 +71,24 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new RelationTypeRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var relationType = repository.Get(3); - relationType.Alias = relationType.Alias + "Updated"; - relationType.Name = relationType.Name + " Updated"; - repository.AddOrUpdate(relationType); - unitOfWork.Commit(); + // 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); + 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)); + // 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] @@ -88,17 +97,19 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new RelationTypeRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var relationType = repository.Get(3); - repository.Delete(relationType); - unitOfWork.Commit(); + // Act + var relationType = repository.Get(3); + repository.Delete(relationType); + unitOfWork.Commit(); - var exists = repository.Exists(3); + var exists = repository.Exists(3); - // Assert - Assert.That(exists, Is.False); + // Assert + Assert.That(exists, Is.False); + } } [Test] @@ -107,16 +118,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new RelationTypeRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var relationType = repository.Get(2); + // 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")); + // 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] @@ -125,16 +138,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new RelationTypeRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var relationTypes = repository.GetAll(); + // 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)); + // 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] @@ -143,16 +158,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new RelationTypeRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var relationTypes = repository.GetAll(2, 3); + // 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)); + // 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] @@ -161,15 +178,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new RelationTypeRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var exists = repository.Exists(3); - var doesntExist = repository.Exists(5); + // Act + var exists = repository.Exists(3); + var doesntExist = repository.Exists(5); - // Assert - Assert.That(exists, Is.True); - Assert.That(doesntExist, Is.False); + // Assert + Assert.That(exists, Is.True); + Assert.That(doesntExist, Is.False); + } } [Test] @@ -178,14 +197,16 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new RelationTypeRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var query = Query.Builder.Where(x => x.Alias.StartsWith("relate")); - int count = repository.Count(query); + // Act + var query = Query.Builder.Where(x => x.Alias.StartsWith("relate")); + int count = repository.Count(query); - // Assert - Assert.That(count, Is.EqualTo(3)); + // Assert + Assert.That(count, Is.EqualTo(3)); + } } [Test] @@ -194,18 +215,20 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = new RelationTypeRepository(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - // Act - var childObjType = new Guid(Constants.ObjectTypes.DocumentType); - var query = Query.Builder.Where(x => x.ChildObjectType == childObjType); - var result = repository.GetByQuery(query); + // Act + var childObjType = new Guid(Constants.ObjectTypes.DocumentType); + 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)); + // 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] diff --git a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs index c594061b4e..25d16963d2 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs @@ -4,6 +4,7 @@ using System.Text; using NUnit.Framework; using Umbraco.Core.IO; using Umbraco.Core.Models; +using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.UnitOfWork; @@ -23,14 +24,14 @@ namespace Umbraco.Tests.Persistence.Repositories } [Test] - public void Can_Instantiate_Repository() + public void Can_Instantiate_Repository_From_Resolver() { // Arrange var provider = new FileUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); // Act - var repository = new ScriptRepository(unitOfWork, _fileSystem); + var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); // Assert Assert.That(repository, Is.Not.Null); diff --git a/src/Umbraco.Tests/Persistence/Repositories/ServerRegistrationRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ServerRegistrationRepositoryTest.cs index ef1bda3c5c..19b4a7f7d9 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ServerRegistrationRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ServerRegistrationRepositoryTest.cs @@ -3,6 +3,7 @@ using System.Data.SqlServerCe; using System.Linq; using NUnit.Framework; using Umbraco.Core.Models; +using Umbraco.Core.Persistence.Caching; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.UnitOfWork; @@ -21,6 +22,11 @@ namespace Umbraco.Tests.Persistence.Repositories CreateTestData(); } + private ServerRegistrationRepository CreateRepositor(IDatabaseUnitOfWork unitOfWork) + { + return new ServerRegistrationRepository(unitOfWork, NullCacheProvider.Current); + } + [Test] public void Cannot_Add_Duplicate_Computer_Names() { @@ -29,7 +35,7 @@ namespace Umbraco.Tests.Persistence.Repositories var unitOfWork = provider.GetUnitOfWork(); // Act - using (var repository = new ServerRegistrationRepository(unitOfWork)) + using (var repository = CreateRepositor(unitOfWork)) { var server = new ServerRegistration("http://shazwazza.com", "COMPUTER1", DateTime.Now); repository.AddOrUpdate(server); @@ -47,7 +53,7 @@ namespace Umbraco.Tests.Persistence.Repositories var unitOfWork = provider.GetUnitOfWork(); // Act - using (var repository = new ServerRegistrationRepository(unitOfWork)) + using (var repository = CreateRepositor(unitOfWork)) { var server = repository.Get(1); server.ComputerName = "COMPUTER2"; @@ -65,7 +71,7 @@ namespace Umbraco.Tests.Persistence.Repositories var unitOfWork = provider.GetUnitOfWork(); // Act - using (var repository = new ServerRegistrationRepository(unitOfWork)) + using (var repository = CreateRepositor(unitOfWork)) { // Assert Assert.That(repository, Is.Not.Null); @@ -78,7 +84,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new ServerRegistrationRepository(unitOfWork)) + using (var repository = CreateRepositor(unitOfWork)) { // Act var server = repository.Get(1); @@ -98,7 +104,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new ServerRegistrationRepository(unitOfWork)) + using (var repository = CreateRepositor(unitOfWork)) { // Act var servers = repository.GetAll(); @@ -115,7 +121,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new ServerRegistrationRepository(unitOfWork)) + using (var repository = CreateRepositor(unitOfWork)) { // Act var query = Query.Builder.Where(x => x.ComputerName.ToUpper() == "COMPUTER3"); @@ -132,7 +138,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new ServerRegistrationRepository(unitOfWork)) + using (var repository = CreateRepositor(unitOfWork)) { // Act var query = Query.Builder.Where(x => x.ServerAddress.StartsWith("http://")); @@ -149,7 +155,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new ServerRegistrationRepository(unitOfWork)) + using (var repository = CreateRepositor(unitOfWork)) { // Act var server = new ServerRegistration("http://shazwazza.com", "COMPUTER4", DateTime.Now); @@ -168,7 +174,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new ServerRegistrationRepository(unitOfWork)) + using (var repository = CreateRepositor(unitOfWork)) { // Act var server = repository.Get(2); @@ -193,7 +199,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new ServerRegistrationRepository(unitOfWork)) + using (var repository = CreateRepositor(unitOfWork)) { // Act var server = repository.Get(3); @@ -214,7 +220,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = new ServerRegistrationRepository(unitOfWork)) + using (var repository = CreateRepositor(unitOfWork)) { // Act var exists = repository.Exists(3); diff --git a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs index 76930a98ba..d518bddd0e 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs @@ -4,6 +4,7 @@ using System.Text; using NUnit.Framework; using Umbraco.Core.IO; using Umbraco.Core.Models; +using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.UnitOfWork; @@ -23,14 +24,14 @@ namespace Umbraco.Tests.Persistence.Repositories } [Test] - public void Can_Instantiate_Repository() + public void Can_Instantiate_Repository_From_Resolver() { // Arrange var provider = new FileUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); // Act - var repository = new StylesheetRepository(unitOfWork, _fileSystem); + var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); // Assert Assert.That(repository, Is.Not.Null); diff --git a/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs index a341a5cc74..b477d8b8a1 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/UserRepositoryTest.cs @@ -4,6 +4,7 @@ using System.Linq; using NUnit.Framework; using Umbraco.Core.Models.Membership; using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.Caching; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.UnitOfWork; @@ -27,8 +28,15 @@ namespace Umbraco.Tests.Persistence.Repositories base.TearDown(); } + private UserRepository CreateRepository(IDatabaseUnitOfWork unitOfWork, out UserTypeRepository userTypeRepository) + { + userTypeRepository = new UserTypeRepository(unitOfWork, NullCacheProvider.Current); + var repository = new UserRepository(unitOfWork, NullCacheProvider.Current, userTypeRepository); + return repository; + } + [Test] - public void Can_Instantiate_Repository() + public void Can_Instantiate_Repository_From_Resolver() { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); @@ -47,16 +55,19 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + UserTypeRepository userTypeRepository; + using (var repository = CreateRepository(unitOfWork, out userTypeRepository)) + { - var user = MockedUser.CreateUser(CreateAndCommitUserType()); + var user = MockedUser.CreateUser(CreateAndCommitUserType()); - // Act - repository.AddOrUpdate(user); - unitOfWork.Commit(); + // Act + repository.AddOrUpdate(user); + unitOfWork.Commit(); - // Assert - Assert.That(user.HasIdentity, Is.True); + // Assert + Assert.That(user.HasIdentity, Is.True); + } } [Test] @@ -65,20 +76,23 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + UserTypeRepository userTypeRepository; + using (var repository = CreateRepository(unitOfWork, out userTypeRepository)) + { - var user1 = MockedUser.CreateUser(CreateAndCommitUserType(), "1"); - var use2 = MockedUser.CreateUser(CreateAndCommitUserType(), "2"); + var user1 = MockedUser.CreateUser(CreateAndCommitUserType(), "1"); + var use2 = MockedUser.CreateUser(CreateAndCommitUserType(), "2"); - // Act - repository.AddOrUpdate(user1); - unitOfWork.Commit(); - repository.AddOrUpdate(use2); - unitOfWork.Commit(); + // Act + repository.AddOrUpdate(user1); + unitOfWork.Commit(); + repository.AddOrUpdate(use2); + unitOfWork.Commit(); - // Assert - Assert.That(user1.HasIdentity, Is.True); - Assert.That(use2.HasIdentity, Is.True); + // Assert + Assert.That(user1.HasIdentity, Is.True); + Assert.That(use2.HasIdentity, Is.True); + } } [Test] @@ -87,17 +101,20 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var user = MockedUser.CreateUser(CreateAndCommitUserType()); - repository.AddOrUpdate(user); - unitOfWork.Commit(); + UserTypeRepository userTypeRepository; + using (var repository = CreateRepository(unitOfWork, out userTypeRepository)) + { + var user = MockedUser.CreateUser(CreateAndCommitUserType()); + repository.AddOrUpdate(user); + unitOfWork.Commit(); - // Act - var resolved = repository.Get((int)user.Id); - bool dirty = ((User)resolved).IsDirty(); + // Act + var resolved = repository.Get((int)user.Id); + bool dirty = ((User)resolved).IsDirty(); - // Assert - Assert.That(dirty, Is.False); + // Assert + Assert.That(dirty, Is.False); + } } [Test] @@ -106,46 +123,49 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var user = MockedUser.CreateUser(CreateAndCommitUserType()); - repository.AddOrUpdate(user); - unitOfWork.Commit(); + UserTypeRepository userTypeRepository; + using (var repository = CreateRepository(unitOfWork, out userTypeRepository)) + { + var user = MockedUser.CreateUser(CreateAndCommitUserType()); + repository.AddOrUpdate(user); + unitOfWork.Commit(); - // Act - var resolved = repository.Get((int)user.Id); - - resolved.Name = "New Name"; - resolved.DefaultPermissions = "ZYX"; - resolved.Language = "fr"; - resolved.IsApproved = false; - resolved.Password = "new"; - resolved.NoConsole = true; - resolved.StartContentId = 10; - resolved.StartMediaId = 11; - resolved.DefaultToLiveEditing = true; - resolved.Email = "new@new.com"; - resolved.Username = "newName"; - resolved.RemoveAllowedSection("content"); + // Act + var resolved = repository.Get((int)user.Id); - repository.AddOrUpdate(resolved); - unitOfWork.Commit(); - var updatedItem = repository.Get((int)user.Id); + resolved.Name = "New Name"; + resolved.DefaultPermissions = "ZYX"; + resolved.Language = "fr"; + resolved.IsApproved = false; + resolved.Password = "new"; + resolved.NoConsole = true; + resolved.StartContentId = 10; + resolved.StartMediaId = 11; + resolved.DefaultToLiveEditing = true; + resolved.Email = "new@new.com"; + resolved.Username = "newName"; + resolved.RemoveAllowedSection("content"); - // Assert - Assert.That(updatedItem.Id, Is.EqualTo(resolved.Id)); - Assert.That(updatedItem.Name, Is.EqualTo(resolved.Name)); - Assert.That(updatedItem.DefaultPermissions, Is.EqualTo(resolved.DefaultPermissions)); - Assert.That(updatedItem.Language, Is.EqualTo(resolved.Language)); - Assert.That(updatedItem.IsApproved, Is.EqualTo(resolved.IsApproved)); - Assert.That(updatedItem.Password, Is.EqualTo(resolved.Password)); - Assert.That(updatedItem.NoConsole, Is.EqualTo(resolved.NoConsole)); - Assert.That(updatedItem.StartContentId, Is.EqualTo(resolved.StartContentId)); - Assert.That(updatedItem.StartMediaId, Is.EqualTo(resolved.StartMediaId)); - Assert.That(updatedItem.DefaultToLiveEditing, Is.EqualTo(resolved.DefaultToLiveEditing)); - Assert.That(updatedItem.Email, Is.EqualTo(resolved.Email)); - Assert.That(updatedItem.Username, Is.EqualTo(resolved.Username)); - Assert.That(updatedItem.AllowedSections.Count(), Is.EqualTo(1)); - Assert.IsTrue(updatedItem.AllowedSections.Contains("media")); + repository.AddOrUpdate(resolved); + unitOfWork.Commit(); + var updatedItem = repository.Get((int)user.Id); + + // Assert + Assert.That(updatedItem.Id, Is.EqualTo(resolved.Id)); + Assert.That(updatedItem.Name, Is.EqualTo(resolved.Name)); + Assert.That(updatedItem.DefaultPermissions, Is.EqualTo(resolved.DefaultPermissions)); + Assert.That(updatedItem.Language, Is.EqualTo(resolved.Language)); + Assert.That(updatedItem.IsApproved, Is.EqualTo(resolved.IsApproved)); + Assert.That(updatedItem.Password, Is.EqualTo(resolved.Password)); + Assert.That(updatedItem.NoConsole, Is.EqualTo(resolved.NoConsole)); + Assert.That(updatedItem.StartContentId, Is.EqualTo(resolved.StartContentId)); + Assert.That(updatedItem.StartMediaId, Is.EqualTo(resolved.StartMediaId)); + Assert.That(updatedItem.DefaultToLiveEditing, Is.EqualTo(resolved.DefaultToLiveEditing)); + Assert.That(updatedItem.Email, Is.EqualTo(resolved.Email)); + Assert.That(updatedItem.Username, Is.EqualTo(resolved.Username)); + Assert.That(updatedItem.AllowedSections.Count(), Is.EqualTo(1)); + Assert.IsTrue(updatedItem.AllowedSections.Contains("media")); + } } [Test] @@ -154,23 +174,26 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + UserTypeRepository userTypeRepository; + using (var repository = CreateRepository(unitOfWork, out userTypeRepository)) + { - var user = MockedUser.CreateUser(CreateAndCommitUserType()); + var user = MockedUser.CreateUser(CreateAndCommitUserType()); - // Act - repository.AddOrUpdate(user); - unitOfWork.Commit(); - var id = user.Id; + // Act + repository.AddOrUpdate(user); + unitOfWork.Commit(); + var id = user.Id; - var repository2 = RepositoryResolver.Current.ResolveByType(unitOfWork); - repository2.Delete(user); - unitOfWork.Commit(); + var repository2 = RepositoryResolver.Current.ResolveByType(unitOfWork); + repository2.Delete(user); + unitOfWork.Commit(); - var resolved = repository2.Get((int)id); + var resolved = repository2.Get((int)id); - // Assert - Assert.That(resolved, Is.Null); + // Assert + Assert.That(resolved, Is.Null); + } } //[Test] @@ -179,7 +202,9 @@ namespace Umbraco.Tests.Persistence.Repositories // // Arrange // var provider = new PetaPocoUnitOfWorkProvider(); // var unitOfWork = provider.GetUnitOfWork(); - // var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + // UserTypeRepository userTypeRepository; + //using (var repository = CreateRepository(unitOfWork, out userTypeRepository)) + //{ // var user = MockedUser.CreateUser(CreateAndCommitUserType()); // //repository.AssignPermissions() @@ -199,39 +224,47 @@ namespace Umbraco.Tests.Persistence.Repositories // Assert.That(resolved, Is.Null); //} + //} + [Test] public void Can_Perform_Get_On_UserRepository() { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var user = MockedUser.CreateUser(CreateAndCommitUserType()); - repository.AddOrUpdate(user); - unitOfWork.Commit(); + UserTypeRepository userTypeRepository; + using (var repository = CreateRepository(unitOfWork, out userTypeRepository)) + { + var user = MockedUser.CreateUser(CreateAndCommitUserType()); + repository.AddOrUpdate(user); + unitOfWork.Commit(); - // Act - var updatedItem = repository.Get((int)user.Id); + // Act + var updatedItem = repository.Get((int) user.Id); - // Assert - AssertPropertyValues(updatedItem, user); + // Assert + AssertPropertyValues(updatedItem, user); + } } - + [Test] public void Can_Perform_GetByQuery_On_UserRepository() { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - CreateAndCommitMultipleUsers(repository, unitOfWork); + UserTypeRepository userTypeRepository; + using (var repository = CreateRepository(unitOfWork, out userTypeRepository)) + { + CreateAndCommitMultipleUsers(repository, unitOfWork); - // Act - var query = Query.Builder.Where(x => x.Username == "TestUser1"); - var result = repository.GetByQuery(query); + // Act + var query = Query.Builder.Where(x => x.Username == "TestUser1"); + var result = repository.GetByQuery(query); - // Assert - Assert.That(result.Count(), Is.GreaterThanOrEqualTo(1)); + // Assert + Assert.That(result.Count(), Is.GreaterThanOrEqualTo(1)); + } } [Test] @@ -240,16 +273,19 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var users = CreateAndCommitMultipleUsers(repository, unitOfWork); + UserTypeRepository userTypeRepository; + using (var repository = CreateRepository(unitOfWork, out userTypeRepository)) + { + var users = CreateAndCommitMultipleUsers(repository, unitOfWork); - // Act - var result = repository.GetAll((int)users[0].Id, (int)users[1].Id); + // Act + var result = repository.GetAll((int) users[0].Id, (int) users[1].Id); - // Assert - Assert.That(result, Is.Not.Null); - Assert.That(result.Any(), Is.True); - Assert.That(result.Count(), Is.EqualTo(2)); + // Assert + Assert.That(result, Is.Not.Null); + Assert.That(result.Any(), Is.True); + Assert.That(result.Count(), Is.EqualTo(2)); + } } [Test] @@ -258,16 +294,19 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - CreateAndCommitMultipleUsers(repository, unitOfWork); + UserTypeRepository userTypeRepository; + using (var repository = CreateRepository(unitOfWork, out userTypeRepository)) + { + CreateAndCommitMultipleUsers(repository, unitOfWork); - // Act - var result = repository.GetAll(); + // Act + var result = repository.GetAll(); - // Assert - Assert.That(result, Is.Not.Null); - Assert.That(result.Any(), Is.True); - Assert.That(result.Count(), Is.GreaterThanOrEqualTo(3)); + // Assert + Assert.That(result, Is.Not.Null); + Assert.That(result.Any(), Is.True); + Assert.That(result.Count(), Is.GreaterThanOrEqualTo(3)); + } } [Test] @@ -276,14 +315,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var users = CreateAndCommitMultipleUsers(repository, unitOfWork); + UserTypeRepository userTypeRepository; + using (var repository = CreateRepository(unitOfWork, out userTypeRepository)) + { + var users = CreateAndCommitMultipleUsers(repository, unitOfWork); - // Act - var exists = repository.Exists((int)users[0].Id); + // Act + var exists = repository.Exists((int) users[0].Id); - // Assert - Assert.That(exists, Is.True); + // Assert + Assert.That(exists, Is.True); + } } [Test] @@ -292,15 +334,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var users = CreateAndCommitMultipleUsers(repository, unitOfWork); + UserTypeRepository userTypeRepository; + using (var repository = CreateRepository(unitOfWork, out userTypeRepository)) + { + var users = CreateAndCommitMultipleUsers(repository, unitOfWork); - // Act - var query = Query.Builder.Where(x => x.Username == "TestUser1" || x.Username == "TestUser2"); - var result = repository.Count(query); + // Act + var query = Query.Builder.Where(x => x.Username == "TestUser1" || x.Username == "TestUser2"); + var result = repository.Count(query); - // Assert - Assert.That(result, Is.GreaterThanOrEqualTo(2)); + // Assert + Assert.That(result, Is.GreaterThanOrEqualTo(2)); + } } [Test] @@ -309,30 +354,33 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var users = CreateAndCommitMultipleUsers(repository, unitOfWork); + UserTypeRepository userTypeRepository; + using (var repository = CreateRepository(unitOfWork, out userTypeRepository)) + { + var users = CreateAndCommitMultipleUsers(repository, unitOfWork); - // Act + // Act - //add and remove a few times, this tests the internal collection - users[0].RemoveAllowedSection("content"); - users[0].RemoveAllowedSection("content"); - users[0].AddAllowedSection("content"); - users[0].RemoveAllowedSection("content"); - - users[1].RemoveAllowedSection("media"); - users[1].RemoveAllowedSection("media"); + //add and remove a few times, this tests the internal collection + users[0].RemoveAllowedSection("content"); + users[0].RemoveAllowedSection("content"); + users[0].AddAllowedSection("content"); + users[0].RemoveAllowedSection("content"); - repository.AddOrUpdate(users[0]); - repository.AddOrUpdate(users[1]); - unitOfWork.Commit(); + users[1].RemoveAllowedSection("media"); + users[1].RemoveAllowedSection("media"); - // Assert - var result = repository.GetAll((int) users[0].Id, (int) users[1].Id).ToArray(); - Assert.AreEqual(1, result[0].AllowedSections.Count()); - Assert.AreEqual("media", result[0].AllowedSections.First()); - Assert.AreEqual(1, result[1].AllowedSections.Count()); - Assert.AreEqual("content", result[1].AllowedSections.First()); + repository.AddOrUpdate(users[0]); + repository.AddOrUpdate(users[1]); + unitOfWork.Commit(); + + // Assert + var result = repository.GetAll((int) users[0].Id, (int) users[1].Id).ToArray(); + Assert.AreEqual(1, result[0].AllowedSections.Count()); + Assert.AreEqual("media", result[0].AllowedSections.First()); + Assert.AreEqual(1, result[1].AllowedSections.Count()); + Assert.AreEqual("content", result[1].AllowedSections.First()); + } } [Test] @@ -341,39 +389,42 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var users = CreateAndCommitMultipleUsers(repository, unitOfWork); + UserTypeRepository userTypeRepository; + using (var repository = CreateRepository(unitOfWork, out userTypeRepository)) + { + var users = CreateAndCommitMultipleUsers(repository, unitOfWork); - // Act - - //add and remove a few times, this tests the internal collection - users[0].AddAllowedSection("settings"); - users[0].AddAllowedSection("settings"); - users[0].RemoveAllowedSection("settings"); - users[0].AddAllowedSection("settings"); + // Act - users[1].AddAllowedSection("developer"); + //add and remove a few times, this tests the internal collection + users[0].AddAllowedSection("settings"); + users[0].AddAllowedSection("settings"); + users[0].RemoveAllowedSection("settings"); + users[0].AddAllowedSection("settings"); - //add the same even though it's already there - users[2].AddAllowedSection("content"); + users[1].AddAllowedSection("developer"); - repository.AddOrUpdate(users[0]); - repository.AddOrUpdate(users[1]); - unitOfWork.Commit(); + //add the same even though it's already there + users[2].AddAllowedSection("content"); - // Assert - var result = repository.GetAll((int)users[0].Id, (int)users[1].Id, (int)users[2].Id).ToArray(); - Assert.AreEqual(3, result[0].AllowedSections.Count()); - Assert.IsTrue(result[0].AllowedSections.Contains("content")); - Assert.IsTrue(result[0].AllowedSections.Contains("media")); - Assert.IsTrue(result[0].AllowedSections.Contains("settings")); - Assert.AreEqual(3, result[1].AllowedSections.Count()); - Assert.IsTrue(result[1].AllowedSections.Contains("content")); - Assert.IsTrue(result[1].AllowedSections.Contains("media")); - Assert.IsTrue(result[1].AllowedSections.Contains("developer")); - Assert.AreEqual(2, result[2].AllowedSections.Count()); - Assert.IsTrue(result[1].AllowedSections.Contains("content")); - Assert.IsTrue(result[1].AllowedSections.Contains("media")); + repository.AddOrUpdate(users[0]); + repository.AddOrUpdate(users[1]); + unitOfWork.Commit(); + + // Assert + var result = repository.GetAll((int) users[0].Id, (int) users[1].Id, (int) users[2].Id).ToArray(); + Assert.AreEqual(3, result[0].AllowedSections.Count()); + Assert.IsTrue(result[0].AllowedSections.Contains("content")); + Assert.IsTrue(result[0].AllowedSections.Contains("media")); + Assert.IsTrue(result[0].AllowedSections.Contains("settings")); + Assert.AreEqual(3, result[1].AllowedSections.Count()); + Assert.IsTrue(result[1].AllowedSections.Contains("content")); + Assert.IsTrue(result[1].AllowedSections.Contains("media")); + Assert.IsTrue(result[1].AllowedSections.Contains("developer")); + Assert.AreEqual(2, result[2].AllowedSections.Count()); + Assert.IsTrue(result[1].AllowedSections.Contains("content")); + Assert.IsTrue(result[1].AllowedSections.Contains("media")); + } } [Test] @@ -382,24 +433,27 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var users = CreateAndCommitMultipleUsers(repository, unitOfWork); + UserTypeRepository userTypeRepository; + using (var repository = CreateRepository(unitOfWork, out userTypeRepository)) + { + var users = CreateAndCommitMultipleUsers(repository, unitOfWork); - // Act + // Act - users[0].RemoveAllowedSection("content"); - users[0].AddAllowedSection("settings"); + users[0].RemoveAllowedSection("content"); + users[0].AddAllowedSection("settings"); - repository.AddOrUpdate(users[0]); - unitOfWork.Commit(); + repository.AddOrUpdate(users[0]); + unitOfWork.Commit(); - // Assert - var result = repository.Get((int)users[0].Id); - Assert.AreEqual(2, result.AllowedSections.Count()); - Assert.IsTrue(result.AllowedSections.Contains("settings")); - Assert.IsTrue(result.AllowedSections.Contains("media")); + // Assert + var result = repository.Get((int) users[0].Id); + Assert.AreEqual(2, result.AllowedSections.Count()); + Assert.IsTrue(result.AllowedSections.Contains("settings")); + Assert.IsTrue(result.AllowedSections.Contains("media")); + } } - + [Test] public void Get_Users_Assigned_To_Section() @@ -407,24 +461,27 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var user1 = MockedUser.CreateUser(CreateAndCommitUserType(), "1", "test", "media"); - var user2 = MockedUser.CreateUser(CreateAndCommitUserType(), "2", "media", "settings"); - var user3 = MockedUser.CreateUser(CreateAndCommitUserType(), "3", "test", "settings"); - repository.AddOrUpdate(user1); - repository.AddOrUpdate(user2); - repository.AddOrUpdate(user3); - unitOfWork.Commit(); + UserTypeRepository userTypeRepository; + using (var repository = CreateRepository(unitOfWork, out userTypeRepository)) + { + var user1 = MockedUser.CreateUser(CreateAndCommitUserType(), "1", "test", "media"); + var user2 = MockedUser.CreateUser(CreateAndCommitUserType(), "2", "media", "settings"); + var user3 = MockedUser.CreateUser(CreateAndCommitUserType(), "3", "test", "settings"); + repository.AddOrUpdate(user1); + repository.AddOrUpdate(user2); + repository.AddOrUpdate(user3); + unitOfWork.Commit(); - // Act + // Act - var users = repository.GetUsersAssignedToSection("test"); + var users = repository.GetUsersAssignedToSection("test"); - // Assert - Assert.AreEqual(2, users.Count()); - var names = users.Select(x => x.Username).ToArray(); - Assert.IsTrue(names.Contains("TestUser1")); - Assert.IsTrue(names.Contains("TestUser3")); + // Assert + Assert.AreEqual(2, users.Count()); + var names = users.Select(x => x.Username).ToArray(); + Assert.IsTrue(names.Contains("TestUser1")); + Assert.IsTrue(names.Contains("TestUser3")); + } } private void AssertPropertyValues(IUser updatedItem, IUser originalUser) @@ -455,7 +512,7 @@ namespace Umbraco.Tests.Persistence.Repositories repository.AddOrUpdate(user2); repository.AddOrUpdate(user3); unitOfWork.Commit(); - return new IUser[] {user1, user2, user3}; + return new IUser[] { user1, user2, user3 }; } private IUserType CreateAndCommitUserType() diff --git a/src/Umbraco.Tests/Persistence/Repositories/UserTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/UserTypeRepositoryTest.cs index d22f52f9f1..931523a794 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/UserTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/UserTypeRepositoryTest.cs @@ -2,6 +2,7 @@ using NUnit.Framework; using Umbraco.Core.Models.Membership; using Umbraco.Core.Persistence; +using Umbraco.Core.Persistence.Caching; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.Repositories; using Umbraco.Core.Persistence.UnitOfWork; @@ -25,8 +26,13 @@ namespace Umbraco.Tests.Persistence.Repositories base.TearDown(); } + private UserTypeRepository CreateRepository(IDatabaseUnitOfWork unitOfWork) + { + return new UserTypeRepository(unitOfWork, NullCacheProvider.Current); + } + [Test] - public void Can_Instantiate_Repository() + public void Can_Instantiate_Repository_From_Resolver() { // Arrange var provider = new PetaPocoUnitOfWorkProvider(); @@ -45,16 +51,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - var userType = MockedUserType.CreateUserType(); + var userType = MockedUserType.CreateUserType(); - // Act - repository.AddOrUpdate(userType); - unitOfWork.Commit(); + // Act + repository.AddOrUpdate(userType); + unitOfWork.Commit(); - // Assert - Assert.That(userType.HasIdentity, Is.True); + // Assert + Assert.That(userType.HasIdentity, Is.True); + } } [Test] @@ -63,20 +71,22 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - var userType1 = MockedUserType.CreateUserType("1"); - var userType2 = MockedUserType.CreateUserType("2"); + var userType1 = MockedUserType.CreateUserType("1"); + var userType2 = MockedUserType.CreateUserType("2"); - // Act - repository.AddOrUpdate(userType1); - unitOfWork.Commit(); - repository.AddOrUpdate(userType2); - unitOfWork.Commit(); + // Act + repository.AddOrUpdate(userType1); + unitOfWork.Commit(); + repository.AddOrUpdate(userType2); + unitOfWork.Commit(); - // Assert - Assert.That(userType1.HasIdentity, Is.True); - Assert.That(userType2.HasIdentity, Is.True); + // Assert + Assert.That(userType1.HasIdentity, Is.True); + Assert.That(userType2.HasIdentity, Is.True); + } } [Test] @@ -85,17 +95,19 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var userType = MockedUserType.CreateUserType(); - repository.AddOrUpdate(userType); - unitOfWork.Commit(); + using (var repository = CreateRepository(unitOfWork)) + { + var userType = MockedUserType.CreateUserType(); + repository.AddOrUpdate(userType); + unitOfWork.Commit(); - // Act - var resolved = repository.Get(userType.Id); - bool dirty = ((UserType)resolved).IsDirty(); + // Act + var resolved = repository.Get(userType.Id); + bool dirty = ((UserType) resolved).IsDirty(); - // Assert - Assert.That(dirty, Is.False); + // Assert + Assert.That(dirty, Is.False); + } } [Test] @@ -104,23 +116,25 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var userType = MockedUserType.CreateUserType(); - repository.AddOrUpdate(userType); - unitOfWork.Commit(); + using (var repository = CreateRepository(unitOfWork)) + { + var userType = MockedUserType.CreateUserType(); + repository.AddOrUpdate(userType); + unitOfWork.Commit(); - // Act - var resolved = repository.Get(userType.Id); - resolved.Name = "New Name"; - resolved.Permissions = "ZYX"; - repository.AddOrUpdate(resolved); - unitOfWork.Commit(); - var updatedItem = repository.Get(userType.Id); + // Act + var resolved = repository.Get(userType.Id); + resolved.Name = "New Name"; + resolved.Permissions = "ZYX"; + repository.AddOrUpdate(resolved); + unitOfWork.Commit(); + var updatedItem = repository.Get(userType.Id); - // Assert - Assert.That(updatedItem.Id, Is.EqualTo(resolved.Id)); - Assert.That(updatedItem.Name, Is.EqualTo(resolved.Name)); - Assert.That(updatedItem.Permissions, Is.EqualTo(resolved.Permissions)); + // Assert + Assert.That(updatedItem.Id, Is.EqualTo(resolved.Id)); + Assert.That(updatedItem.Name, Is.EqualTo(resolved.Name)); + Assert.That(updatedItem.Permissions, Is.EqualTo(resolved.Permissions)); + } } [Test] @@ -129,23 +143,25 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { - var userType = MockedUserType.CreateUserType(); - - // Act - repository.AddOrUpdate(userType); - unitOfWork.Commit(); - var id = userType.Id; + var userType = MockedUserType.CreateUserType(); - var repository2 = RepositoryResolver.Current.ResolveByType(unitOfWork); - repository2.Delete(userType); - unitOfWork.Commit(); + // Act + repository.AddOrUpdate(userType); + unitOfWork.Commit(); + var id = userType.Id; - var resolved = repository2.Get(id); + var repository2 = RepositoryResolver.Current.ResolveByType(unitOfWork); + repository2.Delete(userType); + unitOfWork.Commit(); - // Assert - Assert.That(resolved, Is.Null); + var resolved = repository2.Get(id); + + // Assert + Assert.That(resolved, Is.Null); + } } [Test] @@ -154,21 +170,23 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var userType = MockedUserType.CreateUserType(); - repository.AddOrUpdate(userType); - unitOfWork.Commit(); + using (var repository = CreateRepository(unitOfWork)) + { + var userType = MockedUserType.CreateUserType(); + repository.AddOrUpdate(userType); + unitOfWork.Commit(); - // Act - var resolved = repository.Get(userType.Id); + // Act + var resolved = repository.Get(userType.Id); - // Assert - Assert.That(resolved.Id, Is.EqualTo(userType.Id)); - //Assert.That(resolved.CreateDate, Is.GreaterThan(DateTime.MinValue)); - //Assert.That(resolved.UpdateDate, Is.GreaterThan(DateTime.MinValue)); - Assert.That(resolved.Name, Is.EqualTo(userType.Name)); - Assert.That(resolved.Alias, Is.EqualTo(userType.Alias)); - Assert.That(resolved.Permissions, Is.EqualTo(userType.Permissions)); + // Assert + Assert.That(resolved.Id, Is.EqualTo(userType.Id)); + //Assert.That(resolved.CreateDate, Is.GreaterThan(DateTime.MinValue)); + //Assert.That(resolved.UpdateDate, Is.GreaterThan(DateTime.MinValue)); + Assert.That(resolved.Name, Is.EqualTo(userType.Name)); + Assert.That(resolved.Alias, Is.EqualTo(userType.Alias)); + Assert.That(resolved.Permissions, Is.EqualTo(userType.Permissions)); + } } [Test] @@ -177,15 +195,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - CreateAndCommitMultipleUserTypes(repository, unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { + CreateAndCommitMultipleUserTypes(repository, unitOfWork); - // Act - var query = Query.Builder.Where(x => x.Alias == "testUserType1"); - var result = repository.GetByQuery(query); + // Act + var query = Query.Builder.Where(x => x.Alias == "testUserType1"); + var result = repository.GetByQuery(query); - // Assert - Assert.That(result.Count(), Is.GreaterThanOrEqualTo(1)); + // Assert + Assert.That(result.Count(), Is.GreaterThanOrEqualTo(1)); + } } [Test] @@ -194,16 +214,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var userTypes = CreateAndCommitMultipleUserTypes(repository, unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { + var userTypes = CreateAndCommitMultipleUserTypes(repository, unitOfWork); - // Act - var result = repository.GetAll(userTypes[0].Id, userTypes[1].Id); + // Act + var result = repository.GetAll(userTypes[0].Id, userTypes[1].Id); - // Assert - Assert.That(result, Is.Not.Null); - Assert.That(result.Any(), Is.True); - Assert.That(result.Count(), Is.EqualTo(2)); + // Assert + Assert.That(result, Is.Not.Null); + Assert.That(result.Any(), Is.True); + Assert.That(result.Count(), Is.EqualTo(2)); + } } [Test] @@ -212,16 +234,18 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - CreateAndCommitMultipleUserTypes(repository, unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { + CreateAndCommitMultipleUserTypes(repository, unitOfWork); - // Act - var result = repository.GetAll(); + // Act + var result = repository.GetAll(); - // Assert - Assert.That(result, Is.Not.Null); - Assert.That(result.Any(), Is.True); - Assert.That(result.Count(), Is.GreaterThanOrEqualTo(3)); + // Assert + Assert.That(result, Is.Not.Null); + Assert.That(result.Any(), Is.True); + Assert.That(result.Count(), Is.GreaterThanOrEqualTo(3)); + } } [Test] @@ -230,14 +254,16 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var userTypes = CreateAndCommitMultipleUserTypes(repository, unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { + var userTypes = CreateAndCommitMultipleUserTypes(repository, unitOfWork); - // Act - var exists = repository.Exists(userTypes[0].Id); + // Act + var exists = repository.Exists(userTypes[0].Id); - // Assert - Assert.That(exists, Is.True); + // Assert + Assert.That(exists, Is.True); + } } [Test] @@ -246,15 +272,17 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); - var userTypes = CreateAndCommitMultipleUserTypes(repository, unitOfWork); + using (var repository = CreateRepository(unitOfWork)) + { + var userTypes = CreateAndCommitMultipleUserTypes(repository, unitOfWork); - // Act - var query = Query.Builder.Where(x => x.Alias == "testUserType1" || x.Alias == "testUserType2"); - var result = repository.Count(query); + // Act + var query = Query.Builder.Where(x => x.Alias == "testUserType1" || x.Alias == "testUserType2"); + var result = repository.Count(query); - // Assert - Assert.That(result, Is.GreaterThanOrEqualTo(2)); + // Assert + Assert.That(result, Is.GreaterThanOrEqualTo(2)); + } } private IUserType[] CreateAndCommitMultipleUserTypes(IUserTypeRepository repository, IUnitOfWork unitOfWork) diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 68211f16ed..34c578d136 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -193,6 +193,7 @@ + From 23b7e94ce32aa5f42b7d3251162de2abfd2bab97 Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 18 Sep 2013 12:36:38 +1000 Subject: [PATCH 2/9] Fixes pretty big issue with MediaType's not implementing the same IsDirty property check rules as ContentType when they should have shared the same rules. After removing caching on the unit tests, this bug became known. --- src/Umbraco.Core/Models/ContentType.cs | 62 +------------------ src/Umbraco.Core/Models/ContentTypeBase.cs | 60 ++++++++++++++++++ .../Repositories/ContentTypeRepositoryTest.cs | 15 +++-- .../Repositories/MediaTypeRepositoryTest.cs | 4 +- .../Repositories/ScriptRepositoryTest.cs | 4 +- .../Repositories/StylesheetRepositoryTest.cs | 5 +- 6 files changed, 75 insertions(+), 75 deletions(-) diff --git a/src/Umbraco.Core/Models/ContentType.cs b/src/Umbraco.Core/Models/ContentType.cs index df2a7bc1ef..46bf9bdc18 100644 --- a/src/Umbraco.Core/Models/ContentType.cs +++ b/src/Umbraco.Core/Models/ContentType.cs @@ -120,67 +120,7 @@ namespace Umbraco.Core.Models return result; } - - /// - /// Indicates whether a specific property on the current entity is dirty. - /// - /// Name of the property to check - /// True if Property is dirty, otherwise False - public override bool IsPropertyDirty(string propertyName) - { - bool existsInEntity = base.IsPropertyDirty(propertyName); - - bool anyDirtyGroups = PropertyGroups.Any(x => x.IsPropertyDirty(propertyName)); - bool anyDirtyTypes = PropertyTypes.Any(x => x.IsPropertyDirty(propertyName)); - - return existsInEntity || anyDirtyGroups || anyDirtyTypes; - } - - /// - /// Indicates whether the current entity is dirty. - /// - /// True if entity is dirty, otherwise False - public override bool IsDirty() - { - bool dirtyEntity = base.IsDirty(); - - bool dirtyGroups = PropertyGroups.Any(x => x.IsDirty()); - bool dirtyTypes = PropertyTypes.Any(x => x.IsDirty()); - - return dirtyEntity || dirtyGroups || dirtyTypes; - } - - /// - /// Resets dirty properties by clearing the dictionary used to track changes. - /// - /// - /// Please note that resetting the dirty properties could potentially - /// obstruct the saving of a new or updated entity. - /// - public override void ResetDirtyProperties() - { - base.ResetDirtyProperties(); - - //loop through each property group to reset the property types - var propertiesReset = new List(); - - foreach (var propertyGroup in PropertyGroups) - { - propertyGroup.ResetDirtyProperties(); - foreach (var propertyType in propertyGroup.PropertyTypes) - { - propertyType.ResetDirtyProperties(); - propertiesReset.Add(propertyType.Id); - } - } - //then loop through our property type collection since some might not exist on a property group - //but don't re-reset ones we've already done. - foreach (var propertyType in PropertyTypes.Where(x => propertiesReset.Contains(x.Id) == false)) - { - propertyType.ResetDirtyProperties(); - } - } - + /// /// Creates a clone of the current entity /// diff --git a/src/Umbraco.Core/Models/ContentTypeBase.cs b/src/Umbraco.Core/Models/ContentTypeBase.cs index dc5d9c7898..e8d2effbc1 100644 --- a/src/Umbraco.Core/Models/ContentTypeBase.cs +++ b/src/Umbraco.Core/Models/ContentTypeBase.cs @@ -503,5 +503,65 @@ namespace Umbraco.Core.Models { get { return _propertyTypes; } } + + /// + /// Indicates whether a specific property on the current entity is dirty. + /// + /// Name of the property to check + /// True if Property is dirty, otherwise False + public override bool IsPropertyDirty(string propertyName) + { + bool existsInEntity = base.IsPropertyDirty(propertyName); + + bool anyDirtyGroups = PropertyGroups.Any(x => x.IsPropertyDirty(propertyName)); + bool anyDirtyTypes = PropertyTypes.Any(x => x.IsPropertyDirty(propertyName)); + + return existsInEntity || anyDirtyGroups || anyDirtyTypes; + } + + /// + /// Indicates whether the current entity is dirty. + /// + /// True if entity is dirty, otherwise False + public override bool IsDirty() + { + bool dirtyEntity = base.IsDirty(); + + bool dirtyGroups = PropertyGroups.Any(x => x.IsDirty()); + bool dirtyTypes = PropertyTypes.Any(x => x.IsDirty()); + + return dirtyEntity || dirtyGroups || dirtyTypes; + } + + /// + /// Resets dirty properties by clearing the dictionary used to track changes. + /// + /// + /// Please note that resetting the dirty properties could potentially + /// obstruct the saving of a new or updated entity. + /// + public override void ResetDirtyProperties() + { + base.ResetDirtyProperties(); + + //loop through each property group to reset the property types + var propertiesReset = new List(); + + foreach (var propertyGroup in PropertyGroups) + { + propertyGroup.ResetDirtyProperties(); + foreach (var propertyType in propertyGroup.PropertyTypes) + { + propertyType.ResetDirtyProperties(); + propertiesReset.Add(propertyType.Id); + } + } + //then loop through our property type collection since some might not exist on a property group + //but don't re-reset ones we've already done. + foreach (var propertyType in PropertyTypes.Where(x => propertiesReset.Contains(x.Id) == false)) + { + propertyType.ResetDirtyProperties(); + } + } } } \ No newline at end of file diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs index a099b3c5a2..e5c782c00d 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs @@ -212,18 +212,17 @@ namespace Umbraco.Tests.Persistence.Repositories { var contentType = repository.Get(1046); - // Act - var contentType2 = repository.Get(1046); - contentType2.PropertyGroups["Meta"].PropertyTypes.Remove("metaDescription"); - repository.AddOrUpdate(contentType2); + // Act + contentType.PropertyGroups["Meta"].PropertyTypes.Remove("metaDescription"); + repository.AddOrUpdate(contentType); unitOfWork.Commit(); - var contentType3 = repository.Get(1046); + var result = repository.Get(1046); // Assert - Assert.That(contentType3.PropertyTypes.Any(x => x.Alias == "metaDescription"), Is.False); - Assert.That(contentType.PropertyGroups.Count, Is.EqualTo(contentType3.PropertyGroups.Count)); - Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(contentType3.PropertyTypes.Count())); + Assert.That(result.PropertyTypes.Any(x => x.Alias == "metaDescription"), Is.False); + Assert.That(contentType.PropertyGroups.Count, Is.EqualTo(result.PropertyGroups.Count)); + Assert.That(contentType.PropertyTypes.Count(), Is.EqualTo(result.PropertyTypes.Count())); } } diff --git a/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs index 7c794d6f58..acb96da490 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MediaTypeRepositoryTest.cs @@ -206,8 +206,8 @@ namespace Umbraco.Tests.Persistence.Repositories // Assert Assert.That(mediaTypeV3.PropertyTypes.Any(x => x.Alias == "title"), Is.False); - Assert.That(mediaType.PropertyGroups.Count, Is.EqualTo(mediaTypeV3.PropertyGroups.Count)); - Assert.That(mediaType.PropertyTypes.Count(), Is.EqualTo(mediaTypeV3.PropertyTypes.Count())); + Assert.That(mediaTypeV2.PropertyGroups.Count, Is.EqualTo(mediaTypeV3.PropertyGroups.Count)); + Assert.That(mediaTypeV2.PropertyTypes.Count(), Is.EqualTo(mediaTypeV3.PropertyTypes.Count())); } } diff --git a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs index 25d16963d2..1f8cd7d582 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs @@ -24,14 +24,14 @@ namespace Umbraco.Tests.Persistence.Repositories } [Test] - public void Can_Instantiate_Repository_From_Resolver() + public void Can_Instantiate_Repository() { // Arrange var provider = new FileUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + var repository = new ScriptRepository(unitOfWork, _fileSystem); // Assert Assert.That(repository, Is.Not.Null); diff --git a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs index d518bddd0e..0b37761329 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/StylesheetRepositoryTest.cs @@ -24,14 +24,15 @@ namespace Umbraco.Tests.Persistence.Repositories } [Test] - public void Can_Instantiate_Repository_From_Resolver() + public void Can_Instantiate_Repository() { // Arrange var provider = new FileUnitOfWorkProvider(); var unitOfWork = provider.GetUnitOfWork(); // Act - var repository = RepositoryResolver.Current.ResolveByType(unitOfWork); + var repository = new StylesheetRepository(unitOfWork, _fileSystem); + // Assert Assert.That(repository, Is.Not.Null); From b17db9f1439c1a3bd6890b4fce0b1a09a634a655 Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 18 Sep 2013 12:42:18 +1000 Subject: [PATCH 3/9] Fixed last failing unit test with repo's --- .../Persistence/Repositories/ContentRepositoryTest.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs index 1990785938..5ce7db21ff 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs @@ -129,12 +129,15 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; using (var repository = CreateRepository(unitOfWork, out contentTypeRepository)) { - ContentType contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage"); - Content textpage = MockedContent.CreateSimpleContent(contentType, "test@umbraco.org", -1); - Content anotherTextpage = MockedContent.CreateSimpleContent(contentType, "@lightgiants", -1); + var contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage", "Textpage"); + contentTypeRepository.AddOrUpdate(contentType); + unitOfWork.Commit(); + + var textpage = MockedContent.CreateSimpleContent(contentType, "test@umbraco.org", -1); + var anotherTextpage = MockedContent.CreateSimpleContent(contentType, "@lightgiants", -1); // Act - contentTypeRepository.AddOrUpdate(contentType); + repository.AddOrUpdate(textpage); repository.AddOrUpdate(anotherTextpage); unitOfWork.Commit(); From c8fa881bc5f4171109ee1bd67d016b27102f961f Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 18 Sep 2013 12:54:06 +1000 Subject: [PATCH 4/9] Ensures all service tests do not use any caching in their underlying repos. This change has been made to the base database test classes so any repo/service access done for inheritors also ensure that no cache is used for tests. --- .../Persistence/RepositoryFactory.cs | 32 +++++++++++++------ .../Persistence/RepositoryResolverTests.cs | 2 +- .../TestHelpers/BaseDatabaseFactoryTest.cs | 2 +- .../TestHelpers/BaseDatabaseTest.cs | 2 +- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/Umbraco.Core/Persistence/RepositoryFactory.cs b/src/Umbraco.Core/Persistence/RepositoryFactory.cs index 6985e427fe..710dc27d87 100644 --- a/src/Umbraco.Core/Persistence/RepositoryFactory.cs +++ b/src/Umbraco.Core/Persistence/RepositoryFactory.cs @@ -9,11 +9,25 @@ namespace Umbraco.Core.Persistence /// public class RepositoryFactory { + private readonly bool _disableAllCache; + + public RepositoryFactory() + : this(false) + { + + } + + internal RepositoryFactory(bool disableAllCache) + { + _disableAllCache = disableAllCache; + } + + public virtual IContentRepository CreateContentRepository(IDatabaseUnitOfWork uow) { return new ContentRepository( uow, - RuntimeCacheProvider.Current, + _disableAllCache ? (IRepositoryCacheProvider)NullCacheProvider.Current : RuntimeCacheProvider.Current, CreateContentTypeRepository(uow), CreateTemplateRepository(uow)) { EnsureUniqueNaming = Umbraco.Core.Configuration.UmbracoSettings.EnsureUniqueNaming }; } @@ -22,7 +36,7 @@ namespace Umbraco.Core.Persistence { return new ContentTypeRepository( uow, - InMemoryCacheProvider.Current, + _disableAllCache ? (IRepositoryCacheProvider)NullCacheProvider.Current : InMemoryCacheProvider.Current, new TemplateRepository(uow, NullCacheProvider.Current)); } @@ -37,7 +51,7 @@ namespace Umbraco.Core.Persistence { return new DictionaryRepository( uow, - InMemoryCacheProvider.Current, + _disableAllCache ? (IRepositoryCacheProvider)NullCacheProvider.Current : InMemoryCacheProvider.Current, CreateLanguageRepository(uow)); } @@ -45,14 +59,14 @@ namespace Umbraco.Core.Persistence { return new LanguageRepository( uow, - InMemoryCacheProvider.Current); + _disableAllCache ? (IRepositoryCacheProvider)NullCacheProvider.Current : InMemoryCacheProvider.Current); } public virtual IMediaRepository CreateMediaRepository(IDatabaseUnitOfWork uow) { return new MediaRepository( uow, - RuntimeCacheProvider.Current, + _disableAllCache ? (IRepositoryCacheProvider)NullCacheProvider.Current : RuntimeCacheProvider.Current, CreateMediaTypeRepository(uow)) { EnsureUniqueNaming = Umbraco.Core.Configuration.UmbracoSettings.EnsureUniqueNaming }; } @@ -60,7 +74,7 @@ namespace Umbraco.Core.Persistence { return new MediaTypeRepository( uow, - InMemoryCacheProvider.Current); + _disableAllCache ? (IRepositoryCacheProvider)NullCacheProvider.Current : InMemoryCacheProvider.Current); } public virtual IRelationRepository CreateRelationRepository(IDatabaseUnitOfWork uow) @@ -90,7 +104,7 @@ namespace Umbraco.Core.Persistence public virtual ITemplateRepository CreateTemplateRepository(IDatabaseUnitOfWork uow) { - return new TemplateRepository(uow, RuntimeCacheProvider.Current); + return new TemplateRepository(uow, _disableAllCache ? (IRepositoryCacheProvider)NullCacheProvider.Current : RuntimeCacheProvider.Current); } internal virtual ServerRegistrationRepository CreateServerRegistrationRepository(IDatabaseUnitOfWork uow) @@ -117,12 +131,12 @@ namespace Umbraco.Core.Persistence internal virtual IMemberRepository CreateMemberRepository(IDatabaseUnitOfWork uow) { - return new MemberRepository(uow, RuntimeCacheProvider.Current, CreateMemberTypeRepository(uow)); + return new MemberRepository(uow, _disableAllCache ? (IRepositoryCacheProvider)NullCacheProvider.Current : RuntimeCacheProvider.Current, CreateMemberTypeRepository(uow)); } internal virtual IMemberTypeRepository CreateMemberTypeRepository(IDatabaseUnitOfWork uow) { - return new MemberTypeRepository(uow, InMemoryCacheProvider.Current); + return new MemberTypeRepository(uow, _disableAllCache ? (IRepositoryCacheProvider)NullCacheProvider.Current : InMemoryCacheProvider.Current); } internal virtual IEntityRepository CreateEntityRepository(IDatabaseUnitOfWork uow) diff --git a/src/Umbraco.Tests/Persistence/RepositoryResolverTests.cs b/src/Umbraco.Tests/Persistence/RepositoryResolverTests.cs index 3a612fbc93..b7ccc58eaf 100644 --- a/src/Umbraco.Tests/Persistence/RepositoryResolverTests.cs +++ b/src/Umbraco.Tests/Persistence/RepositoryResolverTests.cs @@ -19,7 +19,7 @@ namespace Umbraco.Tests.Persistence public void Setup() { RepositoryResolver.Current = new RepositoryResolver( - new RepositoryFactory()); + new RepositoryFactory(true)); //disable all repo caches for tests! Resolution.Freeze(); } diff --git a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs index d85d9813f5..f20f72e8d3 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs @@ -171,7 +171,7 @@ namespace Umbraco.Tests.TestHelpers () => PluginManager.Current.ResolveDataTypes()); RepositoryResolver.Current = new RepositoryResolver( - new RepositoryFactory()); + new RepositoryFactory(true)); //disable all repo caches for tests! SqlSyntaxProvidersResolver.Current = new SqlSyntaxProvidersResolver( new List { typeof(MySqlSyntaxProvider), typeof(SqlCeSyntaxProvider), typeof(SqlServerSyntaxProvider) }) { CanResolveBeforeFrozen = true }; diff --git a/src/Umbraco.Tests/TestHelpers/BaseDatabaseTest.cs b/src/Umbraco.Tests/TestHelpers/BaseDatabaseTest.cs index 8b46559528..ffe068e5ce 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseDatabaseTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseDatabaseTest.cs @@ -54,7 +54,7 @@ namespace Umbraco.Tests.TestHelpers RepositoryResolver.Current = new RepositoryResolver( - new RepositoryFactory()); + new RepositoryFactory(true)); //disable all repo caches for tests! SqlSyntaxProvidersResolver.Current = new SqlSyntaxProvidersResolver( new List { typeof(MySqlSyntaxProvider), typeof(SqlCeSyntaxProvider), typeof(SqlServerSyntaxProvider) }) { CanResolveBeforeFrozen = true }; From f1c0aa243989cc24686463d528e0e78b0eab3ed7 Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 18 Sep 2013 15:21:35 +1000 Subject: [PATCH 5/9] adds a comment --- src/Umbraco.Tests/Services/ContentServiceTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Tests/Services/ContentServiceTests.cs b/src/Umbraco.Tests/Services/ContentServiceTests.cs index 089fc25ae2..3ea7bdef50 100644 --- a/src/Umbraco.Tests/Services/ContentServiceTests.cs +++ b/src/Umbraco.Tests/Services/ContentServiceTests.cs @@ -842,6 +842,7 @@ namespace Umbraco.Tests.Services Assert.That(sut.GetValue("multilineText"), Is.EqualTo("Multiple lines \n in one box")); Assert.That(sut.GetValue("upload"), Is.EqualTo("/media/1234/koala.jpg")); Assert.That(sut.GetValue("label"), Is.EqualTo("Non-editable label")); + //SD: This is failing because the 'content' call to GetValue always has empty milliseconds Assert.That(sut.GetValue("dateTime"), Is.EqualTo(content.GetValue("dateTime"))); Assert.That(sut.GetValue("colorPicker"), Is.EqualTo("black")); Assert.That(sut.GetValue("folderBrowser"), Is.Empty); From a027c3cb22293c585594a42d8fccdd57cb743340 Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 18 Sep 2013 16:08:15 +1000 Subject: [PATCH 6/9] Found out if we don't do ToArray here and if we were caching we'd end up with null values in the cache, do to yield return i think. --- src/Umbraco.Core/Persistence/Repositories/UserRepository.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs index 0acad10383..f61ae16e2f 100644 --- a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs @@ -61,7 +61,8 @@ namespace Umbraco.Core.Persistence.Repositories var sql = GetBaseQuery(false); - return ConvertFromDtos(Database.Fetch(new UserSectionRelator().Map, sql)); + return ConvertFromDtos(Database.Fetch(new UserSectionRelator().Map, sql)) + .ToArray(); // important so we don't iterate twice, if we don't do thsi we can end up with null vals in cache if we were caching. } private IEnumerable PerformGetAllOnIds(params int[] ids) From 95df28bf642d3000422a35fed5b1345b29b0e1b2 Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 18 Sep 2013 17:44:25 +1000 Subject: [PATCH 7/9] Fixes issue with runtime cache provider when retrieving all items of a certain type, we were sending back an array of nulls if the cache was expired. --- .../Caching/RuntimeCacheProvider.cs | 72 ++++++++++++++----- .../Caching/RuntimeCacheProviderTest.cs | 20 ++++++ 2 files changed, 73 insertions(+), 19 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Caching/RuntimeCacheProvider.cs b/src/Umbraco.Core/Persistence/Caching/RuntimeCacheProvider.cs index 06a624a771..60e176096f 100644 --- a/src/Umbraco.Core/Persistence/Caching/RuntimeCacheProvider.cs +++ b/src/Umbraco.Core/Persistence/Caching/RuntimeCacheProvider.cs @@ -59,23 +59,41 @@ namespace Umbraco.Core.Persistence.Caching var item = _memoryCache != null ? _memoryCache.Get(key) : HttpRuntime.Cache.Get(key); - return item as IEntity; + var result = item as IEntity; + if (result == null) + { + //ensure the key doesn't exist anymore in the tracker + _keyTracker.Remove(key); + } + return result; } public IEnumerable GetByIds(Type type, List ids) { + var collection = new List(); foreach (var guid in ids) { + var key = GetCompositeId(type, guid); var item = _memoryCache != null - ? _memoryCache.Get(GetCompositeId(type, guid)) - : HttpRuntime.Cache.Get(GetCompositeId(type, guid)); - - yield return item as IEntity; + ? _memoryCache.Get(key) + : HttpRuntime.Cache.Get(key); + var result = item as IEntity; + if (result == null) + { + //ensure the key doesn't exist anymore in the tracker + _keyTracker.Remove(key); + } + else + { + collection.Add(result); + } } + return collection; } public IEnumerable GetAllByType(Type type) { + var collection = new List(); foreach (var key in _keyTracker) { if (key.StartsWith(string.Format("{0}{1}-", CacheItemPrefix, type.Name))) @@ -84,9 +102,19 @@ namespace Umbraco.Core.Persistence.Caching ? _memoryCache.Get(key) : HttpRuntime.Cache.Get(key); - yield return item as IEntity; + var result = item as IEntity; + if (result == null) + { + //ensure the key doesn't exist anymore in the tracker + _keyTracker.Remove(key); + } + else + { + collection.Add(result); + } } } + return collection; } public void Save(Type type, IEntity entity) @@ -159,21 +187,27 @@ namespace Umbraco.Core.Persistence.Caching { _keyTracker.Clear(); - if (_memoryCache != null) + ClearDataCache(); + } + } + + //DO not call this unless it's for testing since it clears the data cached but not the keys + internal void ClearDataCache() + { + if (_memoryCache != null) + { + _memoryCache.DisposeIfDisposable(); + _memoryCache = new MemoryCache("in-memory"); + } + else + { + foreach (DictionaryEntry c in HttpRuntime.Cache) { - _memoryCache.DisposeIfDisposable(); - _memoryCache = new MemoryCache("in-memory"); - } - else - { - foreach (DictionaryEntry c in HttpRuntime.Cache) + if (c.Key is string && ((string)c.Key).InvariantStartsWith(CacheItemPrefix)) { - if (c.Key is string && ((string)c.Key).InvariantStartsWith(CacheItemPrefix)) - { - if (HttpRuntime.Cache[(string)c.Key] == null) return; - HttpRuntime.Cache.Remove((string)c.Key); - } - } + if (HttpRuntime.Cache[(string)c.Key] == null) return; + HttpRuntime.Cache.Remove((string)c.Key); + } } } } diff --git a/src/Umbraco.Tests/Persistence/Caching/RuntimeCacheProviderTest.cs b/src/Umbraco.Tests/Persistence/Caching/RuntimeCacheProviderTest.cs index 8c176df515..bbf4bc381a 100644 --- a/src/Umbraco.Tests/Persistence/Caching/RuntimeCacheProviderTest.cs +++ b/src/Umbraco.Tests/Persistence/Caching/RuntimeCacheProviderTest.cs @@ -34,6 +34,26 @@ namespace Umbraco.Tests.Persistence.Caching _registry.Save(typeof(MockedEntity), entity6); } + [Test] + public void Tracked_Keys_Removed_When_Cache_Removed() + { + _registry = RuntimeCacheProvider.Current; + + //Fill the registry with random entities + var entity1 = new MockedEntity { Id = 1, Key = 1.ToGuid(), Alias = "mocked1", Name = "Mocked1", Value = Guid.NewGuid().ToString("n") }; + var entity2 = new MockedEntity { Id = 2, Key = 2.ToGuid(), Alias = "mocked2", Name = "Mocked2", Value = Guid.NewGuid().ToString("n") }; + var entity3 = new MockedEntity { Id = 3, Key = 3.ToGuid(), Alias = "mocked3", Name = "Mocked3", Value = Guid.NewGuid().ToString("n") }; + + _registry.Save(typeof(MockedEntity), entity1); + _registry.Save(typeof(MockedEntity), entity2); + _registry.Save(typeof(MockedEntity), entity3); + + //now clear the runtime cache internally + ((RuntimeCacheProvider)_registry).ClearDataCache(); + + Assert.AreEqual(0, _registry.GetAllByType(typeof (MockedEntity)).Count()); + } + [Test] public void Can_Clear_By_Type() { From 761354dbf5b03421302e2016e7f716fae08036b7 Mon Sep 17 00:00:00 2001 From: Stephan Date: Wed, 18 Sep 2013 10:05:44 +0200 Subject: [PATCH 8/9] Core.Cache - add new method to remove items from cache --- src/Umbraco.Core/Cache/CacheProviderBase.cs | 1 + .../Cache/HttpRuntimeCacheProvider.cs | 27 ++++++++++++ src/Umbraco.Core/Cache/NullCacheProvider.cs | 4 ++ src/Umbraco.Core/Cache/StaticCacheProvider.cs | 41 ++++--------------- src/Umbraco.Core/CacheHelper.cs | 8 ++++ 5 files changed, 49 insertions(+), 32 deletions(-) diff --git a/src/Umbraco.Core/Cache/CacheProviderBase.cs b/src/Umbraco.Core/Cache/CacheProviderBase.cs index 026f6f9dbc..012d8b23b2 100644 --- a/src/Umbraco.Core/Cache/CacheProviderBase.cs +++ b/src/Umbraco.Core/Cache/CacheProviderBase.cs @@ -15,6 +15,7 @@ namespace Umbraco.Core.Cache public abstract void ClearCacheItem(string key); public abstract void ClearCacheObjectTypes(string typeName); public abstract void ClearCacheObjectTypes(); + public abstract void ClearCacheObjectTypes(Func predicate); public abstract void ClearCacheByKeySearch(string keyStartsWith); public abstract void ClearCacheByKeyExpression(string regexString); public abstract IEnumerable GetCacheItemsByKeySearch(string keyStartsWith); diff --git a/src/Umbraco.Core/Cache/HttpRuntimeCacheProvider.cs b/src/Umbraco.Core/Cache/HttpRuntimeCacheProvider.cs index e574f38454..f5fc0e237f 100644 --- a/src/Umbraco.Core/Cache/HttpRuntimeCacheProvider.cs +++ b/src/Umbraco.Core/Cache/HttpRuntimeCacheProvider.cs @@ -103,6 +103,33 @@ namespace Umbraco.Core.Cache } } + /// + /// Clears all objects in the System.Web.Cache with the System.Type specified that satisfy the predicate + /// + public override void ClearCacheObjectTypes(Func predicate) + { + try + { + lock (Locker) + { + foreach (DictionaryEntry c in _cache) + { + var key = c.Key.ToString(); + if (_cache[key] != null + && _cache[key] is T + && predicate(key, (T)_cache[key])) + { + _cache.Remove(c.Key.ToString()); + } + } + } + } + catch (Exception e) + { + LogHelper.Error("Cache clearing error", e); + } + } + /// /// Clears all cache items that starts with the key passed. /// diff --git a/src/Umbraco.Core/Cache/NullCacheProvider.cs b/src/Umbraco.Core/Cache/NullCacheProvider.cs index 3d1bbaa79d..0ffecf59e3 100644 --- a/src/Umbraco.Core/Cache/NullCacheProvider.cs +++ b/src/Umbraco.Core/Cache/NullCacheProvider.cs @@ -23,6 +23,10 @@ namespace Umbraco.Core.Cache { } + public override void ClearCacheObjectTypes(Func predicate) + { + } + public override void ClearCacheByKeySearch(string keyStartsWith) { } diff --git a/src/Umbraco.Core/Cache/StaticCacheProvider.cs b/src/Umbraco.Core/Cache/StaticCacheProvider.cs index 0d0d2f288c..e3ca529361 100644 --- a/src/Umbraco.Core/Cache/StaticCacheProvider.cs +++ b/src/Umbraco.Core/Cache/StaticCacheProvider.cs @@ -27,50 +27,27 @@ namespace Umbraco.Core.Cache public override void ClearCacheObjectTypes(string typeName) { - foreach (var key in _staticCache.Keys) - { - if (_staticCache[key] != null - && _staticCache[key].GetType().ToString().InvariantEquals(typeName)) - { - object val; - _staticCache.TryRemove(key, out val); - } - } + _staticCache.RemoveAll(kvp => kvp.Value.GetType().ToString().InvariantEquals(typeName)); } public override void ClearCacheObjectTypes() { - foreach (var key in _staticCache.Keys) - { - if (_staticCache[key] != null - && _staticCache[key].GetType() == typeof(T)) - { - object val; - _staticCache.TryRemove(key, out val); - } - } + _staticCache.RemoveAll(kvp => kvp.Value is T); + } + + public override void ClearCacheObjectTypes(Func predicate) + { + _staticCache.RemoveAll(kvp => kvp.Value is T && predicate(kvp.Key, (T)kvp.Value)); } public override void ClearCacheByKeySearch(string keyStartsWith) { - foreach (var key in _staticCache.Keys) - { - if (key.InvariantStartsWith(keyStartsWith)) - { - ClearCacheItem(key); - } - } + _staticCache.RemoveAll(kvp => kvp.Key.InvariantStartsWith(keyStartsWith)); } public override void ClearCacheByKeyExpression(string regexString) { - foreach (var key in _staticCache.Keys) - { - if (Regex.IsMatch(key, regexString)) - { - ClearCacheItem(key); - } - } + _staticCache.RemoveAll(kvp => Regex.IsMatch(kvp.Key, regexString)); } public override IEnumerable GetCacheItemsByKeySearch(string keyStartsWith) diff --git a/src/Umbraco.Core/CacheHelper.cs b/src/Umbraco.Core/CacheHelper.cs index 96b3d99de9..8f7edeb777 100644 --- a/src/Umbraco.Core/CacheHelper.cs +++ b/src/Umbraco.Core/CacheHelper.cs @@ -110,6 +110,14 @@ namespace Umbraco.Core } } + internal void ClearStaticCacheObjectTypes(Func predicate) + { + if (_enableCache) + _staticCache.ClearCacheObjectTypes(predicate); + else + _nullStaticCache.ClearCacheObjectTypes(predicate); + } + /// /// Clears all static cache items that starts with the key passed. /// From d1f36346def179ca3e109abaf307a9237f72870a Mon Sep 17 00:00:00 2001 From: Stephan Date: Wed, 18 Sep 2013 10:46:34 +0200 Subject: [PATCH 9/9] Core.Cache - fix bug in StaticCacheProvider --- src/Umbraco.Core/Cache/StaticCacheProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Core/Cache/StaticCacheProvider.cs b/src/Umbraco.Core/Cache/StaticCacheProvider.cs index e3ca529361..4f3bb1108c 100644 --- a/src/Umbraco.Core/Cache/StaticCacheProvider.cs +++ b/src/Umbraco.Core/Cache/StaticCacheProvider.cs @@ -72,7 +72,7 @@ namespace Umbraco.Core.Cache public override T GetCacheItem(string cacheKey, Func getCacheItem) { - return (T)_staticCache.GetOrAdd(cacheKey, getCacheItem); + return (T)_staticCache.GetOrAdd(cacheKey, key => getCacheItem()); } }