diff --git a/src/Umbraco.Tests.Shared/Builders/DataEditorBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DataEditorBuilder.cs new file mode 100644 index 0000000000..5a0b18cf9e --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/DataEditorBuilder.cs @@ -0,0 +1,28 @@ +using Moq; +using Umbraco.Core.Logging; +using Umbraco.Core.PropertyEditors; +using Umbraco.Core.Services; +using Umbraco.Core.Strings; + +namespace Umbraco.Tests.Shared.Builders +{ + public class DataEditorBuilder : ChildBuilderBase + { + public DataEditorBuilder(TParent parentBuilder) : base(parentBuilder) + { + } + + public override IDataEditor Build() + { + var result = new DataEditor( + Mock.Of(), + Mock.Of(), + Mock.Of(), + Mock.Of(), + Mock.Of() + ); + + return result; + } + } +} diff --git a/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs new file mode 100644 index 0000000000..128990ab4e --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs @@ -0,0 +1,33 @@ +using Umbraco.Core.Models; + +namespace Umbraco.Tests.Shared.Builders +{ + public class DataTypeBuilder : BuilderBase, IWithIdBuilder + { + private readonly DataEditorBuilder _dataEditorBuilder; + private int? _id; + + public DataTypeBuilder() + { + _dataEditorBuilder = new DataEditorBuilder(this); + } + + public override DataType Build() + { + var editor = _dataEditorBuilder.Build(); + var id = _id ?? 1; + var result = new DataType(editor) + { + Id = id + }; + + return result; + } + + int? IWithIdBuilder.Id + { + get => _id; + set => _id = value; + } + } +} diff --git a/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs index 992c197854..5f88a636f7 100644 --- a/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs @@ -1,12 +1,11 @@ using System; using System.Collections.Generic; -using System.Globalization; using System.Linq; using Umbraco.Core.Models; namespace Umbraco.Tests.Shared.Builders { - public class DictionaryItemBuilder + public class DictionaryItemBuilder : IWithIdBuilder, IWithCreateDateBuilder, IWithUpdateDateBuilder { private string _itemkey = null; private readonly List _translationBuilders = new List(); @@ -14,7 +13,6 @@ namespace Umbraco.Tests.Shared.Builders private DateTime? _updateDate; private int? _id = null; - public DictionaryItem Build() { var createDate = _createDate ?? DateTime.Now; @@ -38,24 +36,6 @@ namespace Umbraco.Tests.Shared.Builders return builder; } - public DictionaryItemBuilder WithCreateData(DateTime createDate) - { - _createDate = createDate; - return this; - } - - public DictionaryItemBuilder WithUpdateData(DateTime updateDate) - { - _updateDate = updateDate; - return this; - } - - public DictionaryItemBuilder WithId(int id) - { - _id = id; - return this; - } - public DictionaryItemBuilder WithRandomTranslations(int count) { for (var i = 0; i < count; i++) @@ -64,5 +44,23 @@ namespace Umbraco.Tests.Shared.Builders } return this; } + + int? IWithIdBuilder.Id + { + get => _id; + set => _id = value; + } + + DateTime? IWithCreateDateBuilder.CreateDate + { + get => _createDate; + set => _createDate = value; + } + + DateTime? IWithUpdateDateBuilder.UpdateDate + { + get => _updateDate; + set => _updateDate = value; + } } } diff --git a/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs index fb82133030..3f471777c4 100644 --- a/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs @@ -1,10 +1,9 @@ using System; -using System.Globalization; using Umbraco.Core.Models; namespace Umbraco.Tests.Shared.Builders { - public class DictionaryTranslationBuilder : ChildBuilderBase + public class DictionaryTranslationBuilder : ChildBuilderBase, IWithIdBuilder, IWithCreateDateBuilder, IWithUpdateDateBuilder { private string _value = null; private Guid? _uniqueId = null; @@ -50,22 +49,22 @@ namespace Umbraco.Tests.Shared.Builders return this; } - public DictionaryTranslationBuilder WithCreateData(DateTime createDate) + int? IWithIdBuilder.Id { - _createDate = createDate; - return this; + get => _id; + set => _id = value; } - public DictionaryTranslationBuilder WithUpdateData(DateTime updateDate) + DateTime? IWithCreateDateBuilder.CreateDate { - _updateDate = updateDate; - return this; + get => _createDate; + set => _createDate = value; } - public DictionaryTranslationBuilder WithId(int id) + DateTime? IWithUpdateDateBuilder.UpdateDate { - _id = id; - return this; + get => _updateDate; + set => _updateDate = value; } } } diff --git a/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs b/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs new file mode 100644 index 0000000000..9b6a961c4f --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs @@ -0,0 +1,28 @@ +using System; + +namespace Umbraco.Tests.Shared.Builders.Extensions +{ + public static class BuilderExtensions + { + public static T WithId(this T builder, int id) + where T : IWithIdBuilder + { + builder.Id = id; + return builder; + } + + public static T WithCreateDate(this T builder, DateTime createDate) + where T : IWithCreateDateBuilder + { + builder.CreateDate = createDate; + return builder; + } + + public static T WithUpdateDate(this T builder, DateTime updateDate) + where T : IWithUpdateDateBuilder + { + builder.UpdateDate = updateDate; + return builder; + } + } +} diff --git a/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs b/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs index 82375434a6..d3855145f3 100644 --- a/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs @@ -13,10 +13,11 @@ namespace Umbraco.Tests.Shared.Builders } - public class LanguageBuilder : ChildBuilderBase + public class LanguageBuilder : ChildBuilderBase, IWithIdBuilder { - private int? _id = null; + private string _isoCode = null; + private int? _id; public LanguageBuilder(TParent parentBuilder) : base(parentBuilder) { @@ -34,10 +35,10 @@ namespace Umbraco.Tests.Shared.Builders }; } - public LanguageBuilder WithId(int id) + int? IWithIdBuilder.Id { - _id = id; - return this; + get => _id; + set => _id = value; } } } diff --git a/src/Umbraco.Tests.Shared/Builders/Markers/IWithCreateDateBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Markers/IWithCreateDateBuilder.cs new file mode 100644 index 0000000000..3ea3b9e7cc --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/Markers/IWithCreateDateBuilder.cs @@ -0,0 +1,9 @@ +using System; + +namespace Umbraco.Tests.Shared.Builders +{ + public interface IWithCreateDateBuilder + { + DateTime? CreateDate { get; set; } + } +} diff --git a/src/Umbraco.Tests.Shared/Builders/Markers/IWithIdBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Markers/IWithIdBuilder.cs new file mode 100644 index 0000000000..7575d2429d --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/Markers/IWithIdBuilder.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Tests.Shared.Builders +{ + public interface IWithIdBuilder + { + int? Id { get; set; } + } +} diff --git a/src/Umbraco.Tests.Shared/Builders/Markers/IWithUpdateDateBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Markers/IWithUpdateDateBuilder.cs new file mode 100644 index 0000000000..a0d4fe6258 --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/Markers/IWithUpdateDateBuilder.cs @@ -0,0 +1,9 @@ +using System; + +namespace Umbraco.Tests.Shared.Builders +{ + public interface IWithUpdateDateBuilder + { + DateTime? UpdateDate { get; set; } + } +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs new file mode 100644 index 0000000000..ecd4249bc6 --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs @@ -0,0 +1,56 @@ +using Newtonsoft.Json; +using NUnit.Framework; +using Umbraco.Core.Models; +using Umbraco.Tests.Shared.Builders; +using Umbraco.Tests.Shared.Builders.Extensions; + +namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +{ + [TestFixture] + public class DataTypeTests + { + + private readonly DataTypeBuilder _builder = new DataTypeBuilder(); + [Test] + public void Can_Deep_Clone() + { + var dtd = _builder + .WithId(3123) + .Build(); + + var clone = (DataType) dtd.DeepClone(); + + Assert.AreNotSame(clone, dtd); + Assert.AreEqual(clone, dtd); + Assert.AreEqual(clone.CreateDate, dtd.CreateDate); + Assert.AreEqual(clone.CreatorId, dtd.CreatorId); + Assert.AreEqual(clone.DatabaseType, dtd.DatabaseType); + Assert.AreEqual(clone.Id, dtd.Id); + Assert.AreEqual(clone.Key, dtd.Key); + Assert.AreEqual(clone.Level, dtd.Level); + Assert.AreEqual(clone.Name, dtd.Name); + Assert.AreEqual(clone.ParentId, dtd.ParentId); + Assert.AreEqual(clone.Path, dtd.Path); + Assert.AreEqual(clone.SortOrder, dtd.SortOrder); + Assert.AreEqual(clone.Trashed, dtd.Trashed); + Assert.AreEqual(clone.UpdateDate, dtd.UpdateDate); + + //This double verifies by reflection + var allProps = clone.GetType().GetProperties(); + foreach (var propertyInfo in allProps) + { + Assert.AreEqual(propertyInfo.GetValue(clone, null), propertyInfo.GetValue(dtd, null)); + } + } + + [Test] + public void Can_Serialize_Without_Error() + { + var item = _builder + .Build(); + + Assert.DoesNotThrow(() => JsonConvert.SerializeObject(item)); + } + + } +}