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.Infrastructure/Umbraco.Infrastructure.csproj b/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj
index 432033d966..a3f8953ac3 100644
--- a/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj
+++ b/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj
@@ -76,6 +76,9 @@
<_Parameter1>Umbraco.Tests.Integration
+
+ <_Parameter1>Umbraco.Tests.Common
+
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/Interfaces/IBuildPropertyGroups.cs b/src/Umbraco.Tests.Common/Builders/Interfaces/IBuildPropertyGroups.cs
new file mode 100644
index 0000000000..0391061a84
--- /dev/null
+++ b/src/Umbraco.Tests.Common/Builders/Interfaces/IBuildPropertyGroups.cs
@@ -0,0 +1,6 @@
+namespace Umbraco.Tests.Common.Builders.Interfaces
+{
+ public interface IBuildPropertyGroups
+ {
+ }
+}
diff --git a/src/Umbraco.Tests.Common/Builders/Interfaces/IBuildPropertyTypes.cs b/src/Umbraco.Tests.Common/Builders/Interfaces/IBuildPropertyTypes.cs
new file mode 100644
index 0000000000..e0eb9e19d5
--- /dev/null
+++ b/src/Umbraco.Tests.Common/Builders/Interfaces/IBuildPropertyTypes.cs
@@ -0,0 +1,6 @@
+namespace Umbraco.Tests.Common.Builders.Interfaces
+{
+ public interface IBuildPropertyTypes
+ {
+ }
+}
diff --git a/src/Umbraco.Tests.Common/Builders/MemberBuilder.cs b/src/Umbraco.Tests.Common/Builders/MemberBuilder.cs
index cef4a35524..3925ac642b 100644
--- a/src/Umbraco.Tests.Common/Builders/MemberBuilder.cs
+++ b/src/Umbraco.Tests.Common/Builders/MemberBuilder.cs
@@ -155,7 +155,7 @@ namespace Umbraco.Tests.Common.Builders
if (_memberTypeBuilder == null)
{
- throw new InvalidOperationException("A member cannot be constructed without providing a member type (use AddMemberType).");
+ throw new InvalidOperationException("A member cannot be constructed without providing a member type. Use AddMemberType().");
}
var memberType = _memberTypeBuilder.Build();
diff --git a/src/Umbraco.Tests.Common/Builders/MemberTypeBuilder.cs b/src/Umbraco.Tests.Common/Builders/MemberTypeBuilder.cs
index b01b8a1680..d5a145331e 100644
--- a/src/Umbraco.Tests.Common/Builders/MemberTypeBuilder.cs
+++ b/src/Umbraco.Tests.Common/Builders/MemberTypeBuilder.cs
@@ -10,7 +10,8 @@ using Umbraco.Tests.Common.Builders.Interfaces;
namespace Umbraco.Tests.Common.Builders
{
public class MemberTypeBuilder
- : ChildBuilderBase,
+ : ChildBuilderBase,
+ IBuildPropertyGroups,
IWithIdBuilder,
IWithAliasBuilder,
IWithNameBuilder,
@@ -22,7 +23,7 @@ namespace Umbraco.Tests.Common.Builders
IWithThumbnailBuilder,
IWithTrashedBuilder
{
- private readonly List _propertyGroupBuilders = new List();
+ private readonly List> _propertyGroupBuilders = new List>();
private int? _id;
private string _alias;
@@ -41,7 +42,8 @@ namespace Umbraco.Tests.Common.Builders
public MemberTypeBuilder WithMembershipPropertyGroup()
{
- var builder = new PropertyGroupBuilder(this)
+ var builder = new PropertyGroupBuilder(this)
+ .WithId(99)
.WithName(Constants.Conventions.Member.StandardPropertiesGroupName)
.WithSortOrder(1)
.AddPropertyType()
@@ -90,14 +92,14 @@ namespace Umbraco.Tests.Common.Builders
return this;
}
- public PropertyGroupBuilder AddPropertyGroup()
+ public PropertyGroupBuilder AddPropertyGroup()
{
- var builder = new PropertyGroupBuilder(this);
+ var builder = new PropertyGroupBuilder(this);
_propertyGroupBuilders.Add(builder);
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/PropertyBuilder.cs b/src/Umbraco.Tests.Common/Builders/PropertyBuilder.cs
new file mode 100644
index 0000000000..6cb7a431f2
--- /dev/null
+++ b/src/Umbraco.Tests.Common/Builders/PropertyBuilder.cs
@@ -0,0 +1,71 @@
+using System;
+using Umbraco.Core.Models;
+using Umbraco.Tests.Common.Builders.Interfaces;
+
+namespace Umbraco.Tests.Common.Builders
+{
+ public class PropertyBuilder
+ : BuilderBase,
+ IBuildPropertyTypes,
+ IWithIdBuilder,
+ IWithKeyBuilder,
+ IWithCreateDateBuilder,
+ IWithUpdateDateBuilder
+ {
+ private PropertyTypeBuilder _propertyTypeBuilder;
+
+ private int? _id;
+ private Guid? _key;
+ private DateTime? _createDate;
+ private DateTime? _updateDate;
+
+ public PropertyTypeBuilder AddPropertyType()
+ {
+ var builder = new PropertyTypeBuilder(this);
+ _propertyTypeBuilder = builder;
+ return builder;
+ }
+
+ public override IProperty Build()
+ {
+ var id = _id ?? 1;
+ var key = _key ?? Guid.NewGuid();
+ var createDate = _createDate ?? DateTime.Now;
+ var updateDate = _updateDate ?? DateTime.Now;
+
+ // Needs to be within collection to support publishing.
+ var propertyTypeCollection = new PropertyTypeCollection(true, new[] { _propertyTypeBuilder.Build() });
+
+ return new Property(id, propertyTypeCollection[0])
+ {
+ Key = key,
+ CreateDate = createDate,
+ 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/PropertyGroupBuilder.cs b/src/Umbraco.Tests.Common/Builders/PropertyGroupBuilder.cs
index 5f6fe12dff..5df61dd072 100644
--- a/src/Umbraco.Tests.Common/Builders/PropertyGroupBuilder.cs
+++ b/src/Umbraco.Tests.Common/Builders/PropertyGroupBuilder.cs
@@ -6,29 +6,53 @@ using Umbraco.Tests.Common.Builders.Interfaces;
namespace Umbraco.Tests.Common.Builders
{
- public class PropertyGroupBuilder
- : ChildBuilderBase, // TODO: likely want to generalise this, so can use for document and media types too.
- IWithNameBuilder,
- IWithSortOrderBuilder
+ public class PropertyGroupBuilder : PropertyGroupBuilder
{
- private readonly List _propertyTypeBuilders = new List();
+ public PropertyGroupBuilder() : base(null)
+ {
+ }
+ }
+ public class NullPropertyGroupBuilderParent : IBuildPropertyGroups
+ {
+ }
+
+ public class PropertyGroupBuilder
+ : ChildBuilderBase,
+ IBuildPropertyTypes,
+ IWithIdBuilder,
+ IWithKeyBuilder,
+ IWithCreateDateBuilder,
+ IWithUpdateDateBuilder,
+ IWithNameBuilder,
+ IWithSortOrderBuilder where TParent: IBuildPropertyGroups
+ {
+ private readonly List>> _propertyTypeBuilders = new List>>();
+
+ private int? _id;
+ private Guid? _key;
+ private DateTime? _createDate;
+ private DateTime? _updateDate;
private string _name;
private int? _sortOrder;
- public PropertyGroupBuilder(MemberTypeBuilder parentBuilder) : base(parentBuilder)
+ public PropertyGroupBuilder(TParent parentBuilder) : base(parentBuilder)
{
}
- public PropertyTypeBuilder AddPropertyType()
+ public PropertyTypeBuilder> AddPropertyType()
{
- var builder = new PropertyTypeBuilder(this);
+ var builder = new PropertyTypeBuilder>(this);
_propertyTypeBuilders.Add(builder);
return builder;
}
public override PropertyGroup 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 sortOrder = _sortOrder ?? 0;
@@ -40,17 +64,45 @@ namespace Umbraco.Tests.Common.Builders
return new PropertyGroup(properties)
{
+ Id = id,
+ Key = key,
Name = name,
SortOrder = sortOrder,
+ CreateDate = createDate,
+ UpdateDate = updateDate,
};
}
+ int? IWithIdBuilder.Id
+ {
+ get => _id;
+ set => _id = value;
+ }
+
+ Guid? IWithKeyBuilder.Key
+ {
+ get => _key;
+ set => _key = value;
+ }
+
string IWithNameBuilder.Name
{
get => _name;
set => _name = value;
}
-
+
+ DateTime? IWithCreateDateBuilder.CreateDate
+ {
+ get => _createDate;
+ set => _createDate = value;
+ }
+
+ DateTime? IWithUpdateDateBuilder.UpdateDate
+ {
+ get => _updateDate;
+ set => _updateDate = value;
+ }
+
int? IWithSortOrderBuilder.SortOrder
{
get => _sortOrder;
diff --git a/src/Umbraco.Tests.Common/Builders/PropertyTypeBuilder.cs b/src/Umbraco.Tests.Common/Builders/PropertyTypeBuilder.cs
index 955e2fca4c..9dc61014b5 100644
--- a/src/Umbraco.Tests.Common/Builders/PropertyTypeBuilder.cs
+++ b/src/Umbraco.Tests.Common/Builders/PropertyTypeBuilder.cs
@@ -1,5 +1,4 @@
using System;
-using Moq;
using Umbraco.Core.Models;
using Umbraco.Core.Strings;
using Umbraco.Tests.Common.Builders.Extensions;
@@ -7,65 +6,139 @@ using Umbraco.Tests.Common.Builders.Interfaces;
namespace Umbraco.Tests.Common.Builders
{
- public class PropertyTypeBuilder
- : ChildBuilderBase,
+ public class PropertyTypeBuilder : PropertyTypeBuilder
+ {
+ public PropertyTypeBuilder() : base(null)
+ {
+ }
+ }
+
+ public class NullPropertyTypeBuilderParent : IBuildPropertyTypes
+ {
+ }
+
+ public class PropertyTypeBuilder
+ : ChildBuilderBase,
+ IWithIdBuilder,
+ IWithKeyBuilder,
IWithAliasBuilder,
IWithNameBuilder,
+ IWithCreateDateBuilder,
+ IWithUpdateDateBuilder,
IWithSortOrderBuilder,
- IWithDescriptionBuilder
+ IWithDescriptionBuilder where TParent : IBuildPropertyTypes
{
+ private int? _id;
+ private Guid? _key;
private string _propertyEditorAlias;
private ValueStorageType? _valueStorageType;
private string _alias;
private string _name;
+ private DateTime? _createDate;
+ private DateTime? _updateDate;
private int? _sortOrder;
private string _description;
private int? _dataTypeId;
+ private Lazy _propertyGroupId;
+ private bool? _mandatory;
+ private string _mandatoryMessage;
+ private string _validationRegExp;
+ private string _validationRegExpMessage;
- public PropertyTypeBuilder(PropertyGroupBuilder parentBuilder) : base(parentBuilder)
+ public PropertyTypeBuilder(TParent parentBuilder) : base(parentBuilder)
{
}
- public PropertyTypeBuilder WithPropertyEditorAlias(string propertyEditorAlias)
+ public PropertyTypeBuilder WithPropertyEditorAlias(string propertyEditorAlias)
{
_propertyEditorAlias = propertyEditorAlias;
return this;
}
- public PropertyTypeBuilder WithValueStorageType(ValueStorageType valueStorageType)
+ public PropertyTypeBuilder WithValueStorageType(ValueStorageType valueStorageType)
{
_valueStorageType = valueStorageType;
return this;
}
- public PropertyTypeBuilder WithDataTypeId(int dataTypeId)
+ public PropertyTypeBuilder WithDataTypeId(int dataTypeId)
{
_dataTypeId = dataTypeId;
return this;
}
+ public PropertyTypeBuilder WithPropertyGroupId(int propertyGroupId)
+ {
+ _propertyGroupId = new Lazy(() => propertyGroupId);
+ return this;
+ }
+
+ public PropertyTypeBuilder WithMandatory(bool mandatory, string mandatoryMessage = "")
+ {
+ _mandatory = mandatory;
+ _mandatoryMessage = mandatoryMessage;
+ return this;
+ }
+
+ public PropertyTypeBuilder WithValidationRegExp(string validationRegExp, string validationRegExpMessage = "")
+ {
+ _validationRegExp = validationRegExp;
+ _validationRegExpMessage = validationRegExpMessage;
+ return this;
+ }
+
public override PropertyType Build()
{
+ var id = _id ?? 0;
+ var key = _key ?? Guid.NewGuid();
var propertyEditorAlias = _propertyEditorAlias ?? Guid.NewGuid().ToString().ToCamelCase();
var valueStorageType = _valueStorageType ?? ValueStorageType.Ntext;
var name = _name ?? Guid.NewGuid().ToString();
var alias = _alias ?? name.ToCamelCase();
+ var createDate = _createDate ?? DateTime.Now;
+ var updateDate = _updateDate ?? DateTime.Now;
var sortOrder = _sortOrder ?? 0;
var dataTypeId = _dataTypeId ?? 0;
var description = _description ?? string.Empty;
+ var propertyGroupId = _propertyGroupId ?? null;
+ var mandatory = _mandatory ?? false;
+ var mandatoryMessage = _mandatoryMessage ?? string.Empty;
+ var validationRegExp = _validationRegExp ?? string.Empty;
+ var validationRegExpMessage = _validationRegExpMessage ?? string.Empty;
var shortStringHelper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig());
return new PropertyType(shortStringHelper, propertyEditorAlias, valueStorageType)
{
+ Id = id,
+ Key = key,
Alias = alias,
Name = name,
SortOrder = sortOrder,
DataTypeId = dataTypeId,
Description = description,
+ CreateDate = createDate,
+ UpdateDate = updateDate,
+ PropertyGroupId = propertyGroupId,
+ Mandatory = mandatory,
+ MandatoryMessage = mandatoryMessage,
+ ValidationRegExp = validationRegExp,
+ ValidationRegExpMessage = validationRegExpMessage,
};
}
+ int? IWithIdBuilder.Id
+ {
+ get => _id;
+ set => _id = value;
+ }
+
+ Guid? IWithKeyBuilder.Key
+ {
+ get => _key;
+ set => _key = value;
+ }
+
string IWithAliasBuilder.Alias
{
get => _alias;
@@ -78,6 +151,18 @@ namespace Umbraco.Tests.Common.Builders
set => _name = value;
}
+ DateTime? IWithCreateDateBuilder.CreateDate
+ {
+ get => _createDate;
+ set => _createDate = value;
+ }
+
+ DateTime? IWithUpdateDateBuilder.UpdateDate
+ {
+ get => _updateDate;
+ set => _updateDate = value;
+ }
+
int? IWithSortOrderBuilder.SortOrder
{
get => _sortOrder;
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