From b77beb386a79c21d6be84d0be045d291b3cd59c5 Mon Sep 17 00:00:00 2001 From: sitereactor Date: Mon, 5 Nov 2012 09:29:29 -0100 Subject: [PATCH] Adding unit tests for the two repository-backing cache providers --- .../Caching/RuntimeCacheProvider.cs | 1 + .../Persistence/UnitOfWork/FileUnitOfWork.cs | 3 +- .../UnitOfWork/PetaPocoUnitOfWork.cs | 1 - .../Caching/InMemoryCacheProviderTest.cs | 102 ++++++++++++++++++ .../Caching/RuntimeCacheProviderTest.cs | 102 ++++++++++++++++++ src/Umbraco.Tests/Umbraco.Tests.csproj | 2 + 6 files changed, 208 insertions(+), 3 deletions(-) create mode 100644 src/Umbraco.Tests/Persistence/Caching/InMemoryCacheProviderTest.cs create mode 100644 src/Umbraco.Tests/Persistence/Caching/RuntimeCacheProviderTest.cs diff --git a/src/Umbraco.Core/Persistence/Caching/RuntimeCacheProvider.cs b/src/Umbraco.Core/Persistence/Caching/RuntimeCacheProvider.cs index d738cc73a9..a0b1171078 100644 --- a/src/Umbraco.Core/Persistence/Caching/RuntimeCacheProvider.cs +++ b/src/Umbraco.Core/Persistence/Caching/RuntimeCacheProvider.cs @@ -24,6 +24,7 @@ namespace Umbraco.Core.Persistence.Caching #endregion private readonly ObjectCache _memoryCache = new MemoryCache("in-memory"); + //TODO Save this in cache as well, so its not limited to a single server usage private ConcurrentDictionary _keyTracker = new ConcurrentDictionary(); public IEntity GetById(Type type, Guid id) diff --git a/src/Umbraco.Core/Persistence/UnitOfWork/FileUnitOfWork.cs b/src/Umbraco.Core/Persistence/UnitOfWork/FileUnitOfWork.cs index 03c8e3da4e..5e441fe242 100644 --- a/src/Umbraco.Core/Persistence/UnitOfWork/FileUnitOfWork.cs +++ b/src/Umbraco.Core/Persistence/UnitOfWork/FileUnitOfWork.cs @@ -12,12 +12,11 @@ namespace Umbraco.Core.Persistence.UnitOfWork internal class FileUnitOfWork : IUnitOfWork { private Guid _key; - private List _operations; + private readonly List _operations = new List(); public FileUnitOfWork() { _key = Guid.NewGuid(); - _operations = new List(); } #region Implementation of IUnitOfWork diff --git a/src/Umbraco.Core/Persistence/UnitOfWork/PetaPocoUnitOfWork.cs b/src/Umbraco.Core/Persistence/UnitOfWork/PetaPocoUnitOfWork.cs index ac107b76d1..6266053390 100644 --- a/src/Umbraco.Core/Persistence/UnitOfWork/PetaPocoUnitOfWork.cs +++ b/src/Umbraco.Core/Persistence/UnitOfWork/PetaPocoUnitOfWork.cs @@ -16,7 +16,6 @@ namespace Umbraco.Core.Persistence.UnitOfWork public PetaPocoUnitOfWork() { _key = Guid.NewGuid(); - //_operations = new List(); } /// diff --git a/src/Umbraco.Tests/Persistence/Caching/InMemoryCacheProviderTest.cs b/src/Umbraco.Tests/Persistence/Caching/InMemoryCacheProviderTest.cs new file mode 100644 index 0000000000..daf1bc03aa --- /dev/null +++ b/src/Umbraco.Tests/Persistence/Caching/InMemoryCacheProviderTest.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using Umbraco.Core; +using Umbraco.Core.Persistence.Caching; +using Umbraco.Tests.TestHelpers.Entities; + +namespace Umbraco.Tests.Persistence.Caching +{ + [TestFixture] + public class InMemoryCacheProviderTest + { + private IRepositoryCacheProvider _registry; + + [SetUp] + public void Initiate_Registry() + { + _registry = InMemoryCacheProvider.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") }; + var entity4 = new MockedEntity { Id = 4, Key = 4.ToGuid(), Alias = "mocked4", Name = "Mocked4", Value = Guid.NewGuid().ToString("n") }; + var entity5 = new MockedEntity { Id = 5, Key = 5.ToGuid(), Alias = "mocked5", Name = "Mocked5", Value = Guid.NewGuid().ToString("n") }; + var entity6 = new MockedEntity { Id = 6, Key = 6.ToGuid(), Alias = "mocked6", Name = "Mocked6", Value = Guid.NewGuid().ToString("n") }; + + _registry.Save(typeof(MockedEntity), entity1); + _registry.Save(typeof(MockedEntity), entity2); + _registry.Save(typeof(MockedEntity), entity3); + _registry.Save(typeof(MockedEntity), entity4); + _registry.Save(typeof(MockedEntity), entity5); + _registry.Save(typeof(MockedEntity), entity6); + } + + [Test] + public void Can_Get_Entity_From_Registry() + { + // Arrange + var mockedEntity = new MockedEntity { Id = 20, Key = 20.ToGuid(), Alias = "getMocked", Name = "GetMocked", Value = "Getting entity by id test" }; + _registry.Save(typeof(MockedEntity), mockedEntity); + + // Act + var entity = _registry.GetById(mockedEntity.GetType(), mockedEntity.Key); + + // Assert + Assert.That(entity, Is.Not.Null); + Assert.That(entity.Id, Is.EqualTo(mockedEntity.Id)); + Assert.That(entity.GetType(), Is.EqualTo(mockedEntity.GetType())); + } + + [Test] + public void Can_Get_Entities_By_Ids_From_Registry() + { + // Arrange + var mockedEntity1 = new MockedEntity { Id = 30, Key = 30.ToGuid(), Alias = "getMocked1", Name = "GetMocked1", Value = "Entity 1 - Getting entity by ids test" }; + var mockedEntity2 = new MockedEntity { Id = 31, Key = 31.ToGuid(), Alias = "getMocked2", Name = "GetMocked2", Value = "Entity 2 - Getting entity by ids test" }; + _registry.Save(typeof(MockedEntity), mockedEntity1); + _registry.Save(typeof(MockedEntity), mockedEntity2); + + // Act + var entities = _registry.GetByIds(typeof(MockedEntity), new List { mockedEntity1.Key, mockedEntity2.Key }).ToList(); + + // Assert + Assert.That(entities, Is.Not.Null); + Assert.That(entities.Count(), Is.EqualTo(2)); + Assert.That(entities.Any(x => x.Id == mockedEntity1.Id), Is.True); + Assert.That(entities.Any(x => x.Id == mockedEntity2.Id), Is.True); + } + + [Test] + public void Can_Get_Entities_By_Type_From_Registry() + { + var entities = _registry.GetAllByType(typeof(MockedEntity)); + + Assert.That(entities, Is.Not.Null); + Assert.That(entities.Any(), Is.True); + Assert.That(entities.Count(), Is.GreaterThanOrEqualTo(6)); + } + + [Test] + public void Can_Delete_Entity_From_Registry() + { + // Arrange + var mockedEntity = new MockedEntity { Id = 40, Key = 40.ToGuid(), Alias = "deleteMocked", Name = "DeleteMocked", Value = "Deleting entity test" }; + _registry.Save(typeof(MockedEntity), mockedEntity); + var entitiesBeforeDeletion = _registry.GetAllByType(typeof(MockedEntity)); + int countBefore = entitiesBeforeDeletion.Count(); + + // Act + var entity = _registry.GetById(mockedEntity.GetType(), mockedEntity.Key); + _registry.Delete(typeof(MockedEntity), entity); + var entitiesAfterDeletion = _registry.GetAllByType(typeof(MockedEntity)); + int countAfter = entitiesAfterDeletion.Count(); + + // Assert + Assert.That(countBefore, Is.GreaterThan(countAfter)); + Assert.That(entitiesAfterDeletion.Count(x => x.Id == mockedEntity.Id), Is.EqualTo(0)); + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Tests/Persistence/Caching/RuntimeCacheProviderTest.cs b/src/Umbraco.Tests/Persistence/Caching/RuntimeCacheProviderTest.cs new file mode 100644 index 0000000000..5d8f5c6824 --- /dev/null +++ b/src/Umbraco.Tests/Persistence/Caching/RuntimeCacheProviderTest.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using Umbraco.Core; +using Umbraco.Core.Persistence.Caching; +using Umbraco.Tests.TestHelpers.Entities; + +namespace Umbraco.Tests.Persistence.Caching +{ + [TestFixture] + public class RuntimeCacheProviderTest + { + private IRepositoryCacheProvider _registry; + + [SetUp] + public void Initiate_Registry() + { + _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") }; + var entity4 = new MockedEntity { Id = 4, Key = 4.ToGuid(), Alias = "mocked4", Name = "Mocked4", Value = Guid.NewGuid().ToString("n") }; + var entity5 = new MockedEntity { Id = 5, Key = 5.ToGuid(), Alias = "mocked5", Name = "Mocked5", Value = Guid.NewGuid().ToString("n") }; + var entity6 = new MockedEntity { Id = 6, Key = 6.ToGuid(), Alias = "mocked6", Name = "Mocked6", Value = Guid.NewGuid().ToString("n") }; + + _registry.Save(typeof(MockedEntity), entity1); + _registry.Save(typeof(MockedEntity), entity2); + _registry.Save(typeof(MockedEntity), entity3); + _registry.Save(typeof(MockedEntity), entity4); + _registry.Save(typeof(MockedEntity), entity5); + _registry.Save(typeof(MockedEntity), entity6); + } + + [Test] + public void Can_Get_Entity_From_Registry() + { + // Arrange + var mockedEntity = new MockedEntity { Id = 20, Key = 20.ToGuid(), Alias = "getMocked", Name = "GetMocked", Value = "Getting entity by id test" }; + _registry.Save(typeof(MockedEntity), mockedEntity); + + // Act + var entity = _registry.GetById(mockedEntity.GetType(), mockedEntity.Key); + + // Assert + Assert.That(entity, Is.Not.Null); + Assert.That(entity.Id, Is.EqualTo(mockedEntity.Id)); + Assert.That(entity.GetType(), Is.EqualTo(mockedEntity.GetType())); + } + + [Test] + public void Can_Get_Entities_By_Ids_From_Registry() + { + // Arrange + var mockedEntity1 = new MockedEntity { Id = 30, Key = 30.ToGuid(), Alias = "getMocked1", Name = "GetMocked1", Value = "Entity 1 - Getting entity by ids test" }; + var mockedEntity2 = new MockedEntity { Id = 31, Key = 31.ToGuid(), Alias = "getMocked2", Name = "GetMocked2", Value = "Entity 2 - Getting entity by ids test" }; + _registry.Save(typeof(MockedEntity), mockedEntity1); + _registry.Save(typeof(MockedEntity), mockedEntity2); + + // Act + var entities = _registry.GetByIds(typeof(MockedEntity), new List { mockedEntity1.Key, mockedEntity2.Key }).ToList(); + + // Assert + Assert.That(entities, Is.Not.Null); + Assert.That(entities.Count(), Is.EqualTo(2)); + Assert.That(entities.Any(x => x.Id == mockedEntity1.Id), Is.True); + Assert.That(entities.Any(x => x.Id == mockedEntity2.Id), Is.True); + } + + [Test] + public void Can_Get_Entities_By_Type_From_Registry() + { + var entities = _registry.GetAllByType(typeof(MockedEntity)); + + Assert.That(entities, Is.Not.Null); + Assert.That(entities.Any(), Is.True); + Assert.That(entities.Count(), Is.GreaterThanOrEqualTo(6)); + } + + [Test] + public void Can_Delete_Entity_From_Registry() + { + // Arrange + var mockedEntity = new MockedEntity { Id = 40, Key = 40.ToGuid(), Alias = "deleteMocked", Name = "DeleteMocked", Value = "Deleting entity test" }; + _registry.Save(typeof(MockedEntity), mockedEntity); + var entitiesBeforeDeletion = _registry.GetAllByType(typeof(MockedEntity)); + int countBefore = entitiesBeforeDeletion.Count(); + + // Act + var entity = _registry.GetById(mockedEntity.GetType(), mockedEntity.Key); + _registry.Delete(typeof(MockedEntity), entity); + var entitiesAfterDeletion = _registry.GetAllByType(typeof(MockedEntity)); + int countAfter = entitiesAfterDeletion.Count(); + + // Assert + Assert.That(countBefore, Is.GreaterThan(countAfter)); + Assert.That(entitiesAfterDeletion.Count(x => x.Id == mockedEntity.Id), Is.EqualTo(0)); + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 4e04a5b841..f0ae5b58a0 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -95,6 +95,8 @@ + +