From 9d2bfdc428077fed499e999e4756a8478e1a806c Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Sun, 19 Apr 2020 09:05:09 +0200 Subject: [PATCH] Migrated content, media and member type tests into new unit tests project and builder pattern. --- .../Builders/ContentBuilder.cs | 157 ++++++ .../Builders/ContentTypeBaseBuilder.cs | 201 +++++++ .../Builders/ContentTypeBuilder.cs | 98 ++++ .../Builders/ContentTypeSortBuilder.cs | 53 ++ .../Builders/Extensions/BuilderExtensions.cs | 14 + .../Builders/Interfaces/IBuildContentTypes.cs | 6 + .../Interfaces/IWithIsContainerBuilder.cs | 7 + .../IWithPropertyTypeIdsIncrementingFrom.cs | 7 + .../Builders/MediaBuilder.cs | 157 ++++++ .../Builders/MediaTypeBuilder.cs | 117 ++++ .../Builders/MemberBuilder.cs | 1 + .../Builders/MemberTypeBuilder.cs | 156 ++---- .../Builders/TemplateBuilder.cs | 12 +- .../Models/ContentTypeTests.cs | 424 ++++++++++++++ .../Models/TemplateTests.cs | 4 +- .../Builders/AllowedContentTypeDetail.cs | 11 + .../Builders/ContentTypeBuilderTests.cs | 143 +++++ .../Builders/MediaTypeBuilderTests.cs | 107 ++++ .../Builders/MemberBuilderTests.cs | 19 +- .../Builders/MemberTypeBuilderTests.cs | 115 ++++ .../Builders/PropertyTypeDetail.cs | 15 + .../Builders/TemplateBuilderTests.cs | 3 +- .../Builders/TemplateDetail.cs | 11 + src/Umbraco.Tests/Models/ContentTypeTests.cs | 520 ------------------ src/Umbraco.Tests/Umbraco.Tests.csproj | 1 - 25 files changed, 1714 insertions(+), 645 deletions(-) create mode 100644 src/Umbraco.Tests.Common/Builders/ContentBuilder.cs create mode 100644 src/Umbraco.Tests.Common/Builders/ContentTypeBaseBuilder.cs create mode 100644 src/Umbraco.Tests.Common/Builders/ContentTypeBuilder.cs create mode 100644 src/Umbraco.Tests.Common/Builders/ContentTypeSortBuilder.cs create mode 100644 src/Umbraco.Tests.Common/Builders/Interfaces/IBuildContentTypes.cs create mode 100644 src/Umbraco.Tests.Common/Builders/Interfaces/IWithIsContainerBuilder.cs create mode 100644 src/Umbraco.Tests.Common/Builders/Interfaces/IWithPropertyTypeIdsIncrementingFrom.cs create mode 100644 src/Umbraco.Tests.Common/Builders/MediaBuilder.cs create mode 100644 src/Umbraco.Tests.Common/Builders/MediaTypeBuilder.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/ContentTypeTests.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/AllowedContentTypeDetail.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/ContentTypeBuilderTests.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/MediaTypeBuilderTests.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/MemberTypeBuilderTests.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/PropertyTypeDetail.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.Common/Builders/TemplateDetail.cs delete mode 100644 src/Umbraco.Tests/Models/ContentTypeTests.cs diff --git a/src/Umbraco.Tests.Common/Builders/ContentBuilder.cs b/src/Umbraco.Tests.Common/Builders/ContentBuilder.cs new file mode 100644 index 0000000000..3dbc099243 --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/ContentBuilder.cs @@ -0,0 +1,157 @@ +using System; +using Umbraco.Core.Models; +using Umbraco.Tests.Common.Builders.Interfaces; + +namespace Umbraco.Tests.Common.Builders +{ + public class ContentBuilder + : BuilderBase, + IBuildContentTypes, + IWithIdBuilder, + IWithKeyBuilder, + IWithParentIdBuilder, + IWithCreatorIdBuilder, + IWithCreateDateBuilder, + IWithUpdateDateBuilder, + IWithNameBuilder, + IWithTrashedBuilder, + IWithLevelBuilder, + IWithPathBuilder, + IWithSortOrderBuilder + { + private ContentTypeBuilder _contentTypeBuilder; + private GenericDictionaryBuilder _propertyDataBuilder; + + private int? _id; + private Guid? _key; + private DateTime? _createDate; + private DateTime? _updateDate; + private int? _parentId; + private string _name; + private int? _creatorId; + private int? _level; + private string _path; + private int? _sortOrder; + private bool? _trashed; + + public ContentTypeBuilder AddContentType() + { + var builder = new ContentTypeBuilder(this); + _contentTypeBuilder = builder; + return builder; + } + + public override Content Build() + { + var id = _id ?? 1; + var key = _key ?? Guid.NewGuid(); + var parentId = _parentId ?? -1; + var createDate = _createDate ?? DateTime.Now; + var updateDate = _updateDate ?? DateTime.Now; + var name = _name ?? Guid.NewGuid().ToString(); + var creatorId = _creatorId ?? 1; + var level = _level ?? 1; + var path = _path ?? "-1"; + var sortOrder = _sortOrder ?? 0; + var trashed = _trashed ?? false; + + if (_contentTypeBuilder == null) + { + throw new InvalidOperationException("A member cannot be constructed without providing a member type. Use AddContentType()."); + } + + var memberType = _contentTypeBuilder.Build(); + + var member = new Content(name, parentId, memberType) + { + Id = id, + Key = key, + CreateDate = createDate, + UpdateDate = updateDate, + CreatorId = creatorId, + Level = level, + Path = path, + SortOrder = sortOrder, + Trashed = trashed, + }; + + if (_propertyDataBuilder != null) + { + var propertyData = _propertyDataBuilder.Build(); + foreach (var kvp in propertyData) + { + member.SetValue(kvp.Key, kvp.Value); + } + + member.ResetDirtyProperties(false); + } + + return member; + } + + 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; + } + + bool? IWithTrashedBuilder.Trashed + { + get => _trashed; + set => _trashed = value; + } + + int? IWithLevelBuilder.Level + { + get => _level; + set => _level = value; + } + + string IWithPathBuilder.Path + { + get => _path; + set => _path = value; + } + + int? IWithSortOrderBuilder.SortOrder + { + get => _sortOrder; + set => _sortOrder = value; + } + int? IWithParentIdBuilder.ParentId + { + get => _parentId; + set => _parentId = value; + } + } +} diff --git a/src/Umbraco.Tests.Common/Builders/ContentTypeBaseBuilder.cs b/src/Umbraco.Tests.Common/Builders/ContentTypeBaseBuilder.cs new file mode 100644 index 0000000000..acbb4dbe25 --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/ContentTypeBaseBuilder.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using Umbraco.Core.Models; +using Umbraco.Core.Strings; +using Umbraco.Tests.Common.Builders.Extensions; +using Umbraco.Tests.Common.Builders.Interfaces; + +namespace Umbraco.Tests.Common.Builders +{ + public abstract class ContentTypeBaseBuilder + : ChildBuilderBase, + IBuildPropertyGroups, + IWithIdBuilder, + IWithKeyBuilder, + IWithAliasBuilder, + IWithNameBuilder, + IWithParentIdBuilder, + IWithPathBuilder, + IWithLevelBuilder, + IWithSortOrderBuilder, + IWithCreatorIdBuilder, + IWithCreateDateBuilder, + IWithUpdateDateBuilder, + IWithDescriptionBuilder, + IWithIconBuilder, + IWithThumbnailBuilder, + IWithTrashedBuilder, + IWithIsContainerBuilder where TParent : IBuildContentTypes + { + private int? _id; + private Guid? _key; + private string _alias; + private string _name; + private int? _parentId; + private int? _level; + private string _path; + private int? _sortOrder; + private int? _creatorId; + private DateTime? _createDate; + private DateTime? _updateDate; + private string _description; + private string _icon; + private string _thumbnail; + private bool? _trashed; + private bool? _isContainer; + + protected IShortStringHelper ShortStringHelper => new DefaultShortStringHelper(new DefaultShortStringHelperConfig()); + + public ContentTypeBaseBuilder(TParent parentBuilder) : base(parentBuilder) + { + } + + protected int GetId() => _id ?? 1; + + protected Guid GetKey() => _key ?? Guid.NewGuid(); + + protected DateTime GetCreateDate() => _createDate ?? DateTime.Now; + + protected DateTime GetUpdateDate() => _updateDate ?? DateTime.Now; + + protected string GetName() => _name ?? Guid.NewGuid().ToString(); + + protected string GetAlias() => _alias ?? GetName().ToCamelCase(); + + protected int GetParentId() => _parentId ?? -1; + + protected int GetLevel() => _level ?? 0; + + protected string GetPath() => _path ?? string.Empty; + + protected int GetSortOrder() => _sortOrder ?? 0; + + protected string GetDescription() => _description ?? string.Empty; + + protected string GetIcon() => _icon ?? string.Empty; + + protected string GetThumbnail() => _thumbnail ?? string.Empty; + + protected int GetCreatorId() => _creatorId ?? 0; + + protected bool GetTrashed() => _trashed ?? false; + + protected bool GetIsContainer() => _isContainer ?? false; + + protected void BuildPropertyGroups(ContentTypeCompositionBase contentType, IEnumerable propertyGroups) + { + foreach (var propertyGroup in propertyGroups) + { + contentType.PropertyGroups.Add(propertyGroup); + } + } + + protected void BuildPropertyTypeIds(ContentTypeCompositionBase contentType, int? propertyTypeIdsIncrementingFrom) + { + if (propertyTypeIdsIncrementingFrom.HasValue) + { + var i = propertyTypeIdsIncrementingFrom.Value; + foreach (var propertyType in contentType.PropertyTypes) + { + propertyType.Id = ++i; + } + } + } + + int? IWithIdBuilder.Id + { + get => _id; + set => _id = value; + } + + Guid? IWithKeyBuilder.Key + { + get => _key; + set => _key = value; + } + + string IWithAliasBuilder.Alias + { + get => _alias; + set => _alias = value; + } + + string IWithNameBuilder.Name + { + get => _name; + set => _name = value; + } + + int? IWithParentIdBuilder.ParentId + { + get => _parentId; + set => _parentId = value; + } + + int? IWithLevelBuilder.Level + { + get => _level; + set => _level = value; + } + + string IWithPathBuilder.Path + { + get => _path; + set => _path = value; + } + + int? IWithSortOrderBuilder.SortOrder + { + get => _sortOrder; + set => _sortOrder = 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 IWithDescriptionBuilder.Description + { + get => _description; + set => _description = value; + } + + string IWithIconBuilder.Icon + { + get => _icon; + set => _icon = value; + } + + string IWithThumbnailBuilder.Thumbnail + { + get => _thumbnail; + set => _thumbnail = value; + } + + bool? IWithTrashedBuilder.Trashed + { + get => _trashed; + set => _trashed = value; + } + + bool? IWithIsContainerBuilder.IsContainer + { + get => _isContainer; + set => _isContainer = value; + } + } +} diff --git a/src/Umbraco.Tests.Common/Builders/ContentTypeBuilder.cs b/src/Umbraco.Tests.Common/Builders/ContentTypeBuilder.cs new file mode 100644 index 0000000000..a8887e95ae --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/ContentTypeBuilder.cs @@ -0,0 +1,98 @@ +using System.Collections.Generic; +using System.Linq; +using Umbraco.Core.Models; +using Umbraco.Tests.Common.Builders.Interfaces; + +namespace Umbraco.Tests.Common.Builders +{ + public class ContentTypeBuilder + : ContentTypeBaseBuilder, + IWithPropertyTypeIdsIncrementingFrom + { + private List> _propertyGroupBuilders = new List>(); + private List _templateBuilders = new List(); + private List _allowedContentTypeBuilders = new List(); + + private int? _propertyTypeIdsIncrementingFrom; + private int? _defaultTemplateId; + + public ContentTypeBuilder() : base(null) + { + } + + public ContentTypeBuilder(ContentBuilder parentBuilder) : base(parentBuilder) + { + } + + public ContentTypeBuilder WithDefaultTemplateId(int templateId) + { + _defaultTemplateId = templateId; + return this; + } + + public PropertyGroupBuilder AddPropertyGroup() + { + var builder = new PropertyGroupBuilder(this); + _propertyGroupBuilders.Add(builder); + return builder; + } + + public TemplateBuilder AddAllowedTemplate() + { + var builder = new TemplateBuilder(this); + _templateBuilders.Add(builder); + return builder; + } + + public ContentTypeSortBuilder AddAllowedContentType() + { + var builder = new ContentTypeSortBuilder(this); + _allowedContentTypeBuilders.Add(builder); + return builder; + } + + public override IContentType Build() + { + var contentType = new ContentType(ShortStringHelper, GetParentId()) + { + Id = GetId(), + Key = GetKey(), + CreateDate = GetCreateDate(), + UpdateDate = GetUpdateDate(), + Alias = GetAlias(), + Name = GetName(), + Level = GetLevel(), + Path = GetPath(), + SortOrder = GetSortOrder(), + Description = GetDescription(), + Icon = GetIcon(), + Thumbnail = GetThumbnail(), + CreatorId = GetCreatorId(), + Trashed = GetTrashed(), + IsContainer = GetIsContainer(), + }; + + BuildPropertyGroups(contentType, _propertyGroupBuilders.Select(x => x.Build())); + BuildPropertyTypeIds(contentType, _propertyTypeIdsIncrementingFrom); + + contentType.AllowedTemplates = _templateBuilders.Select(x => x.Build()); + contentType.AllowedContentTypes = _allowedContentTypeBuilders.Select(x => x.Build()); + + if (_defaultTemplateId.HasValue) + { + contentType.SetDefaultTemplate(contentType.AllowedTemplates + .SingleOrDefault(x => x.Id == _defaultTemplateId.Value)); + } + + contentType.ResetDirtyProperties(false); + + return contentType; + } + + int? IWithPropertyTypeIdsIncrementingFrom.PropertyTypeIdsIncrementingFrom + { + get => _propertyTypeIdsIncrementingFrom; + set => _propertyTypeIdsIncrementingFrom = value; + } + } +} diff --git a/src/Umbraco.Tests.Common/Builders/ContentTypeSortBuilder.cs b/src/Umbraco.Tests.Common/Builders/ContentTypeSortBuilder.cs new file mode 100644 index 0000000000..42c3ebcc1b --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/ContentTypeSortBuilder.cs @@ -0,0 +1,53 @@ +using System; +using Umbraco.Core.Models; +using Umbraco.Tests.Common.Builders.Extensions; +using Umbraco.Tests.Common.Builders.Interfaces; + +namespace Umbraco.Tests.Common.Builders +{ + public class ContentTypeSortBuilder + : ChildBuilderBase, + IWithIdBuilder, + IWithAliasBuilder, + IWithSortOrderBuilder + { + private int? _id; + private string _alias; + private int? _sortOrder; + + public ContentTypeSortBuilder() : base(null) + { + } + + public ContentTypeSortBuilder(ContentTypeBuilder parentBuilder) : base(parentBuilder) + { + } + + public override ContentTypeSort Build() + { + var id = _id ?? 1; + var alias = _alias ?? Guid.NewGuid().ToString().ToCamelCase(); + var sortOrder = _sortOrder ?? 0; + + return new ContentTypeSort(new Lazy(() => id), sortOrder, alias); + } + + int? IWithIdBuilder.Id + { + get => _id; + set => _id = value; + } + + string IWithAliasBuilder.Alias + { + get => _alias; + set => _alias = value; + } + + int? IWithSortOrderBuilder.SortOrder + { + get => _sortOrder; + set => _sortOrder = value; + } + } +} diff --git a/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs b/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs index f3c0b9796e..a06e358a08 100644 --- a/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs +++ b/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs @@ -178,5 +178,19 @@ namespace Umbraco.Tests.Common.Builders.Extensions builder.LastPasswordChangeDate = lastPasswordChangeDate; return builder; } + + public static T WithPropertyTypeIdsIncrementingFrom(this T builder, int propertyTypeIdsIncrementingFrom) + where T : IWithPropertyTypeIdsIncrementingFrom + { + builder.PropertyTypeIdsIncrementingFrom = propertyTypeIdsIncrementingFrom; + return builder; + } + + public static T WithIsContainer(this T builder, bool isContainer) + where T : IWithIsContainerBuilder + { + builder.IsContainer = isContainer; + return builder; + } } } diff --git a/src/Umbraco.Tests.Common/Builders/Interfaces/IBuildContentTypes.cs b/src/Umbraco.Tests.Common/Builders/Interfaces/IBuildContentTypes.cs new file mode 100644 index 0000000000..428613dc5d --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/Interfaces/IBuildContentTypes.cs @@ -0,0 +1,6 @@ +namespace Umbraco.Tests.Common.Builders.Interfaces +{ + public interface IBuildContentTypes + { + } +} diff --git a/src/Umbraco.Tests.Common/Builders/Interfaces/IWithIsContainerBuilder.cs b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithIsContainerBuilder.cs new file mode 100644 index 0000000000..7daee8afb9 --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithIsContainerBuilder.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Tests.Common.Builders.Interfaces +{ + public interface IWithIsContainerBuilder + { + bool? IsContainer { get; set; } + } +} diff --git a/src/Umbraco.Tests.Common/Builders/Interfaces/IWithPropertyTypeIdsIncrementingFrom.cs b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithPropertyTypeIdsIncrementingFrom.cs new file mode 100644 index 0000000000..6e12803e5c --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithPropertyTypeIdsIncrementingFrom.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Tests.Common.Builders.Interfaces +{ + public interface IWithPropertyTypeIdsIncrementingFrom + { + int? PropertyTypeIdsIncrementingFrom { get; set; } + } +} diff --git a/src/Umbraco.Tests.Common/Builders/MediaBuilder.cs b/src/Umbraco.Tests.Common/Builders/MediaBuilder.cs new file mode 100644 index 0000000000..f17d4402ce --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/MediaBuilder.cs @@ -0,0 +1,157 @@ +using System; +using Umbraco.Core.Models; +using Umbraco.Tests.Common.Builders.Interfaces; + +namespace Umbraco.Tests.Common.Builders +{ + public class MediaBuilder + : BuilderBase, + IBuildContentTypes, + IWithIdBuilder, + IWithKeyBuilder, + IWithParentIdBuilder, + IWithCreatorIdBuilder, + IWithCreateDateBuilder, + IWithUpdateDateBuilder, + IWithNameBuilder, + IWithTrashedBuilder, + IWithLevelBuilder, + IWithPathBuilder, + IWithSortOrderBuilder + { + private MediaTypeBuilder _mediaTypeBuilder; + private GenericDictionaryBuilder _propertyDataBuilder; + + private int? _id; + private Guid? _key; + private DateTime? _createDate; + private DateTime? _updateDate; + private int? _parentId; + private string _name; + private int? _creatorId; + private int? _level; + private string _path; + private int? _sortOrder; + private bool? _trashed; + + public MediaTypeBuilder AddMediaType() + { + var builder = new MediaTypeBuilder(this); + _mediaTypeBuilder = builder; + return builder; + } + + public override Media Build() + { + var id = _id ?? 1; + var key = _key ?? Guid.NewGuid(); + var parentId = _parentId ?? -1; + var createDate = _createDate ?? DateTime.Now; + var updateDate = _updateDate ?? DateTime.Now; + var name = _name ?? Guid.NewGuid().ToString(); + var creatorId = _creatorId ?? 1; + var level = _level ?? 1; + var path = _path ?? "-1"; + var sortOrder = _sortOrder ?? 0; + var trashed = _trashed ?? false; + + if (_mediaTypeBuilder == null) + { + throw new InvalidOperationException("A member cannot be constructed without providing a member type. Use AddMediaType()."); + } + + var memberType = _mediaTypeBuilder.Build(); + + var member = new Media(name, parentId, memberType) + { + Id = id, + Key = key, + CreateDate = createDate, + UpdateDate = updateDate, + CreatorId = creatorId, + Level = level, + Path = path, + SortOrder = sortOrder, + Trashed = trashed, + }; + + if (_propertyDataBuilder != null) + { + var propertyData = _propertyDataBuilder.Build(); + foreach (var kvp in propertyData) + { + member.SetValue(kvp.Key, kvp.Value); + } + + member.ResetDirtyProperties(false); + } + + return member; + } + + 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; + } + + bool? IWithTrashedBuilder.Trashed + { + get => _trashed; + set => _trashed = value; + } + + int? IWithLevelBuilder.Level + { + get => _level; + set => _level = value; + } + + string IWithPathBuilder.Path + { + get => _path; + set => _path = value; + } + + int? IWithSortOrderBuilder.SortOrder + { + get => _sortOrder; + set => _sortOrder = value; + } + int? IWithParentIdBuilder.ParentId + { + get => _parentId; + set => _parentId = value; + } + } +} diff --git a/src/Umbraco.Tests.Common/Builders/MediaTypeBuilder.cs b/src/Umbraco.Tests.Common/Builders/MediaTypeBuilder.cs new file mode 100644 index 0000000000..606d9a9405 --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/MediaTypeBuilder.cs @@ -0,0 +1,117 @@ +using System.Collections.Generic; +using System.Linq; +using Umbraco.Core; +using Umbraco.Core.Models; +using Umbraco.Tests.Common.Builders.Extensions; +using Umbraco.Tests.Common.Builders.Interfaces; + +namespace Umbraco.Tests.Common.Builders +{ + public class MediaTypeBuilder + : ContentTypeBaseBuilder, + IWithPropertyTypeIdsIncrementingFrom + { + private List> _propertyGroupBuilders = new List>(); + private int? _propertyTypeIdsIncrementingFrom; + + public MediaTypeBuilder() : base(null) + { + } + + public MediaTypeBuilder(MediaBuilder parentBuilder) : base(parentBuilder) + { + } + + public MediaTypeBuilder WithMediaPropertyGroup() + { + var builder = new PropertyGroupBuilder(this) + .WithId(99) + .WithName("Media") + .WithSortOrder(1) + .AddPropertyType() + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.UploadField) + .WithValueStorageType(ValueStorageType.Nvarchar) + .WithAlias(Constants.Conventions.Media.File) + .WithName("File") + .WithSortOrder(1) + .WithDataTypeId(-90) + .Done() + .AddPropertyType() + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.Label) + .WithValueStorageType(ValueStorageType.Integer) + .WithAlias(Constants.Conventions.Media.Width) + .WithName("Width") + .WithSortOrder(2) + .WithDataTypeId(Constants.System.DefaultLabelDataTypeId) + .Done() + .AddPropertyType() + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.Label) + .WithValueStorageType(ValueStorageType.Integer) + .WithAlias(Constants.Conventions.Media.Height) + .WithName("Height") + .WithSortOrder(3) + .WithDataTypeId(Constants.System.DefaultLabelDataTypeId) + .Done() + .AddPropertyType() + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.Label) + .WithValueStorageType(ValueStorageType.Integer) + .WithAlias(Constants.Conventions.Media.Bytes) + .WithName("Bytes") + .WithSortOrder(4) + .WithDataTypeId(Constants.System.DefaultLabelDataTypeId) + .Done() + .AddPropertyType() + .WithPropertyEditorAlias(Constants.PropertyEditors.Aliases.Label) + .WithValueStorageType(ValueStorageType.Nvarchar) + .WithAlias(Constants.Conventions.Media.Extension) + .WithName("File Extension") + .WithSortOrder(4) + .WithDataTypeId(Constants.System.DefaultLabelDataTypeId) + .Done(); + _propertyGroupBuilders.Add(builder); + return this; + } + + public PropertyGroupBuilder AddPropertyGroup() + { + var builder = new PropertyGroupBuilder(this); + _propertyGroupBuilders.Add(builder); + return builder; + } + + public override IMediaType Build() + { + var mediaType = new MediaType(ShortStringHelper, GetParentId()) + { + Id = GetId(), + Key = GetKey(), + CreateDate = GetCreateDate(), + UpdateDate = GetUpdateDate(), + Alias = GetAlias(), + Name = GetName(), + Level = GetLevel(), + Path = GetPath(), + SortOrder = GetSortOrder(), + Description = GetDescription(), + Icon = GetIcon(), + Thumbnail = GetThumbnail(), + CreatorId = GetCreatorId(), + Trashed = GetTrashed(), + IsContainer = GetIsContainer(), + }; + + BuildPropertyGroups(mediaType, _propertyGroupBuilders.Select(x => x.Build())); + BuildPropertyTypeIds(mediaType, _propertyTypeIdsIncrementingFrom); + + mediaType.ResetDirtyProperties(false); + + return mediaType; + } + + int? IWithPropertyTypeIdsIncrementingFrom.PropertyTypeIdsIncrementingFrom + { + get => _propertyTypeIdsIncrementingFrom; + set => _propertyTypeIdsIncrementingFrom = value; + } + } +} diff --git a/src/Umbraco.Tests.Common/Builders/MemberBuilder.cs b/src/Umbraco.Tests.Common/Builders/MemberBuilder.cs index 16ec7ed005..27bc2059e9 100644 --- a/src/Umbraco.Tests.Common/Builders/MemberBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/MemberBuilder.cs @@ -6,6 +6,7 @@ namespace Umbraco.Tests.Common.Builders { public class MemberBuilder : BuilderBase, + IBuildContentTypes, IWithIdBuilder, IWithKeyBuilder, IWithCreatorIdBuilder, diff --git a/src/Umbraco.Tests.Common/Builders/MemberTypeBuilder.cs b/src/Umbraco.Tests.Common/Builders/MemberTypeBuilder.cs index d5a145331e..9ac00f9da4 100644 --- a/src/Umbraco.Tests.Common/Builders/MemberTypeBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/MemberTypeBuilder.cs @@ -3,38 +3,23 @@ using System.Collections.Generic; using System.Linq; using Umbraco.Core; using Umbraco.Core.Models; -using Umbraco.Core.Strings; using Umbraco.Tests.Common.Builders.Extensions; using Umbraco.Tests.Common.Builders.Interfaces; namespace Umbraco.Tests.Common.Builders { public class MemberTypeBuilder - : ChildBuilderBase, - IBuildPropertyGroups, - IWithIdBuilder, - IWithAliasBuilder, - IWithNameBuilder, - IWithParentIdBuilder, - IWithSortOrderBuilder, - IWithCreatorIdBuilder, - IWithDescriptionBuilder, - IWithIconBuilder, - IWithThumbnailBuilder, - IWithTrashedBuilder + : ContentTypeBaseBuilder, + IWithPropertyTypeIdsIncrementingFrom { - private readonly List> _propertyGroupBuilders = new List>(); + private List> _propertyGroupBuilders = new List>(); + private Dictionary _memberCanEditProperties = new Dictionary(); + private Dictionary _memberCanViewProperties = new Dictionary(); + private int? _propertyTypeIdsIncrementingFrom; - private int? _id; - private string _alias; - private string _name; - private int? _parentId; - private int? _sortOrder; - private int? _creatorId; - private string _description; - private string _icon; - private string _thumbnail; - private bool? _trashed; + public MemberTypeBuilder() : base(null) + { + } public MemberTypeBuilder(MemberBuilder parentBuilder) : base(parentBuilder) { @@ -92,6 +77,18 @@ namespace Umbraco.Tests.Common.Builders return this; } + public MemberTypeBuilder WithMemberCanEditProperty(string alias, bool canEdit) + { + _memberCanEditProperties.Add(alias, canEdit); + return this; + } + + public MemberTypeBuilder WithMemberCanViewProperty(string alias, bool canView) + { + _memberCanViewProperties.Add(alias, canView); + return this; + } + public PropertyGroupBuilder AddPropertyGroup() { var builder = new PropertyGroupBuilder(this); @@ -101,35 +98,36 @@ namespace Umbraco.Tests.Common.Builders public override IMemberType Build() { - var id = _id ?? 1; - var name = _name ?? Guid.NewGuid().ToString(); - var alias = _alias ?? name.ToCamelCase(); - var parentId = _parentId ?? -1; - var sortOrder = _sortOrder ?? 0; - var description = _description ?? string.Empty; - var icon = _icon ?? string.Empty; - var thumbnail = _thumbnail ?? string.Empty; - var creatorId = _creatorId ?? 0; - var trashed = _trashed ?? false; - - var shortStringHelper = new DefaultShortStringHelper(new DefaultShortStringHelperConfig()); - - var memberType = new MemberType(shortStringHelper, parentId) + var memberType = new MemberType(ShortStringHelper, GetParentId()) { - Id = id, - Alias = alias, - Name = name, - SortOrder = sortOrder, - Description = description, - Icon = icon, - Thumbnail = thumbnail, - CreatorId = creatorId, - Trashed = trashed, + Id = GetId(), + Key = GetKey(), + CreateDate = GetCreateDate(), + UpdateDate = GetUpdateDate(), + Alias = GetAlias(), + Name = GetName(), + Level = GetLevel(), + Path = GetPath(), + SortOrder = GetSortOrder(), + Description = GetDescription(), + Icon = GetIcon(), + Thumbnail = GetThumbnail(), + CreatorId = GetCreatorId(), + Trashed = GetTrashed(), + IsContainer = GetIsContainer(), }; - foreach (var propertyGroup in _propertyGroupBuilders.Select(x => x.Build())) + BuildPropertyGroups(memberType, _propertyGroupBuilders.Select(x => x.Build())); + BuildPropertyTypeIds(memberType, _propertyTypeIdsIncrementingFrom); + + foreach (var kvp in _memberCanEditProperties) { - memberType.PropertyGroups.Add(propertyGroup); + memberType.SetMemberCanEditProperty(kvp.Key, kvp.Value); + } + + foreach (var kvp in _memberCanViewProperties) + { + memberType.SetMemberCanViewProperty(kvp.Key, kvp.Value); } memberType.ResetDirtyProperties(false); @@ -137,64 +135,10 @@ namespace Umbraco.Tests.Common.Builders return memberType; } - int? IWithIdBuilder.Id + int? IWithPropertyTypeIdsIncrementingFrom.PropertyTypeIdsIncrementingFrom { - get => _id; - set => _id = value; - } - - string IWithAliasBuilder.Alias - { - get => _alias; - set => _alias = value; - } - - string IWithNameBuilder.Name - { - get => _name; - set => _name = value; - } - - int? IWithParentIdBuilder.ParentId - { - get => _parentId; - set => _parentId = value; - } - - int? IWithSortOrderBuilder.SortOrder - { - get => _sortOrder; - set => _sortOrder = value; - } - - int? IWithCreatorIdBuilder.CreatorId - { - get => _creatorId; - set => _creatorId = value; - } - - string IWithDescriptionBuilder.Description - { - get => _description; - set => _description = value; - } - - string IWithIconBuilder.Icon - { - get => _icon; - set => _icon = value; - } - - string IWithThumbnailBuilder.Thumbnail - { - get => _thumbnail; - set => _thumbnail = value; - } - - bool? IWithTrashedBuilder.Trashed - { - get => _trashed; - set => _trashed = value; + get => _propertyTypeIdsIncrementingFrom; + set => _propertyTypeIdsIncrementingFrom = value; } } } diff --git a/src/Umbraco.Tests.Common/Builders/TemplateBuilder.cs b/src/Umbraco.Tests.Common/Builders/TemplateBuilder.cs index 3948d285d3..1c35831d9d 100644 --- a/src/Umbraco.Tests.Common/Builders/TemplateBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/TemplateBuilder.cs @@ -7,7 +7,7 @@ using Umbraco.Tests.Common.Builders.Interfaces; namespace Umbraco.Tests.Common.Builders { public class TemplateBuilder - : BuilderBase