From f10971efaaad04fad32b8231f1338a29e33a8fde Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Sat, 4 Apr 2020 11:11:47 +0200 Subject: [PATCH] Migrated relation tests into new project and builder pattern. --- src/Umbraco.Core/Models/RelationType.cs | 2 - .../Builders/Extensions/BuilderExtensions.cs | 7 ++ .../Builders/MemberTypeBuilder.cs | 4 +- .../Builders/RelationBuilder.cs | 95 +++++++++++++++++++ .../Builders/RelationTypeBuilder.cs | 26 +++-- .../Builders/TemplateBuilder.cs | 22 ++--- .../Models/RelationTests.cs | 73 ++++++++++++++ .../Models/RelationTypeTests.cs | 3 +- .../Builders/RelationBuilderTests.cs | 64 +++++++++++++ .../Builders/RelationTypeBuilderTests.cs | 55 +++++++++++ src/Umbraco.Tests/Models/RelationTests.cs | 70 -------------- src/Umbraco.Tests/Umbraco.Tests.csproj | 1 - 12 files changed, 319 insertions(+), 103 deletions(-) create mode 100644 src/Umbraco.Tests.Common/Builders/RelationBuilder.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTests.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/RelationBuilderTests.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/RelationTypeBuilderTests.cs delete mode 100644 src/Umbraco.Tests/Models/RelationTests.cs diff --git a/src/Umbraco.Core/Models/RelationType.cs b/src/Umbraco.Core/Models/RelationType.cs index 28290685c2..4c676feed6 100644 --- a/src/Umbraco.Core/Models/RelationType.cs +++ b/src/Umbraco.Core/Models/RelationType.cs @@ -31,8 +31,6 @@ namespace Umbraco.Core.Models _childObjectType = childObjectType; } - - /// /// Gets or sets the Name of the RelationType /// diff --git a/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs b/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs index cce3b88470..c105a8bded 100644 --- a/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs +++ b/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs @@ -33,6 +33,13 @@ namespace Umbraco.Tests.Common.Builders.Extensions return builder; } + public static T WithDeleteDate(this T builder, DateTime deleteDate) + where T : IWithDeleteDateBuilder + { + builder.DeleteDate = deleteDate; + return builder; + } + public static T WithAlias(this T builder, string alias) where T : IWithAliasBuilder { diff --git a/src/Umbraco.Tests.Common/Builders/MemberTypeBuilder.cs b/src/Umbraco.Tests.Common/Builders/MemberTypeBuilder.cs index b01b8a1680..357e701d1b 100644 --- a/src/Umbraco.Tests.Common/Builders/MemberTypeBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/MemberTypeBuilder.cs @@ -10,7 +10,7 @@ using Umbraco.Tests.Common.Builders.Interfaces; namespace Umbraco.Tests.Common.Builders { public class MemberTypeBuilder - : ChildBuilderBase, + : ChildBuilderBase, IWithIdBuilder, IWithAliasBuilder, IWithNameBuilder, @@ -97,7 +97,7 @@ namespace Umbraco.Tests.Common.Builders return builder; } - public override MemberType Build() + public override IMemberType Build() { var id = _id ?? 1; var name = _name ?? Guid.NewGuid().ToString(); diff --git a/src/Umbraco.Tests.Common/Builders/RelationBuilder.cs b/src/Umbraco.Tests.Common/Builders/RelationBuilder.cs new file mode 100644 index 0000000000..2cea234200 --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/RelationBuilder.cs @@ -0,0 +1,95 @@ +using System; +using Umbraco.Core.Models; +using Umbraco.Tests.Common.Builders.Interfaces; + +namespace Umbraco.Tests.Common.Builders +{ + public class RelationBuilder + : BuilderBase, + IWithIdBuilder, + IWithKeyBuilder, + IWithCreateDateBuilder, + IWithUpdateDateBuilder + { + private RelationTypeBuilder _relationTypeBuilder; + + private int? _id; + private int? _parentId; + private int? _childId; + private Guid? _key; + private DateTime? _createDate; + private DateTime? _updateDate; + private string _comment; + + public RelationBuilder WithComment(string comment) + { + _comment = comment; + return this; + } + + public RelationBuilder BetweenIds(int parentId, int childId) + { + _parentId = parentId; + _childId = childId; + return this; + } + + public RelationTypeBuilder AddRelationType() + { + var builder = new RelationTypeBuilder(this); + _relationTypeBuilder = builder; + return builder; + } + + public override Relation Build() + { + var id = _id ?? 0; + var parentId = _parentId ?? 0; + var childId = _childId ?? 0; + var key = _key ?? Guid.NewGuid(); + var createDate = _createDate ?? DateTime.Now; + var updateDate = _updateDate ?? DateTime.Now; + var comment = _comment ?? string.Empty; + + if (_relationTypeBuilder == null) + { + throw new InvalidOperationException("Cannot construct a Relation without a RelationType. Use AddRelationType()."); + } + + var relationType = _relationTypeBuilder.Build(); + + return new Relation(parentId, childId, relationType) + { + Comment = comment, + CreateDate = createDate, + Id = id, + Key = key, + UpdateDate = updateDate + }; + } + + int? IWithIdBuilder.Id + { + get => _id; + set => _id = value; + } + + Guid? IWithKeyBuilder.Key + { + get => _key; + set => _key = value; + } + + DateTime? IWithCreateDateBuilder.CreateDate + { + get => _createDate; + set => _createDate = value; + } + + DateTime? IWithUpdateDateBuilder.UpdateDate + { + get => _updateDate; + set => _updateDate = value; + } + } +} diff --git a/src/Umbraco.Tests.Common/Builders/RelationTypeBuilder.cs b/src/Umbraco.Tests.Common/Builders/RelationTypeBuilder.cs index 4ad39c6641..677d02bf09 100644 --- a/src/Umbraco.Tests.Common/Builders/RelationTypeBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/RelationTypeBuilder.cs @@ -4,15 +4,8 @@ using Umbraco.Tests.Common.Builders.Interfaces; namespace Umbraco.Tests.Common.Builders { - public class RelationTypeBuilder : RelationTypeBuilder - { - public RelationTypeBuilder() : base(null) - { - } - } - - public class RelationTypeBuilder - : ChildBuilderBase, + public class RelationTypeBuilder + : ChildBuilderBase, IWithIdBuilder, IWithAliasBuilder, IWithNameBuilder, @@ -32,7 +25,11 @@ namespace Umbraco.Tests.Common.Builders private Guid? _parentObjectType; private DateTime? _updateDate; - public RelationTypeBuilder(TParent parentBuilder) : base(parentBuilder) + public RelationTypeBuilder() : base(null) + { + } + + public RelationTypeBuilder(RelationBuilder parentBuilder) : base(parentBuilder) { } @@ -91,8 +88,7 @@ namespace Umbraco.Tests.Common.Builders var updateDate = _updateDate ?? DateTime.Now; var deleteDate = _deleteDate ?? null; - return new RelationType(name, alias, isBidirectional, parentObjectType, - childObjectType) + return new RelationType(name, alias, isBidirectional, parentObjectType, childObjectType) { Id = id, Key = key, @@ -102,19 +98,19 @@ namespace Umbraco.Tests.Common.Builders }; } - public RelationTypeBuilder WithIsBidirectional(bool isBidirectional) + public RelationTypeBuilder WithIsBidirectional(bool isBidirectional) { _isBidirectional = isBidirectional; return this; } - public RelationTypeBuilder WithChildObjectType(Guid childObjectType) + public RelationTypeBuilder WithChildObjectType(Guid childObjectType) { _childObjectType = childObjectType; return this; } - public RelationTypeBuilder WithParentObjectType(Guid parentObjectType) + public RelationTypeBuilder WithParentObjectType(Guid parentObjectType) { _parentObjectType = parentObjectType; return this; diff --git a/src/Umbraco.Tests.Common/Builders/TemplateBuilder.cs b/src/Umbraco.Tests.Common/Builders/TemplateBuilder.cs index 72e8028ebc..7f7fa0f098 100644 --- a/src/Umbraco.Tests.Common/Builders/TemplateBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/TemplateBuilder.cs @@ -58,17 +58,17 @@ namespace Umbraco.Tests.Common.Builders var shortStringHelper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig()); return new Template(shortStringHelper, name, alias) - { - Id = id, - Key = key, - CreateDate = createDate, - UpdateDate = updateDate, - Path = path, - Content = content, - IsMasterTemplate = isMasterTemplate, - MasterTemplateAlias = masterTemplateAlias, - MasterTemplateId = masterTemplateId, - }; + { + Id = id, + Key = key, + CreateDate = createDate, + UpdateDate = updateDate, + Path = path, + Content = content, + IsMasterTemplate = isMasterTemplate, + MasterTemplateAlias = masterTemplateAlias, + MasterTemplateId = masterTemplateId, + }; } int? IWithIdBuilder.Id diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTests.cs new file mode 100644 index 0000000000..c21fc250d9 --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTests.cs @@ -0,0 +1,73 @@ +using System; +using System.Diagnostics; +using Newtonsoft.Json; +using NUnit.Framework; +using Umbraco.Core.Models; +using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Common.Builders.Extensions; + +namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +{ + [TestFixture] + public class RelationTests + { + private readonly RelationBuilder _builder = new RelationBuilder(); + + [Test] + public void Can_Deep_Clone() + { + var relation = BuildRelation(); + + var clone = (Relation) relation.DeepClone(); + + Assert.AreNotSame(clone, relation); + Assert.AreEqual(clone, relation); + Assert.AreEqual(clone.ChildId, relation.ChildId); + Assert.AreEqual(clone.Comment, relation.Comment); + Assert.AreEqual(clone.CreateDate, relation.CreateDate); + Assert.AreEqual(clone.Id, relation.Id); + Assert.AreEqual(clone.Key, relation.Key); + Assert.AreEqual(clone.ParentId, relation.ParentId); + Assert.AreNotSame(clone.RelationType, relation.RelationType); + Assert.AreEqual(clone.RelationType, relation.RelationType); + Assert.AreEqual(clone.RelationTypeId, relation.RelationTypeId); + Assert.AreEqual(clone.UpdateDate, relation.UpdateDate); + + //This double verifies by reflection + var allProps = clone.GetType().GetProperties(); + foreach (var propertyInfo in allProps) + { + Assert.AreEqual(propertyInfo.GetValue(clone, null), propertyInfo.GetValue(relation, null)); + } + } + + [Test] + public void Can_Serialize_Without_Error() + { + var relation = BuildRelation(); + + var json = JsonConvert.SerializeObject(relation); + Debug.Print(json); + } + + private Relation BuildRelation() + { + return _builder + .BetweenIds(9, 8) + .WithId(4) + .WithComment("test comment") + .WithCreateDate(DateTime.Now) + .WithUpdateDate(DateTime.Now) + .WithKey(Guid.NewGuid()) + .AddRelationType() + .WithId(66) + .WithAlias("test") + .WithName("Test") + .WithIsBidirectional(false) + .WithParentObjectType(Guid.NewGuid()) + .WithChildObjectType(Guid.NewGuid()) + .Done() + .Build(); + } + } +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs index 29ad8251cc..924420fd55 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs @@ -30,8 +30,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models Assert.AreEqual(clone.Id, item.Id); Assert.AreEqual(clone.Key, item.Key); Assert.AreEqual(clone.Name, item.Name); - Assert.AreNotSame(clone.ParentObjectType, item.ParentObjectType); - Assert.AreNotSame(clone.ChildObjectType, item.ChildObjectType); + Assert.AreEqual(clone.CreateDate, item.CreateDate); Assert.AreEqual(clone.UpdateDate, item.UpdateDate); //This double verifies by reflection diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/RelationBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/RelationBuilderTests.cs new file mode 100644 index 0000000000..b59ae261e0 --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/RelationBuilderTests.cs @@ -0,0 +1,64 @@ +using System; +using NUnit.Framework; +using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Common.Builders.Extensions; + +namespace Umbraco.Tests.UnitTests.Umbraco.Tests.Common.Builders +{ + [TestFixture] + public class RelationBuilderTests + { + [Test] + public void Is_Built_Correctly() + { + // Arrange + const int parentId = 9; + const int childId = 8; + const int id = 4; + var key = Guid.NewGuid(); + var createDate = DateTime.Now.AddHours(-1); + var updateDate = DateTime.Now; + const string comment = "test comment"; + const int relationTypeId = 66; + const string relationTypeAlias = "test"; + const string relationTypeName = "name"; + var parentObjectType = Guid.NewGuid(); + var childObjectType = Guid.NewGuid(); + + var builder = new RelationBuilder(); + + // Act + var relation = builder + .BetweenIds(parentId, childId) + .WithId(id) + .WithComment(comment) + .WithCreateDate(createDate) + .WithUpdateDate(updateDate) + .WithKey(key) + .AddRelationType() + .WithId(relationTypeId) + .WithAlias(relationTypeAlias) + .WithName(relationTypeName) + .WithIsBidirectional(false) + .WithParentObjectType(parentObjectType) + .WithChildObjectType(childObjectType) + .Done() + .Build(); + + // Assert + Assert.AreEqual(parentId, relation.ParentId); + Assert.AreEqual(childId, relation.ChildId); + Assert.AreEqual(id, relation.Id); + Assert.AreEqual(createDate, relation.CreateDate); + Assert.AreEqual(updateDate, relation.UpdateDate); + Assert.AreEqual(key, relation.Key); + Assert.AreEqual(comment, relation.Comment); + Assert.AreEqual(relationTypeId, relation.RelationType.Id); + Assert.AreEqual(relationTypeAlias, relation.RelationType.Alias); + Assert.AreEqual(relationTypeName, relation.RelationType.Name); + Assert.IsFalse(relation.RelationType.IsBidirectional); + Assert.AreEqual(parentObjectType, relation.RelationType.ParentObjectType); + Assert.AreEqual(childObjectType, relation.RelationType.ChildObjectType); + } + } +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/RelationTypeBuilderTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/RelationTypeBuilderTests.cs new file mode 100644 index 0000000000..274ae7d878 --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/RelationTypeBuilderTests.cs @@ -0,0 +1,55 @@ +using System; +using NUnit.Framework; +using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Common.Builders.Extensions; + +namespace Umbraco.Tests.UnitTests.Umbraco.Tests.Common.Builders +{ + [TestFixture] + public class RelationTypeBuilderTests + { + [Test] + public void Is_Built_Correctly() + { + // Arrange + const int id = 3; + const string alias = "test"; + const string name = "Test"; + var key = Guid.NewGuid(); + var createDate = DateTime.Now.AddHours(-2); + var updateDate = DateTime.Now.AddHours(-1); + var deleteDate = DateTime.Now; + var parentObjectType = Guid.NewGuid(); + var childObjectType = Guid.NewGuid(); + const bool isBidirectional = true; + + var builder = new RelationTypeBuilder(); + + // Act + var relationType = builder + .WithId(id) + .WithAlias(alias) + .WithName(name) + .WithKey(key) + .WithCreateDate(createDate) + .WithUpdateDate(updateDate) + .WithDeleteDate(deleteDate) + .WithParentObjectType(parentObjectType) + .WithChildObjectType(childObjectType) + .WithIsBidirectional(isBidirectional) + .Build(); + + // Assert + Assert.AreEqual(id, relationType.Id); + Assert.AreEqual(alias, relationType.Alias); + Assert.AreEqual(name, relationType.Name); + Assert.AreEqual(key, relationType.Key); + Assert.AreEqual(createDate, relationType.CreateDate); + Assert.AreEqual(updateDate, relationType.UpdateDate); + Assert.AreEqual(deleteDate, relationType.DeleteDate); + Assert.AreEqual(parentObjectType, relationType.ParentObjectType); + Assert.AreEqual(childObjectType, relationType.ChildObjectType); + Assert.AreEqual(isBidirectional, relationType.IsBidirectional); + } + } +} diff --git a/src/Umbraco.Tests/Models/RelationTests.cs b/src/Umbraco.Tests/Models/RelationTests.cs deleted file mode 100644 index 261bd35bec..0000000000 --- a/src/Umbraco.Tests/Models/RelationTests.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using System.Diagnostics; -using Newtonsoft.Json; -using NUnit.Framework; -using Umbraco.Core.Models; -using Umbraco.Core.Serialization; - -namespace Umbraco.Tests.Models -{ - [TestFixture] - public class RelationTests - { - [Test] - public void Can_Deep_Clone() - { - var item = new Relation(9, 8, new RelationType("test", "test", false, Guid.NewGuid(), Guid.NewGuid()) - { - Id = 66 - }) - { - Comment = "test comment", - CreateDate = DateTime.Now, - Id = 4, - Key = Guid.NewGuid(), - UpdateDate = DateTime.Now - }; - - var clone = (Relation) item.DeepClone(); - - Assert.AreNotSame(clone, item); - Assert.AreEqual(clone, item); - Assert.AreEqual(clone.ChildId, item.ChildId); - Assert.AreEqual(clone.Comment, item.Comment); - Assert.AreEqual(clone.CreateDate, item.CreateDate); - Assert.AreEqual(clone.Id, item.Id); - Assert.AreEqual(clone.Key, item.Key); - Assert.AreEqual(clone.ParentId, item.ParentId); - Assert.AreNotSame(clone.RelationType, item.RelationType); - Assert.AreEqual(clone.RelationType, item.RelationType); - Assert.AreEqual(clone.RelationTypeId, item.RelationTypeId); - Assert.AreEqual(clone.UpdateDate, item.UpdateDate); - - //This double verifies by reflection - var allProps = clone.GetType().GetProperties(); - foreach (var propertyInfo in allProps) - { - Assert.AreEqual(propertyInfo.GetValue(clone, null), propertyInfo.GetValue(item, null)); - } - } - - [Test] - public void Can_Serialize_Without_Error() - { - var item = new Relation(9, 8, new RelationType("test", "test", false, Guid.NewGuid(), Guid.NewGuid()) - { - Id = 66 - }) - { - Comment = "test comment", - CreateDate = DateTime.Now, - Id = 4, - Key = Guid.NewGuid(), - UpdateDate = DateTime.Now - }; - - var json = JsonConvert.SerializeObject(item); - Debug.Print(json); - } - } -} diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj index 03fd5c958e..8f80020b32 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -299,7 +299,6 @@ -