Migrated relation tests into new project and builder pattern.

This commit is contained in:
Andy Butland
2020-04-04 11:11:47 +02:00
parent 58a1bc0a8f
commit f10971efaa
12 changed files with 319 additions and 103 deletions

View File

@@ -31,8 +31,6 @@ namespace Umbraco.Core.Models
_childObjectType = childObjectType;
}
/// <summary>
/// Gets or sets the Name of the RelationType
/// </summary>

View File

@@ -33,6 +33,13 @@ namespace Umbraco.Tests.Common.Builders.Extensions
return builder;
}
public static T WithDeleteDate<T>(this T builder, DateTime deleteDate)
where T : IWithDeleteDateBuilder
{
builder.DeleteDate = deleteDate;
return builder;
}
public static T WithAlias<T>(this T builder, string alias)
where T : IWithAliasBuilder
{

View File

@@ -10,7 +10,7 @@ using Umbraco.Tests.Common.Builders.Interfaces;
namespace Umbraco.Tests.Common.Builders
{
public class MemberTypeBuilder
: ChildBuilderBase<MemberBuilder, MemberType>,
: ChildBuilderBase<MemberBuilder, IMemberType>,
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();

View File

@@ -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<Relation>,
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;
}
}
}

View File

@@ -4,15 +4,8 @@ using Umbraco.Tests.Common.Builders.Interfaces;
namespace Umbraco.Tests.Common.Builders
{
public class RelationTypeBuilder : RelationTypeBuilder<object>
{
public RelationTypeBuilder() : base(null)
{
}
}
public class RelationTypeBuilder<TParent>
: ChildBuilderBase<TParent, IRelationType>,
public class RelationTypeBuilder
: ChildBuilderBase<RelationBuilder, IRelationType>,
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<TParent> WithIsBidirectional(bool isBidirectional)
public RelationTypeBuilder WithIsBidirectional(bool isBidirectional)
{
_isBidirectional = isBidirectional;
return this;
}
public RelationTypeBuilder<TParent> WithChildObjectType(Guid childObjectType)
public RelationTypeBuilder WithChildObjectType(Guid childObjectType)
{
_childObjectType = childObjectType;
return this;
}
public RelationTypeBuilder<TParent> WithParentObjectType(Guid parentObjectType)
public RelationTypeBuilder WithParentObjectType(Guid parentObjectType)
{
_parentObjectType = parentObjectType;
return this;

View File

@@ -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

View File

@@ -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();
}
}
}

View File

@@ -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

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -299,7 +299,6 @@
<Compile Include="Models\DictionaryTranslationTests.cs" />
<Compile Include="Models\PropertyGroupTests.cs" />
<Compile Include="Models\PropertyTypeTests.cs" />
<Compile Include="Models\RelationTests.cs" />
<Compile Include="Models\LightEntityTest.cs" />
<Compile Include="Models\UserTests.cs" />
<Compile Include="Web\Mvc\RenderModelBinderTests.cs" />