diff --git a/src/Umbraco.Core/Persistence/Repositories/ServerRegistrationRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ServerRegistrationRepository.cs index 46e1c139a5..20d3c38042 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ServerRegistrationRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ServerRegistrationRepository.cs @@ -15,14 +15,23 @@ namespace Umbraco.Core.Persistence.Repositories { internal class ServerRegistrationRepository : PetaPocoRepositoryBase, IServerRegistrationRepository { - // create a new disabled cache helper, as we don't want runtime caching, - // and yet we want the static cache so we can statically cache all regs in PerformGetAll. private readonly ICacheProvider _staticCache; - public ServerRegistrationRepository(IDatabaseUnitOfWork work, CacheHelper cache, ILogger logger, ISqlSyntaxProvider sqlSyntax) + public ServerRegistrationRepository(IDatabaseUnitOfWork work, ICacheProvider staticCache, ILogger logger, ISqlSyntaxProvider sqlSyntax) : base(work, CacheHelper.CreateDisabledCacheHelper(), logger, sqlSyntax) { - _staticCache = cache.StaticCache; + _staticCache = staticCache; + } + + protected override int PerformCount(IQuery query) + { + throw new NotSupportedException("This repository does not support this method"); + } + + protected override bool PerformExists(int id) + { + // use the underlying GetAll which force-caches all registrations + return GetAll().Any(x => x.Id == id); } protected override IServerRegistration PerformGet(int id) diff --git a/src/Umbraco.Core/Persistence/RepositoryFactory.cs b/src/Umbraco.Core/Persistence/RepositoryFactory.cs index 011c122861..f9367d8433 100644 --- a/src/Umbraco.Core/Persistence/RepositoryFactory.cs +++ b/src/Umbraco.Core/Persistence/RepositoryFactory.cs @@ -230,7 +230,7 @@ namespace Umbraco.Core.Persistence { return new ServerRegistrationRepository( uow, - _cacheHelper, + _cacheHelper.StaticCache, _logger, _sqlSyntax); } diff --git a/src/Umbraco.Tests/Persistence/Repositories/ServerRegistrationRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ServerRegistrationRepositoryTest.cs index b94339970f..bcb49068fa 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ServerRegistrationRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ServerRegistrationRepositoryTest.cs @@ -4,6 +4,7 @@ using System.Linq; using Moq; using NUnit.Framework; using Umbraco.Core; +using Umbraco.Core.Cache; using Umbraco.Core.Logging; using Umbraco.Core.Models; @@ -18,17 +19,20 @@ namespace Umbraco.Tests.Persistence.Repositories [TestFixture] public class ServerRegistrationRepositoryTest : BaseDatabaseFactoryTest { + private ICacheProvider _staticCache; + [SetUp] public override void Initialize() { base.Initialize(); + _staticCache = new StaticCacheProvider(); CreateTestData(); } - private ServerRegistrationRepository CreateRepositor(IDatabaseUnitOfWork unitOfWork) + private ServerRegistrationRepository CreateRepository(IDatabaseUnitOfWork unitOfWork) { - return new ServerRegistrationRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), SqlSyntax); + return new ServerRegistrationRepository(unitOfWork, _staticCache, Mock.Of(), SqlSyntax); } [Test] @@ -39,7 +43,7 @@ namespace Umbraco.Tests.Persistence.Repositories var unitOfWork = provider.GetUnitOfWork(); // Act - using (var repository = CreateRepositor(unitOfWork)) + using (var repository = CreateRepository(unitOfWork)) { var server = new ServerRegistration("http://shazwazza.com", "COMPUTER1", DateTime.Now); repository.AddOrUpdate(server); @@ -57,7 +61,7 @@ namespace Umbraco.Tests.Persistence.Repositories var unitOfWork = provider.GetUnitOfWork(); // Act - using (var repository = CreateRepositor(unitOfWork)) + using (var repository = CreateRepository(unitOfWork)) { var server = repository.Get(1); server.ServerIdentity = "COMPUTER2"; @@ -75,7 +79,7 @@ namespace Umbraco.Tests.Persistence.Repositories var unitOfWork = provider.GetUnitOfWork(); // Act - using (var repository = CreateRepositor(unitOfWork)) + using (var repository = CreateRepository(unitOfWork)) { // Assert Assert.That(repository, Is.Not.Null); @@ -88,7 +92,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(Logger); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = CreateRepositor(unitOfWork)) + using (var repository = CreateRepository(unitOfWork)) { // Act var server = repository.Get(1); @@ -108,7 +112,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(Logger); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = CreateRepositor(unitOfWork)) + using (var repository = CreateRepository(unitOfWork)) { // Act var servers = repository.GetAll(); @@ -119,39 +123,41 @@ namespace Umbraco.Tests.Persistence.Repositories } - [Test] - public void Can_Perform_GetByQuery_On_Repository() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - using (var repository = CreateRepositor(unitOfWork)) - { - // Act - var query = Query.Builder.Where(x => x.ServerIdentity.ToUpper() == "COMPUTER3"); - var result = repository.GetByQuery(query); + // queries are not supported due to in-memory caching - // Assert - Assert.AreEqual(1, result.Count()); - } - } + //[Test] + //public void Can_Perform_GetByQuery_On_Repository() + //{ + // // Arrange + // var provider = new PetaPocoUnitOfWorkProvider(Logger); + // var unitOfWork = provider.GetUnitOfWork(); + // using (var repository = CreateRepository(unitOfWork)) + // { + // // Act + // var query = Query.Builder.Where(x => x.ServerIdentity.ToUpper() == "COMPUTER3"); + // var result = repository.GetByQuery(query); - [Test] - public void Can_Perform_Count_On_Repository() - { - // Arrange - var provider = new PetaPocoUnitOfWorkProvider(Logger); - var unitOfWork = provider.GetUnitOfWork(); - using (var repository = CreateRepositor(unitOfWork)) - { - // Act - var query = Query.Builder.Where(x => x.ServerAddress.StartsWith("http://")); - int count = repository.Count(query); + // // Assert + // Assert.AreEqual(1, result.Count()); + // } + //} - // Assert - Assert.That(count, Is.EqualTo(2)); - } - } + //[Test] + //public void Can_Perform_Count_On_Repository() + //{ + // // Arrange + // var provider = new PetaPocoUnitOfWorkProvider(Logger); + // var unitOfWork = provider.GetUnitOfWork(); + // using (var repository = CreateRepository(unitOfWork)) + // { + // // Act + // var query = Query.Builder.Where(x => x.ServerAddress.StartsWith("http://")); + // int count = repository.Count(query); + + // // Assert + // Assert.That(count, Is.EqualTo(2)); + // } + //} [Test] public void Can_Perform_Add_On_Repository() @@ -159,7 +165,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(Logger); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = CreateRepositor(unitOfWork)) + using (var repository = CreateRepository(unitOfWork)) { // Act var server = new ServerRegistration("http://shazwazza.com", "COMPUTER4", DateTime.Now); @@ -178,7 +184,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(Logger); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = CreateRepositor(unitOfWork)) + using (var repository = CreateRepository(unitOfWork)) { // Act var server = repository.Get(2); @@ -203,7 +209,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(Logger); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = CreateRepositor(unitOfWork)) + using (var repository = CreateRepository(unitOfWork)) { // Act var server = repository.Get(3); @@ -224,7 +230,7 @@ namespace Umbraco.Tests.Persistence.Repositories // Arrange var provider = new PetaPocoUnitOfWorkProvider(Logger); var unitOfWork = provider.GetUnitOfWork(); - using (var repository = CreateRepositor(unitOfWork)) + using (var repository = CreateRepository(unitOfWork)) { // Act var exists = repository.Exists(3); @@ -246,7 +252,7 @@ namespace Umbraco.Tests.Persistence.Repositories { var provider = new PetaPocoUnitOfWorkProvider(Logger); using (var unitOfWork = provider.GetUnitOfWork()) - using (var repository = new ServerRegistrationRepository(unitOfWork, CacheHelper.CreateDisabledCacheHelper(), Mock.Of(), SqlSyntax)) + using (var repository = CreateRepository(unitOfWork)) { repository.AddOrUpdate(new ServerRegistration("http://localhost", "COMPUTER1", DateTime.Now) { IsActive = true }); repository.AddOrUpdate(new ServerRegistration("http://www.mydomain.com", "COMPUTER2", DateTime.Now));