From 9a830e5de61cf70fcbe77ecb3fa32c3f89fa1278 Mon Sep 17 00:00:00 2001 From: Shannon Date: Wed, 27 Jan 2016 19:44:36 +0100 Subject: [PATCH] fixes tests --- .../Cache/FullDataSetRepositoryCachePolicy.cs | 7 +++++-- .../Cache/FullDataSetRepositoryCachePolicyFactory.cs | 11 +++++++---- .../Persistence/Repositories/ContentTypeRepository.cs | 2 +- .../Persistence/Repositories/DomainRepository.cs | 2 +- .../Persistence/Repositories/LanguageRepository.cs | 2 +- .../Persistence/Repositories/MediaTypeRepository.cs | 2 +- .../Persistence/Repositories/MemberTypeRepository.cs | 2 +- .../Repositories/PublicAccessRepository.cs | 2 +- .../Persistence/Repositories/RepositoryBase.cs | 6 +++++- .../Persistence/Repositories/TemplateRepository.cs | 2 +- .../Cache/FullDataSetCachePolicyTests.cs | 8 ++++---- 11 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/Umbraco.Core/Cache/FullDataSetRepositoryCachePolicy.cs b/src/Umbraco.Core/Cache/FullDataSetRepositoryCachePolicy.cs index b435615d54..c098af8992 100644 --- a/src/Umbraco.Core/Cache/FullDataSetRepositoryCachePolicy.cs +++ b/src/Umbraco.Core/Cache/FullDataSetRepositoryCachePolicy.cs @@ -18,7 +18,9 @@ namespace Umbraco.Core.Cache internal class FullDataSetRepositoryCachePolicy : DefaultRepositoryCachePolicy where TEntity : class, IAggregateRoot { - public FullDataSetRepositoryCachePolicy(IRuntimeCacheProvider cache) : base(cache, + private readonly Func _getEntityId; + + public FullDataSetRepositoryCachePolicy(IRuntimeCacheProvider cache, Func getEntityId) : base(cache, new RepositoryCachePolicyOptions { //Definitely allow zero'd cache entires since this is a full set, in many cases there will be none, @@ -26,6 +28,7 @@ namespace Umbraco.Core.Cache GetAllCacheAllowZeroCount = true }) { + _getEntityId = getEntityId; } private bool? _hasZeroCountCache; @@ -40,7 +43,7 @@ namespace Umbraco.Core.Cache // Now we can just filter by ids if they have been supplied return ids.Any() - ? result.Where(x => ids.Contains((TId) (object) x.Id)).ToArray() + ? result.Where(x => ids.Contains(_getEntityId(x))).ToArray() : result; } diff --git a/src/Umbraco.Core/Cache/FullDataSetRepositoryCachePolicyFactory.cs b/src/Umbraco.Core/Cache/FullDataSetRepositoryCachePolicyFactory.cs index 75bdae7e83..6a79c2b8c2 100644 --- a/src/Umbraco.Core/Cache/FullDataSetRepositoryCachePolicyFactory.cs +++ b/src/Umbraco.Core/Cache/FullDataSetRepositoryCachePolicyFactory.cs @@ -1,3 +1,4 @@ +using System; using Umbraco.Core.Models.EntityBase; namespace Umbraco.Core.Cache @@ -11,15 +12,17 @@ namespace Umbraco.Core.Cache where TEntity : class, IAggregateRoot { private readonly IRuntimeCacheProvider _runtimeCache; - - public FullDataSetRepositoryCachePolicyFactory(IRuntimeCacheProvider runtimeCache) + private readonly Func _getEntityId; + + public FullDataSetRepositoryCachePolicyFactory(IRuntimeCacheProvider runtimeCache, Func getEntityId) { - _runtimeCache = runtimeCache; + _runtimeCache = runtimeCache; + _getEntityId = getEntityId; } public virtual IRepositoryCachePolicy CreatePolicy() { - return new FullDataSetRepositoryCachePolicy(_runtimeCache); + return new FullDataSetRepositoryCachePolicy(_runtimeCache, _getEntityId); } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs index 2fdc0e8613..1a09a2206d 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs @@ -34,7 +34,7 @@ namespace Umbraco.Core.Persistence.Repositories get { //Use a FullDataSet cache policy - this will cache the entire GetAll result in a single collection - return _cachePolicyFactory ?? (_cachePolicyFactory = new FullDataSetRepositoryCachePolicyFactory(RuntimeCache)); + return _cachePolicyFactory ?? (_cachePolicyFactory = new FullDataSetRepositoryCachePolicyFactory(RuntimeCache, GetEntityId)); } } diff --git a/src/Umbraco.Core/Persistence/Repositories/DomainRepository.cs b/src/Umbraco.Core/Persistence/Repositories/DomainRepository.cs index 6abab73dd7..563243f12c 100644 --- a/src/Umbraco.Core/Persistence/Repositories/DomainRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/DomainRepository.cs @@ -29,7 +29,7 @@ namespace Umbraco.Core.Persistence.Repositories get { //Use a FullDataSet cache policy - this will cache the entire GetAll result in a single collection - return _cachePolicyFactory ?? (_cachePolicyFactory = new FullDataSetRepositoryCachePolicyFactory(RuntimeCache)); + return _cachePolicyFactory ?? (_cachePolicyFactory = new FullDataSetRepositoryCachePolicyFactory(RuntimeCache, GetEntityId)); } } diff --git a/src/Umbraco.Core/Persistence/Repositories/LanguageRepository.cs b/src/Umbraco.Core/Persistence/Repositories/LanguageRepository.cs index 6fc9bd5ebc..3884eac888 100644 --- a/src/Umbraco.Core/Persistence/Repositories/LanguageRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/LanguageRepository.cs @@ -30,7 +30,7 @@ namespace Umbraco.Core.Persistence.Repositories get { //Use a FullDataSet cache policy - this will cache the entire GetAll result in a single collection - return _cachePolicyFactory ?? (_cachePolicyFactory = new FullDataSetRepositoryCachePolicyFactory(RuntimeCache)); + return _cachePolicyFactory ?? (_cachePolicyFactory = new FullDataSetRepositoryCachePolicyFactory(RuntimeCache, GetEntityId)); } } diff --git a/src/Umbraco.Core/Persistence/Repositories/MediaTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MediaTypeRepository.cs index 9147cead55..4ee5e1a327 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MediaTypeRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MediaTypeRepository.cs @@ -31,7 +31,7 @@ namespace Umbraco.Core.Persistence.Repositories get { //Use a FullDataSet cache policy - this will cache the entire GetAll result in a single collection - return _cachePolicyFactory ?? (_cachePolicyFactory = new FullDataSetRepositoryCachePolicyFactory(RuntimeCache)); + return _cachePolicyFactory ?? (_cachePolicyFactory = new FullDataSetRepositoryCachePolicyFactory(RuntimeCache, GetEntityId)); } } diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs index ca2b0715ac..4bfdbf3c8a 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs @@ -33,7 +33,7 @@ namespace Umbraco.Core.Persistence.Repositories get { //Use a FullDataSet cache policy - this will cache the entire GetAll result in a single collection - return _cachePolicyFactory ?? (_cachePolicyFactory = new FullDataSetRepositoryCachePolicyFactory(RuntimeCache)); + return _cachePolicyFactory ?? (_cachePolicyFactory = new FullDataSetRepositoryCachePolicyFactory(RuntimeCache, GetEntityId)); } } diff --git a/src/Umbraco.Core/Persistence/Repositories/PublicAccessRepository.cs b/src/Umbraco.Core/Persistence/Repositories/PublicAccessRepository.cs index 1086b9cee0..1d8e56190b 100644 --- a/src/Umbraco.Core/Persistence/Repositories/PublicAccessRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/PublicAccessRepository.cs @@ -26,7 +26,7 @@ namespace Umbraco.Core.Persistence.Repositories get { //Use a FullDataSet cache policy - this will cache the entire GetAll result in a single collection - return _cachePolicyFactory ?? (_cachePolicyFactory = new FullDataSetRepositoryCachePolicyFactory(RuntimeCache)); + return _cachePolicyFactory ?? (_cachePolicyFactory = new FullDataSetRepositoryCachePolicyFactory(RuntimeCache, GetEntityId)); } } diff --git a/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs index 88b8e93772..5534a9ea40 100644 --- a/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs @@ -82,7 +82,11 @@ namespace Umbraco.Core.Persistence.Repositories { } - + + protected virtual TId GetEntityId(TEntity entity) + { + return (TId)(object)entity.Id; + } /// /// The runtime cache used for this repo by default is the isolated cache for this type diff --git a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs index acc17b370a..3545bc1c55 100644 --- a/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/TemplateRepository.cs @@ -51,7 +51,7 @@ namespace Umbraco.Core.Persistence.Repositories get { //Use a FullDataSet cache policy - this will cache the entire GetAll result in a single collection - return _cachePolicyFactory ?? (_cachePolicyFactory = new FullDataSetRepositoryCachePolicyFactory(RuntimeCache)); + return _cachePolicyFactory ?? (_cachePolicyFactory = new FullDataSetRepositoryCachePolicyFactory(RuntimeCache, GetEntityId)); } } diff --git a/src/Umbraco.Tests/Cache/FullDataSetCachePolicyTests.cs b/src/Umbraco.Tests/Cache/FullDataSetCachePolicyTests.cs index 3d3884c686..9187fe5b27 100644 --- a/src/Umbraco.Tests/Cache/FullDataSetCachePolicyTests.cs +++ b/src/Umbraco.Tests/Cache/FullDataSetCachePolicyTests.cs @@ -36,7 +36,7 @@ namespace Umbraco.Tests.Cache return cached.Any() ? new DeepCloneableList() : null; }); - var defaultPolicy = new FullDataSetRepositoryCachePolicy(cache.Object); + var defaultPolicy = new FullDataSetRepositoryCachePolicy(cache.Object, item => item.Id); using (defaultPolicy) { var found = defaultPolicy.GetAll(new object[] {}, o => new AuditItem[] {}); @@ -46,7 +46,7 @@ namespace Umbraco.Tests.Cache Assert.IsNotNull(list); //Do it again, ensure that its coming from the cache! - defaultPolicy = new FullDataSetRepositoryCachePolicy(cache.Object); + defaultPolicy = new FullDataSetRepositoryCachePolicy(cache.Object, item => item.Id); using (defaultPolicy) { var found = defaultPolicy.GetAll(new object[] { }, o => new AuditItem[] { }); @@ -73,7 +73,7 @@ namespace Umbraco.Tests.Cache }); cache.Setup(x => x.GetCacheItem(It.IsAny())).Returns(new AuditItem[] { }); - var defaultPolicy = new FullDataSetRepositoryCachePolicy(cache.Object); + var defaultPolicy = new FullDataSetRepositoryCachePolicy(cache.Object, item => item.Id); using (defaultPolicy) { var found = defaultPolicy.GetAll(new object[] { }, o => new[] @@ -98,7 +98,7 @@ namespace Umbraco.Tests.Cache new AuditItem(2, "blah2", AuditType.Copy, 123) }); - var defaultPolicy = new FullDataSetRepositoryCachePolicy(cache.Object); + var defaultPolicy = new FullDataSetRepositoryCachePolicy(cache.Object, item => item.Id); using (defaultPolicy) { var found = defaultPolicy.GetAll(new object[] { }, o => new[] { (AuditItem)null });