From 50631c2b2894168915c7851ce2c5cc4d8ae59360 Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Sat, 28 Mar 2020 20:54:10 +0100 Subject: [PATCH] Migrated member group unit tests to new unit test project using builder pattern. --- .../Builders/ChildBuilderBase.cs | 1 - .../Builders/DataTypeBuilder.cs | 7 ++ .../Builders/Extensions/BuilderExtensions.cs | 7 ++ .../Builders/GenericDictionaryBuilder.cs | 26 ++++++ .../Interfaces/IWithCreatorIdBuilder.cs | 9 ++ .../Builders/MemberGroupBuilder.cs | 90 +++++++++++++++++++ .../Models/DataTypeTests.cs | 2 +- .../Models/MemberGroupTests.cs | 48 +++++----- src/Umbraco.Tests/Umbraco.Tests.csproj | 1 - 9 files changed, 162 insertions(+), 29 deletions(-) create mode 100644 src/Umbraco.Tests.Common/Builders/GenericDictionaryBuilder.cs create mode 100644 src/Umbraco.Tests.Common/Builders/Interfaces/IWithCreatorIdBuilder.cs create mode 100644 src/Umbraco.Tests.Common/Builders/MemberGroupBuilder.cs rename src/{Umbraco.Tests => Umbraco.Tests.UnitTests/Umbraco.Infrastructure}/Models/MemberGroupTests.cs (61%) diff --git a/src/Umbraco.Tests.Common/Builders/ChildBuilderBase.cs b/src/Umbraco.Tests.Common/Builders/ChildBuilderBase.cs index e1436ac1fe..fcd9691e1f 100644 --- a/src/Umbraco.Tests.Common/Builders/ChildBuilderBase.cs +++ b/src/Umbraco.Tests.Common/Builders/ChildBuilderBase.cs @@ -9,7 +9,6 @@ namespace Umbraco.Tests.Common.Builders _parentBuilder = parentBuilder; } - public TParent Done() { return _parentBuilder; diff --git a/src/Umbraco.Tests.Common/Builders/DataTypeBuilder.cs b/src/Umbraco.Tests.Common/Builders/DataTypeBuilder.cs index 20dc1bab81..04a464e5bd 100644 --- a/src/Umbraco.Tests.Common/Builders/DataTypeBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/DataTypeBuilder.cs @@ -8,6 +8,7 @@ namespace Umbraco.Tests.Common.Builders : BuilderBase, IWithIdBuilder, IWithKeyBuilder, + IWithCreatorIdBuilder, IWithCreateDateBuilder, IWithUpdateDateBuilder, IWithDeleteDateBuilder, @@ -133,6 +134,12 @@ namespace Umbraco.Tests.Common.Builders set => _key = value; } + int? IWithCreatorIdBuilder.CreatorId + { + get => _creatorId; + set => _creatorId = value; + } + DateTime? IWithCreateDateBuilder.CreateDate { get => _createDate; diff --git a/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs b/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs index c8f3f80bf1..6a2407ae53 100644 --- a/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs +++ b/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs @@ -12,6 +12,13 @@ namespace Umbraco.Tests.Common.Builders.Extensions return builder; } + public static T WithCreatorId(this T builder, int creatorId) + where T : IWithCreatorIdBuilder + { + builder.CreatorId = creatorId; + return builder; + } + public static T WithCreateDate(this T builder, DateTime createDate) where T : IWithCreateDateBuilder { diff --git a/src/Umbraco.Tests.Common/Builders/GenericDictionaryBuilder.cs b/src/Umbraco.Tests.Common/Builders/GenericDictionaryBuilder.cs new file mode 100644 index 0000000000..0cf2284a49 --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/GenericDictionaryBuilder.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; + +namespace Umbraco.Tests.Common.Builders +{ + public class GenericDictionaryBuilder + : ChildBuilderBase> + { + private readonly IDictionary _dictionary; + + public GenericDictionaryBuilder(TBuilder parentBuilder) : base(parentBuilder) + { + _dictionary = new Dictionary(); + } + + public override IDictionary Build() + { + return new Dictionary(); + } + + public GenericDictionaryBuilder AddKeyValue(TKey key, TValue value) + { + _dictionary.Add(key, value); + return this; + } + } +} diff --git a/src/Umbraco.Tests.Common/Builders/Interfaces/IWithCreatorIdBuilder.cs b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithCreatorIdBuilder.cs new file mode 100644 index 0000000000..ae7712cf9e --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithCreatorIdBuilder.cs @@ -0,0 +1,9 @@ +using System; + +namespace Umbraco.Tests.Common.Builders.Interfaces +{ + public interface IWithCreatorIdBuilder + { + int? CreatorId { get; set; } + } +} diff --git a/src/Umbraco.Tests.Common/Builders/MemberGroupBuilder.cs b/src/Umbraco.Tests.Common/Builders/MemberGroupBuilder.cs new file mode 100644 index 0000000000..6092c79abb --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/MemberGroupBuilder.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using Umbraco.Core.Models; +using Umbraco.Tests.Common.Builders.Interfaces; + +namespace Umbraco.Tests.Common.Builders +{ + public class MemberGroupBuilder + : BuilderBase, + IWithIdBuilder, + IWithKeyBuilder, + IWithCreatorIdBuilder, + IWithCreateDateBuilder, + IWithUpdateDateBuilder, + IWithNameBuilder + { + private int? _id; + private Guid? _key; + private DateTime? _createDate; + private DateTime? _updateDate; + private string _name; + private int? _creatorId; + private IDictionary _additionalData = new Dictionary(); + + private GenericDictionaryBuilder _additionalDataBuilder; + + public GenericDictionaryBuilder AddAdditionalData() + { + var builder = new GenericDictionaryBuilder(this); + _additionalDataBuilder = builder; + return builder; + } + + public override MemberGroup Build() + { + var id = _id ?? 1; + var key = _key ?? Guid.NewGuid(); + var createDate = _createDate ?? DateTime.Now; + var updateDate = _updateDate ?? DateTime.Now; + var name = _name ?? Guid.NewGuid().ToString(); + var creatorId = _creatorId ?? 1; + + return new MemberGroup + { + Id = id, + Key = key, + CreateDate = createDate, + UpdateDate = updateDate, + Name = name, + CreatorId = creatorId, + }; + } + + int? IWithIdBuilder.Id + { + get => _id; + set => _id = value; + } + + Guid? IWithKeyBuilder.Key + { + get => _key; + set => _key = value; + } + + int? IWithCreatorIdBuilder.CreatorId + { + get => _creatorId; + set => _creatorId = value; + } + + DateTime? IWithCreateDateBuilder.CreateDate + { + get => _createDate; + set => _createDate = value; + } + + DateTime? IWithUpdateDateBuilder.UpdateDate + { + get => _updateDate; + set => _updateDate = value; + } + + string IWithNameBuilder.Name + { + get => _name; + set => _name = value; + } + } +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs index a097661a93..4be32a9b4f 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs @@ -10,8 +10,8 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models [TestFixture] public class DataTypeTests { - private readonly DataTypeBuilder _builder = new DataTypeBuilder(); + [Test] public void Can_Deep_Clone() { diff --git a/src/Umbraco.Tests/Models/MemberGroupTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/MemberGroupTests.cs similarity index 61% rename from src/Umbraco.Tests/Models/MemberGroupTests.cs rename to src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/MemberGroupTests.cs index c3cf1c8c76..158a70598c 100644 --- a/src/Umbraco.Tests/Models/MemberGroupTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/MemberGroupTests.cs @@ -3,28 +3,21 @@ using System.Diagnostics; using Newtonsoft.Json; using NUnit.Framework; using Umbraco.Core.Models; -using Umbraco.Core.Serialization; +using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Common.Builders.Extensions; -namespace Umbraco.Tests.Models +namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models { [TestFixture] public class MemberGroupTests { + private readonly MemberGroupBuilder _builder = new MemberGroupBuilder(); + [Test] public void Can_Deep_Clone() { // Arrange - var group = new MemberGroup() - { - CreateDate = DateTime.Now, - CreatorId = 4, - Id = 6, - Key = Guid.NewGuid(), - UpdateDate = DateTime.Now, - Name = "asdf" - }; - group.AdditionalData.Add("test1", 123); - group.AdditionalData.Add("test2", "hello"); + var group = BuildMemberGroup(); // Act var clone = (MemberGroup)group.DeepClone(); @@ -44,29 +37,32 @@ namespace Umbraco.Tests.Models //This double verifies by reflection var allProps = clone.GetType().GetProperties(); foreach (var propertyInfo in allProps) - { Assert.AreEqual(propertyInfo.GetValue(clone, null), propertyInfo.GetValue(group, null)); - } } [Test] public void Can_Serialize_Without_Error() { - var group = new MemberGroup() - { - CreateDate = DateTime.Now, - CreatorId = 4, - Id = 6, - Key = Guid.NewGuid(), - UpdateDate = DateTime.Now, - Name = "asdf" - }; - group.AdditionalData.Add("test1", 123); - group.AdditionalData.Add("test2", "hello"); + var group = BuildMemberGroup(); var json = JsonConvert.SerializeObject(group); Debug.Print(json); } + private MemberGroup BuildMemberGroup() + { + return _builder + .WithId(6) + .WithKey(Guid.NewGuid()) + .WithName("asdf") + .WithCreatorId(4) + .WithCreateDate(DateTime.Now) + .WithUpdateDate(DateTime.Now) + .AddAdditionalData() + .AddKeyValue("test1", 123) + .AddKeyValue("test2", "hello") + .Done() + .Build(); + } } } diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 06f6a98573..eb500bf7e3 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -298,7 +298,6 @@ -