From a33d1b4fef4fc30144b2b29a0fd1d273a19ca9dd Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Thu, 9 Jan 2020 13:04:27 +0100 Subject: [PATCH 01/12] Added UnitTest project --- .../Builders/DictionaryItemBuilder.cs | 10 ++++++ .../Umbraco.Tests.Shared.csproj | 23 +++++++++++++ .../Models/DictionaryItemTests.cs | 18 ++++++++++ .../Umbraco.Tests.UnitTests.csproj | 34 +++++++++++++++++++ src/umbraco.sln | 14 ++++++++ 5 files changed, 99 insertions(+) create mode 100644 src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs create mode 100644 src/Umbraco.Tests.Shared/Umbraco.Tests.Shared.csproj create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj diff --git a/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs new file mode 100644 index 0000000000..0bb16826e8 --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs @@ -0,0 +1,10 @@ +namespace Umbraco.Tests.Shared.Builders +{ + public class DictionaryItemBuilder + { + public object Build() + { + throw new System.NotImplementedException(); + } + } +} diff --git a/src/Umbraco.Tests.Shared/Umbraco.Tests.Shared.csproj b/src/Umbraco.Tests.Shared/Umbraco.Tests.Shared.csproj new file mode 100644 index 0000000000..65d17b16df --- /dev/null +++ b/src/Umbraco.Tests.Shared/Umbraco.Tests.Shared.csproj @@ -0,0 +1,23 @@ + + + + netstandard2.0 + + + + + + + + + + + + + + + + + + + diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs new file mode 100644 index 0000000000..ac3283df5d --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs @@ -0,0 +1,18 @@ +using NUnit.Framework; +using Umbraco.Tests.Shared.Builders; + +namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +{ + [TestFixture] + public class DictionaryItemTests + { + [Test] + public void Can_Deep_Clone() + { + var builder = new DictionaryItemBuilder(); + + var item = builder + .Build(); + } + } +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj new file mode 100644 index 0000000000..8dad14e747 --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj @@ -0,0 +1,34 @@ + + + + netcoreapp2.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/umbraco.sln b/src/umbraco.sln index c70f10bdb3..e0f20287bd 100644 --- a/src/umbraco.sln +++ b/src/umbraco.sln @@ -110,6 +110,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Infrastructure", "U EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Configuration", "Umbraco.Configuration\Umbraco.Configuration.csproj", "{FBE7C065-DAC0-4025-A78B-63B24D3AB00B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Tests.UnitTests", "Umbraco.Tests.UnitTests\Umbraco.Tests.UnitTests.csproj", "{9102ABDF-E537-4E46-B525-C9ED4833EED0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Tests.Shared", "Umbraco.Tests.Shared\Umbraco.Tests.Shared.csproj", "{58F1DFC6-5096-4B99-B57B-984F2EEDFADE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -158,6 +162,14 @@ Global {FBE7C065-DAC0-4025-A78B-63B24D3AB00B}.Debug|Any CPU.Build.0 = Debug|Any CPU {FBE7C065-DAC0-4025-A78B-63B24D3AB00B}.Release|Any CPU.ActiveCfg = Release|Any CPU {FBE7C065-DAC0-4025-A78B-63B24D3AB00B}.Release|Any CPU.Build.0 = Release|Any CPU + {9102ABDF-E537-4E46-B525-C9ED4833EED0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9102ABDF-E537-4E46-B525-C9ED4833EED0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9102ABDF-E537-4E46-B525-C9ED4833EED0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9102ABDF-E537-4E46-B525-C9ED4833EED0}.Release|Any CPU.Build.0 = Release|Any CPU + {58F1DFC6-5096-4B99-B57B-984F2EEDFADE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {58F1DFC6-5096-4B99-B57B-984F2EEDFADE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {58F1DFC6-5096-4B99-B57B-984F2EEDFADE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {58F1DFC6-5096-4B99-B57B-984F2EEDFADE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -170,6 +182,8 @@ Global {53594E5B-64A2-4545-8367-E3627D266AE8} = {FD962632-184C-4005-A5F3-E705D92FC645} {3A33ADC9-C6C0-4DB1-A613-A9AF0210DF3D} = {B5BD12C1-A454-435E-8A46-FF4A364C0382} {C7311C00-2184-409B-B506-52A5FAEA8736} = {FD962632-184C-4005-A5F3-E705D92FC645} + {9102ABDF-E537-4E46-B525-C9ED4833EED0} = {B5BD12C1-A454-435E-8A46-FF4A364C0382} + {58F1DFC6-5096-4B99-B57B-984F2EEDFADE} = {B5BD12C1-A454-435E-8A46-FF4A364C0382} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7A0F2E34-D2AF-4DAB-86A0-7D7764B3D0EC} From 997796758e55a736f533c8ed7b72604cb27a7f58 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Thu, 9 Jan 2020 14:24:20 +0100 Subject: [PATCH 02/12] Added Builders --- .../Builders/BuilderBase.cs | 7 ++ .../Builders/ChildBuilderBase.cs | 19 +++++ .../Builders/DictionaryItemBuilder.cs | 53 +++++++++++++- .../Builders/DictionaryTranslationBuilder.cs | 71 +++++++++++++++++++ .../Builders/LanguageBuilder.cs | 35 +++++++++ .../Umbraco.Tests.Shared.csproj | 10 +++ .../Models/DictionaryItemTests.cs | 55 +++++++++++++- 7 files changed, 245 insertions(+), 5 deletions(-) create mode 100644 src/Umbraco.Tests.Shared/Builders/BuilderBase.cs create mode 100644 src/Umbraco.Tests.Shared/Builders/ChildBuilderBase.cs create mode 100644 src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs create mode 100644 src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs diff --git a/src/Umbraco.Tests.Shared/Builders/BuilderBase.cs b/src/Umbraco.Tests.Shared/Builders/BuilderBase.cs new file mode 100644 index 0000000000..d026999351 --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/BuilderBase.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Tests.Shared.Builders +{ + public abstract class BuilderBase + { + public abstract T Build(); + } +} diff --git a/src/Umbraco.Tests.Shared/Builders/ChildBuilderBase.cs b/src/Umbraco.Tests.Shared/Builders/ChildBuilderBase.cs new file mode 100644 index 0000000000..742b86d16e --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/ChildBuilderBase.cs @@ -0,0 +1,19 @@ +namespace Umbraco.Tests.Shared.Builders +{ + public abstract class ChildBuilderBase : BuilderBase + { + private readonly TParent _parentBuilder; + + protected ChildBuilderBase(TParent parentBuilder) + { + _parentBuilder = parentBuilder; + } + + + public TParent Done() + { + return _parentBuilder; + } + + } +} diff --git a/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs index 0bb16826e8..64f74417a4 100644 --- a/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs @@ -1,10 +1,59 @@ +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 object Build() + private string _itemkey = null; + private readonly List _translationBuilders = new List(); + private DateTime? _createDate; + private DateTime? _updateDate; + private int? _id = null; + + + public DictionaryItem Build() { - throw new System.NotImplementedException(); + var createDate = _createDate ?? DateTime.Now; + var updateDate = _updateDate ?? DateTime.Now; + var id = _id ?? 1; + + var result = new DictionaryItem(_itemkey ?? Guid.NewGuid().ToString()); + result.Translations = _translationBuilders.Select(x => x.Build()); + result.CreateDate = createDate; + result.UpdateDate = updateDate; + result.Id = id; + return result; + } + + public DictionaryTranslationBuilder AddTranslation() + { + var builder = new DictionaryTranslationBuilder(this); + + _translationBuilders.Add(builder); + + 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; } } } diff --git a/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs new file mode 100644 index 0000000000..fb82133030 --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs @@ -0,0 +1,71 @@ +using System; +using System.Globalization; +using Umbraco.Core.Models; + +namespace Umbraco.Tests.Shared.Builders +{ + public class DictionaryTranslationBuilder : ChildBuilderBase + { + private string _value = null; + private Guid? _uniqueId = null; + private DateTime? _createDate; + private DateTime? _updateDate; + + + private LanguageBuilder _languageBuilder; + private int? _id = null; + + public DictionaryTranslationBuilder(DictionaryItemBuilder parentBuilder) : base(parentBuilder) + { + _languageBuilder = new LanguageBuilder(this); + + } + + public override IDictionaryTranslation Build() + { + var createDate = _createDate ?? DateTime.Now; + var updateDate = _updateDate ?? DateTime.Now; + var id = _id ?? 1; + + var result = new DictionaryTranslation( + _languageBuilder.Build(), + _value ?? Guid.NewGuid().ToString(), + _uniqueId ?? Guid.NewGuid()); + + result.CreateDate = createDate; + result.UpdateDate = updateDate; + result.Id = id; + + return result; + } + + public LanguageBuilder WithLanguage() + { + return _languageBuilder; + } + + public DictionaryTranslationBuilder WithValue(string value) + { + _value = value; + return this; + } + + public DictionaryTranslationBuilder WithCreateData(DateTime createDate) + { + _createDate = createDate; + return this; + } + + public DictionaryTranslationBuilder WithUpdateData(DateTime updateDate) + { + _updateDate = updateDate; + return this; + } + + public DictionaryTranslationBuilder WithId(int id) + { + _id = id; + return this; + } + } +} diff --git a/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs b/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs new file mode 100644 index 0000000000..3adc6262a2 --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs @@ -0,0 +1,35 @@ +using System.Globalization; +using Moq; +using Umbraco.Core.Configuration; +using Umbraco.Core.Models; + +namespace Umbraco.Tests.Shared.Builders +{ + public class LanguageBuilder : ChildBuilderBase + { + private int? _id = null; + private string _isoCode = null; + + public LanguageBuilder(TParent parentBuilder) : base(parentBuilder) + { + } + + public override ILanguage Build() + { + var culture = CultureInfo.GetCultureInfo("en-US"); + var isoCode = _isoCode ?? culture.Name; + return new Language(Mock.Of(), isoCode) + { + Id = _id ?? 1, + CultureName = culture.TwoLetterISOLanguageName, + IsoCode = new RegionInfo(culture.LCID).Name, + }; + } + + public LanguageBuilder WithId(int id) + { + _id = id; + return this; + } + } +} diff --git a/src/Umbraco.Tests.Shared/Umbraco.Tests.Shared.csproj b/src/Umbraco.Tests.Shared/Umbraco.Tests.Shared.csproj index 65d17b16df..93afb6f531 100644 --- a/src/Umbraco.Tests.Shared/Umbraco.Tests.Shared.csproj +++ b/src/Umbraco.Tests.Shared/Umbraco.Tests.Shared.csproj @@ -18,6 +18,16 @@ + + + + + + + + + + diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs index ac3283df5d..57ac00c026 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs @@ -1,4 +1,7 @@ +using System.Linq; +using Newtonsoft.Json; using NUnit.Framework; +using Umbraco.Core.Models; using Umbraco.Tests.Shared.Builders; namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models @@ -6,13 +9,59 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models [TestFixture] public class DictionaryItemTests { + private readonly DictionaryItemBuilder _builder = new DictionaryItemBuilder(); + [Test] public void Can_Deep_Clone() { - var builder = new DictionaryItemBuilder(); - - var item = builder + var item = _builder + .AddTranslation() + .WithValue("Colour") + .Done() + .AddTranslation() + .WithValue("Color") + .Done() .Build(); + + var clone = (DictionaryItem)item.DeepClone(); + + Assert.AreNotSame(clone, item); + Assert.AreEqual(clone, item); + Assert.AreEqual(clone.CreateDate, item.CreateDate); + Assert.AreEqual(clone.Id, item.Id); + Assert.AreEqual(clone.ItemKey, item.ItemKey); + Assert.AreEqual(clone.Key, item.Key); + Assert.AreEqual(clone.ParentId, item.ParentId); + Assert.AreEqual(clone.UpdateDate, item.UpdateDate); + Assert.AreEqual(clone.Translations.Count(), item.Translations.Count()); + for (var i = 0; i < item.Translations.Count(); i++) + { + Assert.AreNotSame(clone.Translations.ElementAt(i), item.Translations.ElementAt(i)); + Assert.AreEqual(clone.Translations.ElementAt(i), item.Translations.ElementAt(i)); + } + + //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 = _builder + .AddTranslation() + .WithValue("Colour") + .Done() + .AddTranslation() + .WithValue("Color") + .Done() + .Build(); + + Assert.DoesNotThrow(() => JsonConvert.SerializeObject(item)); } } } From 9d6d43c2d0e66a1ca5b9a31947ed8d76d99c4f7e Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Thu, 9 Jan 2020 14:49:11 +0100 Subject: [PATCH 03/12] Added language tests --- .../Builders/DictionaryItemBuilder.cs | 9 ++++ .../Builders/LanguageBuilder.cs | 8 ++++ .../Models/DictionaryItemTests.cs | 14 +----- .../Models/LanguageTests.cs | 44 +++++++++++++++++++ 4 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/LanguageTests.cs diff --git a/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs index 64f74417a4..992c197854 100644 --- a/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs @@ -55,5 +55,14 @@ namespace Umbraco.Tests.Shared.Builders _id = id; return this; } + + public DictionaryItemBuilder WithRandomTranslations(int count) + { + for (var i = 0; i < count; i++) + { + AddTranslation().Done(); + } + return this; + } } } diff --git a/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs b/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs index 3adc6262a2..82375434a6 100644 --- a/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs @@ -5,6 +5,14 @@ using Umbraco.Core.Models; namespace Umbraco.Tests.Shared.Builders { + public class LanguageBuilder : LanguageBuilder + { + public LanguageBuilder() : base(null) + { + } + } + + public class LanguageBuilder : ChildBuilderBase { private int? _id = null; diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs index 57ac00c026..85c0e56089 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs @@ -15,12 +15,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models public void Can_Deep_Clone() { var item = _builder - .AddTranslation() - .WithValue("Colour") - .Done() - .AddTranslation() - .WithValue("Color") - .Done() + .WithRandomTranslations(2) .Build(); var clone = (DictionaryItem)item.DeepClone(); @@ -53,12 +48,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models public void Can_Serialize_Without_Error() { var item = _builder - .AddTranslation() - .WithValue("Colour") - .Done() - .AddTranslation() - .WithValue("Color") - .Done() + .WithRandomTranslations(2) .Build(); Assert.DoesNotThrow(() => JsonConvert.SerializeObject(item)); diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/LanguageTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/LanguageTests.cs new file mode 100644 index 0000000000..57ed20310a --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/LanguageTests.cs @@ -0,0 +1,44 @@ +using Newtonsoft.Json; +using NUnit.Framework; +using Umbraco.Core.Models; +using Umbraco.Tests.Shared.Builders; + +namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +{ + [TestFixture] + public class LanguageTests + { + private readonly LanguageBuilder _builder = new LanguageBuilder(); + + [Test] + public void Can_Deep_Clone() + { + var item = _builder.Build(); + + var clone = (Language) item.DeepClone(); + Assert.AreNotSame(clone, item); + Assert.AreEqual(clone, item); + Assert.AreEqual(clone.CreateDate, item.CreateDate); + Assert.AreEqual(clone.CultureName, item.CultureName); + Assert.AreEqual(clone.Id, item.Id); + Assert.AreEqual(clone.IsoCode, item.IsoCode); + Assert.AreEqual(clone.Key, item.Key); + 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 = _builder.Build(); + + Assert.DoesNotThrow(() => JsonConvert.SerializeObject(item)); + } + } +} From 728799b036d751d12f0d5828a11d5ec360da8a1d Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Thu, 9 Jan 2020 15:32:19 +0100 Subject: [PATCH 04/12] using extension methods to enforce consistency --- .../Builders/DataEditorBuilder.cs | 28 ++++++++++ .../Builders/DataTypeBuilder.cs | 33 +++++++++++ .../Builders/DictionaryItemBuilder.cs | 40 +++++++------ .../Builders/DictionaryTranslationBuilder.cs | 21 ++++--- .../Builders/Extensions/BuilderExtensions.cs | 28 ++++++++++ .../Builders/LanguageBuilder.cs | 11 ++-- .../Markers/IWithCreateDateBuilder.cs | 9 +++ .../Builders/Markers/IWithIdBuilder.cs | 7 +++ .../Markers/IWithUpdateDateBuilder.cs | 9 +++ .../Models/DataTypeTests.cs | 56 +++++++++++++++++++ 10 files changed, 205 insertions(+), 37 deletions(-) create mode 100644 src/Umbraco.Tests.Shared/Builders/DataEditorBuilder.cs create mode 100644 src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs create mode 100644 src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs create mode 100644 src/Umbraco.Tests.Shared/Builders/Markers/IWithCreateDateBuilder.cs create mode 100644 src/Umbraco.Tests.Shared/Builders/Markers/IWithIdBuilder.cs create mode 100644 src/Umbraco.Tests.Shared/Builders/Markers/IWithUpdateDateBuilder.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs 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)); + } + + } +} From b786dd185b63c24ed63ee7ee6173922ad2b1d6bf Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Thu, 9 Jan 2020 15:48:28 +0100 Subject: [PATCH 05/12] Clean up --- .../Builders/Extensions/BuilderExtensions.cs | 2 +- .../Builders/{Markers => Interfaces}/IWithCreateDateBuilder.cs | 0 .../Builders/{Markers => Interfaces}/IWithIdBuilder.cs | 0 .../Builders/{Markers => Interfaces}/IWithUpdateDateBuilder.cs | 0 .../Umbraco.Infrastructure/Models/DataTypeTests.cs | 1 - 5 files changed, 1 insertion(+), 2 deletions(-) rename src/Umbraco.Tests.Shared/Builders/{Markers => Interfaces}/IWithCreateDateBuilder.cs (100%) rename src/Umbraco.Tests.Shared/Builders/{Markers => Interfaces}/IWithIdBuilder.cs (100%) rename src/Umbraco.Tests.Shared/Builders/{Markers => Interfaces}/IWithUpdateDateBuilder.cs (100%) diff --git a/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs b/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs index 9b6a961c4f..bab15761c1 100644 --- a/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs +++ b/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs @@ -1,6 +1,6 @@ using System; -namespace Umbraco.Tests.Shared.Builders.Extensions +namespace Umbraco.Tests.Shared.Builders { public static class BuilderExtensions { diff --git a/src/Umbraco.Tests.Shared/Builders/Markers/IWithCreateDateBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithCreateDateBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Shared/Builders/Markers/IWithCreateDateBuilder.cs rename to src/Umbraco.Tests.Shared/Builders/Interfaces/IWithCreateDateBuilder.cs diff --git a/src/Umbraco.Tests.Shared/Builders/Markers/IWithIdBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithIdBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Shared/Builders/Markers/IWithIdBuilder.cs rename to src/Umbraco.Tests.Shared/Builders/Interfaces/IWithIdBuilder.cs diff --git a/src/Umbraco.Tests.Shared/Builders/Markers/IWithUpdateDateBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithUpdateDateBuilder.cs similarity index 100% rename from src/Umbraco.Tests.Shared/Builders/Markers/IWithUpdateDateBuilder.cs rename to src/Umbraco.Tests.Shared/Builders/Interfaces/IWithUpdateDateBuilder.cs diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs index ecd4249bc6..d845e1b4a0 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs @@ -2,7 +2,6 @@ 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 { From 76ed4ccc6c9838de3fea106cb6c5ec2c05bfde83 Mon Sep 17 00:00:00 2001 From: elitsa Date: Thu, 9 Jan 2020 16:37:24 +0100 Subject: [PATCH 06/12] Updating namespaces --- .../Builders/DataTypeBuilder.cs | 1 + .../Builders/DictionaryItemBuilder.cs | 1 + .../Builders/DictionaryTranslationBuilder.cs | 1 + .../Builders/Extensions/BuilderExtensions.cs | 15 +++++++++++++++ .../Builders/LanguageBuilder.cs | 1 + .../Builders/Markers/IWithCreateDateBuilder.cs | 2 +- .../Builders/Markers/IWithIdBuilder.cs | 2 +- .../Builders/Markers/IWithUpdateDateBuilder.cs | 2 +- 8 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs index 128990ab4e..b22b313a75 100644 --- a/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs @@ -1,4 +1,5 @@ using Umbraco.Core.Models; +using Umbraco.Tests.Shared.Builders.Markers; namespace Umbraco.Tests.Shared.Builders { diff --git a/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs index 5f88a636f7..d978980e2a 100644 --- a/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using Umbraco.Core.Models; +using Umbraco.Tests.Shared.Builders.Markers; namespace Umbraco.Tests.Shared.Builders { diff --git a/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs index 3f471777c4..d74b0b1730 100644 --- a/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs @@ -1,5 +1,6 @@ using System; using Umbraco.Core.Models; +using Umbraco.Tests.Shared.Builders.Markers; namespace Umbraco.Tests.Shared.Builders { diff --git a/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs b/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs index 9b6a961c4f..a307e89cb0 100644 --- a/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs +++ b/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs @@ -1,4 +1,5 @@ using System; +using Umbraco.Tests.Shared.Builders.Markers; namespace Umbraco.Tests.Shared.Builders.Extensions { @@ -24,5 +25,19 @@ namespace Umbraco.Tests.Shared.Builders.Extensions builder.UpdateDate = updateDate; return builder; } + + public static T WithAlias(this T builder, string alias) + where T : IWithAliasBuilder + { + builder.Alias = alias; + return builder; + } + + public static T WithName(this T builder, string name) + where T : IWithNameBuilder + { + builder.Name = name; + return builder; + } } } diff --git a/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs b/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs index d3855145f3..f4ec69541d 100644 --- a/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs @@ -2,6 +2,7 @@ using System.Globalization; using Moq; using Umbraco.Core.Configuration; using Umbraco.Core.Models; +using Umbraco.Tests.Shared.Builders.Markers; namespace Umbraco.Tests.Shared.Builders { diff --git a/src/Umbraco.Tests.Shared/Builders/Markers/IWithCreateDateBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Markers/IWithCreateDateBuilder.cs index 3ea3b9e7cc..6bc3c8c887 100644 --- a/src/Umbraco.Tests.Shared/Builders/Markers/IWithCreateDateBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/Markers/IWithCreateDateBuilder.cs @@ -1,6 +1,6 @@ using System; -namespace Umbraco.Tests.Shared.Builders +namespace Umbraco.Tests.Shared.Builders.Markers { public interface IWithCreateDateBuilder { diff --git a/src/Umbraco.Tests.Shared/Builders/Markers/IWithIdBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Markers/IWithIdBuilder.cs index 7575d2429d..da93d9ac1f 100644 --- a/src/Umbraco.Tests.Shared/Builders/Markers/IWithIdBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/Markers/IWithIdBuilder.cs @@ -1,4 +1,4 @@ -namespace Umbraco.Tests.Shared.Builders +namespace Umbraco.Tests.Shared.Builders.Markers { public interface IWithIdBuilder { diff --git a/src/Umbraco.Tests.Shared/Builders/Markers/IWithUpdateDateBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Markers/IWithUpdateDateBuilder.cs index a0d4fe6258..5ced57fa4e 100644 --- a/src/Umbraco.Tests.Shared/Builders/Markers/IWithUpdateDateBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/Markers/IWithUpdateDateBuilder.cs @@ -1,6 +1,6 @@ using System; -namespace Umbraco.Tests.Shared.Builders +namespace Umbraco.Tests.Shared.Builders.Markers { public interface IWithUpdateDateBuilder { From 3dbe0c2847e4b0ea405eb5ce380f9922aa5273cd Mon Sep 17 00:00:00 2001 From: elitsa Date: Thu, 9 Jan 2020 16:38:31 +0100 Subject: [PATCH 07/12] Fixing indentation --- .../Umbraco.Infrastructure/Models/DataTypeTests.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs index ecd4249bc6..ce984b3a79 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs @@ -46,8 +46,7 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models [Test] public void Can_Serialize_Without_Error() { - var item = _builder - .Build(); + var item = _builder.Build(); Assert.DoesNotThrow(() => JsonConvert.SerializeObject(item)); } From 0748fede869a3a9b93a8267abc0c0ef8a20f066a Mon Sep 17 00:00:00 2001 From: elitsa Date: Thu, 9 Jan 2020 16:39:28 +0100 Subject: [PATCH 08/12] Adding tests for RelationType --- .../Builders/Markers/IWithAliasBuilder.cs | 7 +++ .../Builders/Markers/IWithNameBuilder.cs | 7 +++ .../Builders/RelationTypeBuilder.cs | 61 +++++++++++++++++++ .../Models/RelationTypeTests.cs | 50 +++++++++++++++ 4 files changed, 125 insertions(+) create mode 100644 src/Umbraco.Tests.Shared/Builders/Markers/IWithAliasBuilder.cs create mode 100644 src/Umbraco.Tests.Shared/Builders/Markers/IWithNameBuilder.cs create mode 100644 src/Umbraco.Tests.Shared/Builders/RelationTypeBuilder.cs create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs diff --git a/src/Umbraco.Tests.Shared/Builders/Markers/IWithAliasBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Markers/IWithAliasBuilder.cs new file mode 100644 index 0000000000..1a754ccaaf --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/Markers/IWithAliasBuilder.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Tests.Shared.Builders.Markers +{ + public interface IWithAliasBuilder + { + string Alias { get; set; } + } +} diff --git a/src/Umbraco.Tests.Shared/Builders/Markers/IWithNameBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Markers/IWithNameBuilder.cs new file mode 100644 index 0000000000..1170e7c446 --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/Markers/IWithNameBuilder.cs @@ -0,0 +1,7 @@ +namespace Umbraco.Tests.Shared.Builders.Markers +{ + public interface IWithNameBuilder + { + string Name { get; set; } + } +} diff --git a/src/Umbraco.Tests.Shared/Builders/RelationTypeBuilder.cs b/src/Umbraco.Tests.Shared/Builders/RelationTypeBuilder.cs new file mode 100644 index 0000000000..c00690650d --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/RelationTypeBuilder.cs @@ -0,0 +1,61 @@ +using System; +using Umbraco.Core.Models; +using Umbraco.Tests.Shared.Builders.Markers; + +namespace Umbraco.Tests.Shared.Builders +{ + + public class RelationTypeBuilder : RelationTypeBuilder + { + public RelationTypeBuilder() : base(null) + { + } + } + + public class RelationTypeBuilder : ChildBuilderBase, IWithIdBuilder, IWithAliasBuilder, IWithNameBuilder + { + private int? _id; + private string _alias; + private string _name; + private readonly Guid? _parentObjectType = null; + private readonly Guid? _childObjectType = null; + + public RelationTypeBuilder(TParent parentBuilder) : base(parentBuilder) + { + } + + + public override IRelationType Build() + { + var alias = _alias ?? Guid.NewGuid().ToString(); + var name = _name ?? Guid.NewGuid().ToString(); + var parentObjectType = _parentObjectType ?? Guid.NewGuid(); + var childObjectType = _childObjectType ?? Guid.NewGuid(); + var id = _id ?? 1; + + return new RelationType(name, alias, false, parentObjectType, + childObjectType) + { + Id = id + }; + } + + int? IWithIdBuilder.Id + { + get => _id; + set => _id = value; + } + + string IWithAliasBuilder.Alias + { + get => _alias; + set => _alias = value; + } + + string IWithNameBuilder.Name + { + get => _name; + set => _name = value; + } + } +} diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs new file mode 100644 index 0000000000..da255926df --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Newtonsoft.Json; +using NUnit.Framework; +using Umbraco.Core.Models; +using Umbraco.Tests.Shared.Builders; + +namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models +{ + [TestFixture] + public class RelationTypeTests + { + private readonly RelationTypeBuilder _builder = new RelationTypeBuilder(); + + [Test] + public void Can_Deep_Clone() + { + var item = _builder.Build(); + + var clone = (RelationType) item.DeepClone(); + + Assert.AreNotSame(clone, item); + Assert.AreEqual(clone, item); + Assert.AreEqual(clone.Alias, item.Alias); + Assert.AreEqual(clone.ChildObjectType, item.ChildObjectType); + Assert.AreEqual(clone.IsBidirectional, item.IsBidirectional); + 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.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 = _builder.Build(); + + Assert.DoesNotThrow(() => JsonConvert.SerializeObject(item)); + } + } +} From 7656072bd576b45128f275ab2f1189405d698a8a Mon Sep 17 00:00:00 2001 From: elitsa Date: Thu, 9 Jan 2020 16:45:46 +0100 Subject: [PATCH 09/12] Fixing namespaces and usings --- src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs | 2 +- src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs | 2 +- .../Builders/DictionaryTranslationBuilder.cs | 2 +- .../Builders/Extensions/BuilderExtensions.cs | 2 +- .../Builders/Interfaces/IWithAliasBuilder.cs | 2 +- .../Builders/Interfaces/IWithCreateDateBuilder.cs | 2 +- .../Builders/Interfaces/IWithIdBuilder.cs | 2 +- .../Builders/Interfaces/IWithNameBuilder.cs | 2 +- .../Builders/Interfaces/IWithUpdateDateBuilder.cs | 2 +- src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs | 2 +- src/Umbraco.Tests.Shared/Builders/RelationTypeBuilder.cs | 2 +- .../Umbraco.Infrastructure/Models/RelationTypeTests.cs | 5 +---- 12 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs index b22b313a75..ed225d53bd 100644 --- a/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs @@ -1,5 +1,5 @@ using Umbraco.Core.Models; -using Umbraco.Tests.Shared.Builders.Markers; +using Umbraco.Tests.Shared.Builders.Interfaces; namespace Umbraco.Tests.Shared.Builders { diff --git a/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs index d978980e2a..97837f6783 100644 --- a/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using Umbraco.Core.Models; -using Umbraco.Tests.Shared.Builders.Markers; +using Umbraco.Tests.Shared.Builders.Interfaces; namespace Umbraco.Tests.Shared.Builders { diff --git a/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs index d74b0b1730..5d44488bab 100644 --- a/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs @@ -1,6 +1,6 @@ using System; using Umbraco.Core.Models; -using Umbraco.Tests.Shared.Builders.Markers; +using Umbraco.Tests.Shared.Builders.Interfaces; namespace Umbraco.Tests.Shared.Builders { diff --git a/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs b/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs index a307e89cb0..0180e9e54c 100644 --- a/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs +++ b/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs @@ -1,5 +1,5 @@ using System; -using Umbraco.Tests.Shared.Builders.Markers; +using Umbraco.Tests.Shared.Builders.Interfaces; namespace Umbraco.Tests.Shared.Builders.Extensions { diff --git a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithAliasBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithAliasBuilder.cs index 1a754ccaaf..3ab70123f4 100644 --- a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithAliasBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithAliasBuilder.cs @@ -1,4 +1,4 @@ -namespace Umbraco.Tests.Shared.Builders.Markers +namespace Umbraco.Tests.Shared.Builders.Interfaces { public interface IWithAliasBuilder { diff --git a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithCreateDateBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithCreateDateBuilder.cs index 6bc3c8c887..7a7b69fc95 100644 --- a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithCreateDateBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithCreateDateBuilder.cs @@ -1,6 +1,6 @@ using System; -namespace Umbraco.Tests.Shared.Builders.Markers +namespace Umbraco.Tests.Shared.Builders.Interfaces { public interface IWithCreateDateBuilder { diff --git a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithIdBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithIdBuilder.cs index da93d9ac1f..a5a6175d8f 100644 --- a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithIdBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithIdBuilder.cs @@ -1,4 +1,4 @@ -namespace Umbraco.Tests.Shared.Builders.Markers +namespace Umbraco.Tests.Shared.Builders.Interfaces { public interface IWithIdBuilder { diff --git a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithNameBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithNameBuilder.cs index 1170e7c446..2ddcf65333 100644 --- a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithNameBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithNameBuilder.cs @@ -1,4 +1,4 @@ -namespace Umbraco.Tests.Shared.Builders.Markers +namespace Umbraco.Tests.Shared.Builders.Interfaces { public interface IWithNameBuilder { diff --git a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithUpdateDateBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithUpdateDateBuilder.cs index 5ced57fa4e..88a23d0275 100644 --- a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithUpdateDateBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithUpdateDateBuilder.cs @@ -1,6 +1,6 @@ using System; -namespace Umbraco.Tests.Shared.Builders.Markers +namespace Umbraco.Tests.Shared.Builders.Interfaces { public interface IWithUpdateDateBuilder { diff --git a/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs b/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs index f4ec69541d..4b196e169c 100644 --- a/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs @@ -2,7 +2,7 @@ using System.Globalization; using Moq; using Umbraco.Core.Configuration; using Umbraco.Core.Models; -using Umbraco.Tests.Shared.Builders.Markers; +using Umbraco.Tests.Shared.Builders.Interfaces; namespace Umbraco.Tests.Shared.Builders { diff --git a/src/Umbraco.Tests.Shared/Builders/RelationTypeBuilder.cs b/src/Umbraco.Tests.Shared/Builders/RelationTypeBuilder.cs index c00690650d..55ec30fd77 100644 --- a/src/Umbraco.Tests.Shared/Builders/RelationTypeBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/RelationTypeBuilder.cs @@ -1,6 +1,6 @@ using System; using Umbraco.Core.Models; -using Umbraco.Tests.Shared.Builders.Markers; +using Umbraco.Tests.Shared.Builders.Interfaces; namespace Umbraco.Tests.Shared.Builders { diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs index da255926df..4054f9d992 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Newtonsoft.Json; +using Newtonsoft.Json; using NUnit.Framework; using Umbraco.Core.Models; using Umbraco.Tests.Shared.Builders; From 2b0e9e8450d5f39d0a7e9fcc0c4b4e1303eb0859 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Mon, 13 Jan 2020 07:29:12 +0100 Subject: [PATCH 10/12] Added more options on the test builders --- .../Builders/ConfigurationEditorBuilder.cs | 33 +++ .../Builders/DataEditorBuilder.cs | 34 ++- .../Builders/DataTypeBuilder.cs | 138 ++++++++++- .../Builders/DataValueEditorBuilder.cs | 66 ++++++ .../Builders/DictionaryItemBuilder.cs | 105 +++++--- .../Builders/DictionaryTranslationBuilder.cs | 103 ++++---- .../Builders/Extensions/BuilderExtensions.cs | 7 + .../Builders/GlobalSettingsBuilder.cs | 224 ++++++++++++++++++ .../Interfaces/IWithCultureInfoBuilder.cs | 9 + .../Interfaces/IWithDeleteDateBuilder.cs | 9 + .../Builders/Interfaces/IWithKeyBuilder.cs | 9 + .../Builders/LanguageBuilder.cs | 101 +++++++- .../Builders/RelationTypeBuilder.cs | 116 ++++++--- .../Umbraco.Tests.Shared.csproj | 1 + .../Models/LanguageTests.cs | 1 + .../Models/RelationTypeTests.cs | 10 +- 16 files changed, 842 insertions(+), 124 deletions(-) create mode 100644 src/Umbraco.Tests.Shared/Builders/ConfigurationEditorBuilder.cs create mode 100644 src/Umbraco.Tests.Shared/Builders/DataValueEditorBuilder.cs create mode 100644 src/Umbraco.Tests.Shared/Builders/GlobalSettingsBuilder.cs create mode 100644 src/Umbraco.Tests.Shared/Builders/Interfaces/IWithCultureInfoBuilder.cs create mode 100644 src/Umbraco.Tests.Shared/Builders/Interfaces/IWithDeleteDateBuilder.cs create mode 100644 src/Umbraco.Tests.Shared/Builders/Interfaces/IWithKeyBuilder.cs diff --git a/src/Umbraco.Tests.Shared/Builders/ConfigurationEditorBuilder.cs b/src/Umbraco.Tests.Shared/Builders/ConfigurationEditorBuilder.cs new file mode 100644 index 0000000000..3abf683bf2 --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/ConfigurationEditorBuilder.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; +using Umbraco.Core.PropertyEditors; + +namespace Umbraco.Tests.Shared.Builders +{ + public class ConfigurationEditorBuilder : ChildBuilderBase + { + private IDictionary _defaultConfiguration; + + + public ConfigurationEditorBuilder(TParent parentBuilder) : base(parentBuilder) + { + } + + + public ConfigurationEditorBuilder WithDefaultConfiguration(IDictionary defaultConfiguration) + { + _defaultConfiguration = defaultConfiguration; + return this; + } + + public override IConfigurationEditor Build() + { + var defaultConfiguration = _defaultConfiguration ?? new Dictionary(); + + return new ConfigurationEditor() + { + DefaultConfiguration = defaultConfiguration, + }; + } + + } +} diff --git a/src/Umbraco.Tests.Shared/Builders/DataEditorBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DataEditorBuilder.cs index 5a0b18cf9e..0a9e94a74e 100644 --- a/src/Umbraco.Tests.Shared/Builders/DataEditorBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/DataEditorBuilder.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using Moq; using Umbraco.Core.Logging; using Umbraco.Core.PropertyEditors; @@ -8,21 +9,46 @@ namespace Umbraco.Tests.Shared.Builders { public class DataEditorBuilder : ChildBuilderBase { + private readonly ConfigurationEditorBuilder> _explicitConfigurationEditorBuilder; + private readonly DataValueEditorBuilder> _explicitValueEditorBuilder; + private IDictionary _defaultConfiguration; + public DataEditorBuilder(TParent parentBuilder) : base(parentBuilder) { + _explicitConfigurationEditorBuilder = new ConfigurationEditorBuilder>(this); + _explicitValueEditorBuilder = new DataValueEditorBuilder>(this); } + public DataEditorBuilder WithDefaultConfiguration(IDictionary defaultConfiguration) + { + _defaultConfiguration = defaultConfiguration; + return this; + } + + public ConfigurationEditorBuilder> AddExplicitConfigurationEditorBuilder() => + _explicitConfigurationEditorBuilder; + + public DataValueEditorBuilder> AddExplicitValueEditorBuilder() => + _explicitValueEditorBuilder; + public override IDataEditor Build() { - var result = new DataEditor( + var defaultConfiguration = _defaultConfiguration ?? new Dictionary(); + var explicitConfigurationEditor = _explicitConfigurationEditorBuilder.Build(); + var explicitValueEditor = _explicitValueEditorBuilder.Build(); + + return new DataEditor( Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of() - ); - - return result; + ) + { + DefaultConfiguration = defaultConfiguration, + ExplicitConfigurationEditor = explicitConfigurationEditor, + ExplicitValueEditor = explicitValueEditor + }; } } } diff --git a/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs index ed225d53bd..62e9e35ee0 100644 --- a/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs @@ -1,28 +1,124 @@ +using System; using Umbraco.Core.Models; using Umbraco.Tests.Shared.Builders.Interfaces; namespace Umbraco.Tests.Shared.Builders { - public class DataTypeBuilder : BuilderBase, IWithIdBuilder + public class DataTypeBuilder + : BuilderBase, + IWithIdBuilder, + IWithKeyBuilder, + IWithCreateDateBuilder, + IWithUpdateDateBuilder, + IWithDeleteDateBuilder, + IWithNameBuilder { private readonly DataEditorBuilder _dataEditorBuilder; private int? _id; + private int? _parentId; + private Guid? _key; + private DateTime? _createDate; + private DateTime? _updateDate; + private DateTime? _deleteDate; + private string _name; + private bool? _trashed; + // private object _configuration; + private int? _level; + private string _path; + private int? _creatorId; + private ValueStorageType? _databaseType; + private int? _sortOrder; public DataTypeBuilder() { _dataEditorBuilder = new DataEditorBuilder(this); } + public DataTypeBuilder WithParentId(int parentId) + { + _parentId = parentId; + return this; + } + + public DataTypeBuilder WithTrashed(bool trashed) + { + _trashed = trashed; + return this; + } + + // public DataTypeBuilder WithConfiguration(object configuration) + // { + // _configuration = configuration; + // return this; + // } + + public DataTypeBuilder WithLevel(int level) + { + _level = level; + return this; + } + + public DataTypeBuilder WithPath(string path) + { + _path = path; + return this; + } + + public DataTypeBuilder WithCreatorId(int creatorId) + { + _creatorId = creatorId; + return this; + } + + public DataTypeBuilder WithDatabaseType(ValueStorageType databaseType) + { + _databaseType = databaseType; + return this; + } + + public DataTypeBuilder WithSortOrder(int sortOrder) + { + _sortOrder = sortOrder; + return this; + } + + public DataEditorBuilder AddEditor() + { + return _dataEditorBuilder; + } + public override DataType Build() { var editor = _dataEditorBuilder.Build(); + var parentId = _parentId ?? -1; var id = _id ?? 1; - var result = new DataType(editor) - { - Id = id - }; + var key = _key ?? Guid.NewGuid(); + var createDate = _createDate ?? DateTime.Now; + var updateDate = _updateDate ?? DateTime.Now; + var deleteDate = _deleteDate ?? null; + var name = _name ?? Guid.NewGuid().ToString(); + // var configuration = _configuration ?? editor.GetConfigurationEditor().DefaultConfigurationObject; + var level = _level ?? 0; + var path = _path ?? string.Empty; + var creatorId = _creatorId ?? 1; + var databaseType = _databaseType ?? ValueStorageType.Ntext; + var sortOrder = _sortOrder ?? 0; - return result; + return new DataType(editor, parentId) + { + Id = id, + Key = key, + CreateDate = createDate, + UpdateDate = updateDate, + DeleteDate = deleteDate, + Name = name, + Trashed = _trashed ?? false, + Level = level, + Path = path, + CreatorId = creatorId, + DatabaseType = databaseType, + SortOrder = sortOrder, + }; } int? IWithIdBuilder.Id @@ -30,5 +126,35 @@ namespace Umbraco.Tests.Shared.Builders 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; + } + + DateTime? IWithDeleteDateBuilder.DeleteDate + { + get => _deleteDate; + set => _deleteDate = value; + } + + string IWithNameBuilder.Name + { + get => _name; + set => _name = value; + } } } diff --git a/src/Umbraco.Tests.Shared/Builders/DataValueEditorBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DataValueEditorBuilder.cs new file mode 100644 index 0000000000..be26510934 --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/DataValueEditorBuilder.cs @@ -0,0 +1,66 @@ +using System; +using Moq; +using Umbraco.Core.PropertyEditors; +using Umbraco.Core.Services; +using Umbraco.Core.Strings; + +namespace Umbraco.Tests.Shared.Builders +{ + public class DataValueEditorBuilder : ChildBuilderBase + { + private string _configuration; + private string _view; + private bool? _hideLabel; + private string _valueType; + + + public DataValueEditorBuilder(TParent parentBuilder) : base(parentBuilder) + { + } + + public DataValueEditorBuilder WithConfiguration(string configuration) + { + _configuration = configuration; + return this; + } + + public DataValueEditorBuilder WithView(string view) + { + _view = view; + return this; + } + + public DataValueEditorBuilder WithHideLabel(bool hideLabel) + { + _hideLabel = hideLabel; + return this; + } + + public DataValueEditorBuilder WithValueType(string valueType) + { + _valueType = valueType; + return this; + } + + public override IDataValueEditor Build() + { + var configuration = _configuration ?? null; + var view = _view ?? null; + var hideLabel = _hideLabel ?? false; + var valueType = _valueType ?? Guid.NewGuid().ToString(); + + return new DataValueEditor( + Mock.Of(), + Mock.Of(), + Mock.Of(), + Mock.Of() + ) + { + Configuration = configuration, + View = view, + HideLabel = hideLabel, + ValueType = valueType, + }; + } + } +} diff --git a/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs b/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs index 97837f6783..6baff80972 100644 --- a/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs @@ -6,28 +6,90 @@ using Umbraco.Tests.Shared.Builders.Interfaces; namespace Umbraco.Tests.Shared.Builders { - public class DictionaryItemBuilder : IWithIdBuilder, IWithCreateDateBuilder, IWithUpdateDateBuilder + public class DictionaryItemBuilder + : BuilderBase, + IWithIdBuilder, + IWithCreateDateBuilder, + IWithUpdateDateBuilder, + IWithDeleteDateBuilder, + IWithKeyBuilder { - private string _itemkey = null; - private readonly List _translationBuilders = new List(); - private DateTime? _createDate; - private DateTime? _updateDate; - private int? _id = null; + private readonly List _translationBuilders = + new List(); - public DictionaryItem Build() + private DateTime? _createDate; + private DateTime? _deleteDate; + private int? _id; + private string _itemKey; + private Guid? _key; + private Guid? _parentId; + private DateTime? _updateDate; + + DateTime? IWithCreateDateBuilder.CreateDate + { + get => _createDate; + set => _createDate = value; + } + + DateTime? IWithDeleteDateBuilder.DeleteDate + { + get => _deleteDate; + set => _deleteDate = value; + } + + int? IWithIdBuilder.Id + { + get => _id; + set => _id = value; + } + + Guid? IWithKeyBuilder.Key + { + get => _key; + set => _key = value; + } + + DateTime? IWithUpdateDateBuilder.UpdateDate + { + get => _updateDate; + set => _updateDate = value; + } + + public override DictionaryItem Build() { var createDate = _createDate ?? DateTime.Now; var updateDate = _updateDate ?? DateTime.Now; + var deleteDate = _deleteDate ?? null; var id = _id ?? 1; + var key = _key ?? Guid.NewGuid(); + var parentId = _parentId ?? null; + var itemKey = _itemKey ?? Guid.NewGuid().ToString(); - var result = new DictionaryItem(_itemkey ?? Guid.NewGuid().ToString()); - result.Translations = _translationBuilders.Select(x => x.Build()); - result.CreateDate = createDate; - result.UpdateDate = updateDate; - result.Id = id; + var result = new DictionaryItem(itemKey) + { + Translations = _translationBuilders.Select(x => x.Build()), + CreateDate = createDate, + UpdateDate = updateDate, + DeleteDate = deleteDate, + Id = id, + ParentId = parentId, + Key = key, + }; return result; } + public DictionaryItemBuilder WithParentId(Guid parentId) + { + _parentId = parentId; + return this; + } + + public DictionaryItemBuilder WithItemKey(string itemKey) + { + _itemKey = itemKey; + return this; + } + public DictionaryTranslationBuilder AddTranslation() { var builder = new DictionaryTranslationBuilder(this); @@ -43,25 +105,8 @@ namespace Umbraco.Tests.Shared.Builders { AddTranslation().Done(); } + 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 5d44488bab..bd596383d1 100644 --- a/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs @@ -4,56 +4,27 @@ using Umbraco.Tests.Shared.Builders.Interfaces; namespace Umbraco.Tests.Shared.Builders { - public class DictionaryTranslationBuilder : ChildBuilderBase, IWithIdBuilder, IWithCreateDateBuilder, IWithUpdateDateBuilder + public class DictionaryTranslationBuilder + : ChildBuilderBase, + IWithIdBuilder, + IWithCreateDateBuilder, + IWithUpdateDateBuilder, + IWithDeleteDateBuilder, + IWithKeyBuilder { - private string _value = null; - private Guid? _uniqueId = null; + private readonly LanguageBuilder _languageBuilder; + private readonly Guid? _uniqueId = null; private DateTime? _createDate; + private DateTime? _deleteDate; + private int? _id; + private Guid? _key; private DateTime? _updateDate; + private string _value; - private LanguageBuilder _languageBuilder; - private int? _id = null; - public DictionaryTranslationBuilder(DictionaryItemBuilder parentBuilder) : base(parentBuilder) { _languageBuilder = new LanguageBuilder(this); - - } - - public override IDictionaryTranslation Build() - { - var createDate = _createDate ?? DateTime.Now; - var updateDate = _updateDate ?? DateTime.Now; - var id = _id ?? 1; - - var result = new DictionaryTranslation( - _languageBuilder.Build(), - _value ?? Guid.NewGuid().ToString(), - _uniqueId ?? Guid.NewGuid()); - - result.CreateDate = createDate; - result.UpdateDate = updateDate; - result.Id = id; - - return result; - } - - public LanguageBuilder WithLanguage() - { - return _languageBuilder; - } - - public DictionaryTranslationBuilder WithValue(string value) - { - _value = value; - return this; - } - - int? IWithIdBuilder.Id - { - get => _id; - set => _id = value; } DateTime? IWithCreateDateBuilder.CreateDate @@ -62,10 +33,58 @@ namespace Umbraco.Tests.Shared.Builders set => _createDate = value; } + DateTime? IWithDeleteDateBuilder.DeleteDate + { + get => _deleteDate; + set => _deleteDate = value; + } + + int? IWithIdBuilder.Id + { + get => _id; + set => _id = value; + } + + Guid? IWithKeyBuilder.Key + { + get => _key; + set => _key = value; + } + DateTime? IWithUpdateDateBuilder.UpdateDate { get => _updateDate; set => _updateDate = value; } + + public override IDictionaryTranslation Build() + { + var createDate = _createDate ?? DateTime.Now; + var updateDate = _updateDate ?? DateTime.Now; + var deleteDate = _deleteDate ?? null; + var id = _id ?? 1; + var key = _key ?? Guid.NewGuid(); + + var result = new DictionaryTranslation( + _languageBuilder.Build(), + _value ?? Guid.NewGuid().ToString(), + _uniqueId ?? key) + { + CreateDate = createDate, + UpdateDate = updateDate, + DeleteDate = deleteDate, + Id = id + }; + + return result; + } + + public LanguageBuilder AddLanguage() => _languageBuilder; + + public DictionaryTranslationBuilder WithValue(string value) + { + _value = value; + return this; + } } } diff --git a/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs b/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs index 0180e9e54c..702bb19bb2 100644 --- a/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs +++ b/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs @@ -39,5 +39,12 @@ namespace Umbraco.Tests.Shared.Builders.Extensions builder.Name = name; return builder; } + + public static T WithKey(this T builder, Guid key) + where T : IWithKeyBuilder + { + builder.Key = key; + return builder; + } } } diff --git a/src/Umbraco.Tests.Shared/Builders/GlobalSettingsBuilder.cs b/src/Umbraco.Tests.Shared/Builders/GlobalSettingsBuilder.cs new file mode 100644 index 0000000000..b3c8e90fa5 --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/GlobalSettingsBuilder.cs @@ -0,0 +1,224 @@ +using Umbraco.Core.Configuration; + +namespace Umbraco.Tests.Shared.Builders +{ + public class GlobalSettingsBuilder : GlobalSettingsBuilder + { + public GlobalSettingsBuilder() : base(null) + { + } + } + + public class GlobalSettingsBuilder : ChildBuilderBase + + { + private string _configurationStatus; + private string _databaseFactoryServerVersion; + private string _defaultUiLanguage; + private bool? _disableElectionForSingleServer; + private bool? _hideTopLevelNodeFromPath; + private bool? _installEmptyDatabase; + private bool? _installMissingDatabase; + private bool? _isSmtpServerConfigured; + private string _path; + private string _registerType; + private string _reservedPaths; + private string _reservedUrls; + private int? _timeOutInMinutes; + private string _umbracoCssPath; + private string _umbracoMediaPath; + private string _umbracoPath; + private string _umbracoScriptsPath; + private bool? _useHttps; + private int? _versionCheckPeriod; + + + public GlobalSettingsBuilder(TParent parentBuilder) : base(parentBuilder) + { + } + + public GlobalSettingsBuilder WithConfigurationStatus(string configurationStatus) + { + _configurationStatus = configurationStatus; + return this; + } + + public GlobalSettingsBuilder WithDatabaseFactoryServerVersion(string databaseFactoryServerVersion) + { + _databaseFactoryServerVersion = databaseFactoryServerVersion; + return this; + } + + public GlobalSettingsBuilder WithDefaultUiLanguage(string defaultUiLanguage) + { + _defaultUiLanguage = defaultUiLanguage; + return this; + } + + public GlobalSettingsBuilder WithDisableElectionForSingleServer(bool disableElectionForSingleServer) + { + _disableElectionForSingleServer = disableElectionForSingleServer; + return this; + } + + public GlobalSettingsBuilder WithHideTopLevelNodeFromPath(bool hideTopLevelNodeFromPath) + { + _hideTopLevelNodeFromPath = hideTopLevelNodeFromPath; + return this; + } + + public GlobalSettingsBuilder WithInstallEmptyDatabase(bool installEmptyDatabase) + { + _installEmptyDatabase = installEmptyDatabase; + return this; + } + + public GlobalSettingsBuilder WithInstallMissingDatabase(bool installMissingDatabase) + { + _installMissingDatabase = installMissingDatabase; + return this; + } + + public GlobalSettingsBuilder WithIsSmtpServerConfigured(bool isSmtpServerConfigured) + { + _isSmtpServerConfigured = isSmtpServerConfigured; + return this; + } + + public GlobalSettingsBuilder WithPath(string path) + { + _path = path; + return this; + } + + public GlobalSettingsBuilder WithRegisterType(string registerType) + { + _registerType = registerType; + return this; + } + + public GlobalSettingsBuilder WithReservedPaths(string reservedPaths) + { + _reservedPaths = reservedPaths; + return this; + } + + public GlobalSettingsBuilder WithReservedUrls(string reservedUrls) + { + _reservedUrls = reservedUrls; + return this; + } + + public GlobalSettingsBuilder WithUmbracoPath(string umbracoPath) + { + _umbracoPath = umbracoPath; + return this; + } + + public GlobalSettingsBuilder WithUseHttps(bool useHttps) + { + _useHttps = useHttps; + return this; + } + + public GlobalSettingsBuilder WithUmbracoCssPath(string umbracoCssPath) + { + _umbracoCssPath = umbracoCssPath; + return this; + } + + public GlobalSettingsBuilder WithUmbracoMediaPath(string umbracoMediaPath) + { + _umbracoMediaPath = umbracoMediaPath; + return this; + } + + public GlobalSettingsBuilder WithUmbracoScriptsPath(string umbracoScriptsPath) + { + _umbracoScriptsPath = umbracoScriptsPath; + return this; + } + + public GlobalSettingsBuilder WithVersionCheckPeriod(int versionCheckPeriod) + { + _versionCheckPeriod = versionCheckPeriod; + return this; + } + + public GlobalSettingsBuilder WithTimeOutInMinutes(int timeOutInMinutes) + { + _timeOutInMinutes = timeOutInMinutes; + return this; + } + + public override IGlobalSettings Build() + { + var configurationStatus = _configurationStatus ?? "9.0.0"; + var databaseFactoryServerVersion = _databaseFactoryServerVersion ?? null; + var defaultUiLanguage = _defaultUiLanguage ?? "en"; + var disableElectionForSingleServer = _disableElectionForSingleServer ?? false; + var hideTopLevelNodeFromPath = _hideTopLevelNodeFromPath ?? false; + var installEmptyDatabase = _installEmptyDatabase ?? false; + var installMissingDatabase = _installMissingDatabase ?? false; + var isSmtpServerConfigured = _isSmtpServerConfigured ?? false; + var path = _path ?? "/umbraco"; + var registerType = _registerType ?? null; + var reservedPaths = _reservedPaths ?? "~/app_plugins/,~/install/,~/mini-profiler-resources/,"; + var reservedUrls = _reservedUrls ?? "~/config/splashes/noNodes.aspx,~/.well-known,"; + var umbracoPath = _umbracoPath ?? "~/umbraco"; + var useHttps = _useHttps ?? false; + var umbracoCssPath = _umbracoCssPath ?? "~/css"; + var umbracoMediaPath = _umbracoMediaPath ?? "~/media"; + var umbracoScriptsPath = _umbracoScriptsPath ?? "~/scripts"; + var versionCheckPeriod = _versionCheckPeriod ?? 0; + var timeOutInMinutes = _timeOutInMinutes ?? 20; + + + return new TestGlobalSettings + { + ConfigurationStatus = configurationStatus, + DatabaseFactoryServerVersion = databaseFactoryServerVersion, + DefaultUILanguage = defaultUiLanguage, + DisableElectionForSingleServer = disableElectionForSingleServer, + HideTopLevelNodeFromPath = hideTopLevelNodeFromPath, + InstallEmptyDatabase = installEmptyDatabase, + InstallMissingDatabase = installMissingDatabase, + IsSmtpServerConfigured = isSmtpServerConfigured, + Path = path, + RegisterType = registerType, + ReservedPaths = reservedPaths, + ReservedUrls = reservedUrls, + UmbracoPath = umbracoPath, + UseHttps = useHttps, + UmbracoCssPath = umbracoCssPath, + UmbracoMediaPath = umbracoMediaPath, + UmbracoScriptsPath = umbracoScriptsPath, + VersionCheckPeriod = versionCheckPeriod, + TimeOutInMinutes = timeOutInMinutes + }; + } + + private class TestGlobalSettings : IGlobalSettings + { + public string ReservedUrls { get; set; } + public string ReservedPaths { get; set; } + public string Path { get; set; } + public string ConfigurationStatus { get; set; } + public int TimeOutInMinutes { get; set; } + public string DefaultUILanguage { get; set; } + public bool HideTopLevelNodeFromPath { get; set; } + public bool UseHttps { get; set; } + public int VersionCheckPeriod { get; set; } + public string UmbracoPath { get; set; } + public string UmbracoCssPath { get; set; } + public string UmbracoScriptsPath { get; set; } + public string UmbracoMediaPath { get; set; } + public bool IsSmtpServerConfigured { get; set; } + public bool InstallMissingDatabase { get; set; } + public bool InstallEmptyDatabase { get; set; } + public bool DisableElectionForSingleServer { get; set; } + public string RegisterType { get; set; } + public string DatabaseFactoryServerVersion { get; set; } + } + } +} diff --git a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithCultureInfoBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithCultureInfoBuilder.cs new file mode 100644 index 0000000000..ee33d4549d --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithCultureInfoBuilder.cs @@ -0,0 +1,9 @@ +using System.Globalization; + +namespace Umbraco.Tests.Shared.Builders.Interfaces +{ + public interface IWithCultureInfoBuilder + { + CultureInfo CultureInfo { get; set; } + } +} diff --git a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithDeleteDateBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithDeleteDateBuilder.cs new file mode 100644 index 0000000000..3ae8ddfeed --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithDeleteDateBuilder.cs @@ -0,0 +1,9 @@ +using System; + +namespace Umbraco.Tests.Shared.Builders.Interfaces +{ + public interface IWithDeleteDateBuilder + { + DateTime? DeleteDate { get; set; } + } +} diff --git a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithKeyBuilder.cs b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithKeyBuilder.cs new file mode 100644 index 0000000000..78da4dbc0b --- /dev/null +++ b/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithKeyBuilder.cs @@ -0,0 +1,9 @@ +using System; + +namespace Umbraco.Tests.Shared.Builders.Interfaces +{ + public interface IWithKeyBuilder + { + Guid? Key { get; set; } + } +} diff --git a/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs b/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs index 4b196e169c..59e859dd3a 100644 --- a/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs @@ -1,3 +1,4 @@ +using System; using System.Globalization; using Moq; using Umbraco.Core.Configuration; @@ -13,27 +14,45 @@ namespace Umbraco.Tests.Shared.Builders } } - - public class LanguageBuilder : ChildBuilderBase, IWithIdBuilder + public class LanguageBuilder + : ChildBuilderBase, + IWithIdBuilder, + IWithKeyBuilder, + IWithCreateDateBuilder, + IWithUpdateDateBuilder, + IWithDeleteDateBuilder, + IWithCultureInfoBuilder { - - private string _isoCode = null; + private DateTime? _createDate; + private CultureInfo _cultureInfo; + private DateTime? _deleteDate; + private int? _fallbackLanguageId; private int? _id; + private bool? _isDefault; + private bool? _isMandatory; + private Guid? _key; + private DateTime? _updateDate; public LanguageBuilder(TParent parentBuilder) : base(parentBuilder) { } - public override ILanguage Build() + DateTime? IWithCreateDateBuilder.CreateDate { - var culture = CultureInfo.GetCultureInfo("en-US"); - var isoCode = _isoCode ?? culture.Name; - return new Language(Mock.Of(), isoCode) - { - Id = _id ?? 1, - CultureName = culture.TwoLetterISOLanguageName, - IsoCode = new RegionInfo(culture.LCID).Name, - }; + get => _createDate; + set => _createDate = value; + } + + CultureInfo IWithCultureInfoBuilder.CultureInfo + { + get => _cultureInfo; + set => _cultureInfo = value; + } + + DateTime? IWithDeleteDateBuilder.DeleteDate + { + get => _deleteDate; + set => _deleteDate = value; } int? IWithIdBuilder.Id @@ -41,5 +60,61 @@ namespace Umbraco.Tests.Shared.Builders get => _id; set => _id = value; } + + Guid? IWithKeyBuilder.Key + { + get => _key; + set => _key = value; + } + + DateTime? IWithUpdateDateBuilder.UpdateDate + { + get => _updateDate; + set => _updateDate = value; + } + + public override ILanguage Build() + { + var cultureInfo = _cultureInfo ?? CultureInfo.GetCultureInfo("en-US"); + var key = _key ?? Guid.NewGuid(); + var createDate = _createDate ?? DateTime.Now; + var updateDate = _updateDate ?? DateTime.Now; + var deleteDate = _deleteDate ?? null; + var fallbackLanguageId = _fallbackLanguageId ?? null; + var isDefault = _isDefault ?? false; + var isMandatory = _isMandatory ?? false; + + return new Language(Mock.Of(), cultureInfo.Name) + { + Id = _id ?? 1, + CultureName = cultureInfo.TwoLetterISOLanguageName, + IsoCode = new RegionInfo(cultureInfo.LCID).Name, + Key = key, + CreateDate = createDate, + UpdateDate = updateDate, + DeleteDate = deleteDate, + IsDefault = isDefault, + IsMandatory = isMandatory, + FallbackLanguageId = fallbackLanguageId + }; + } + + public LanguageBuilder WithIsDefault(bool isDefault) + { + _isDefault = isDefault; + return this; + } + + public LanguageBuilder WithIsMandatory(bool isMandatory) + { + _isMandatory = isMandatory; + return this; + } + + public LanguageBuilder WithFallbackLanguageId(int fallbackLanguageId) + { + _fallbackLanguageId = fallbackLanguageId; + return this; + } } } diff --git a/src/Umbraco.Tests.Shared/Builders/RelationTypeBuilder.cs b/src/Umbraco.Tests.Shared/Builders/RelationTypeBuilder.cs index 55ec30fd77..2cb81688b7 100644 --- a/src/Umbraco.Tests.Shared/Builders/RelationTypeBuilder.cs +++ b/src/Umbraco.Tests.Shared/Builders/RelationTypeBuilder.cs @@ -4,7 +4,6 @@ using Umbraco.Tests.Shared.Builders.Interfaces; namespace Umbraco.Tests.Shared.Builders { - public class RelationTypeBuilder : RelationTypeBuilder { public RelationTypeBuilder() : base(null) @@ -12,39 +11,30 @@ namespace Umbraco.Tests.Shared.Builders } } - public class RelationTypeBuilder : ChildBuilderBase, IWithIdBuilder, IWithAliasBuilder, IWithNameBuilder + public class RelationTypeBuilder + : ChildBuilderBase, + IWithIdBuilder, + IWithAliasBuilder, + IWithNameBuilder, + IWithKeyBuilder, + IWithCreateDateBuilder, + IWithUpdateDateBuilder, + IWithDeleteDateBuilder { - private int? _id; private string _alias; + private Guid? _childObjectType; + private DateTime? _createDate; + private DateTime? _deleteDate; + private int? _id; + private bool? _isBidirectional; + private Guid? _key; private string _name; - private readonly Guid? _parentObjectType = null; - private readonly Guid? _childObjectType = null; + private Guid? _parentObjectType; + private DateTime? _updateDate; public RelationTypeBuilder(TParent parentBuilder) : base(parentBuilder) { } - - - public override IRelationType Build() - { - var alias = _alias ?? Guid.NewGuid().ToString(); - var name = _name ?? Guid.NewGuid().ToString(); - var parentObjectType = _parentObjectType ?? Guid.NewGuid(); - var childObjectType = _childObjectType ?? Guid.NewGuid(); - var id = _id ?? 1; - - return new RelationType(name, alias, false, parentObjectType, - childObjectType) - { - Id = id - }; - } - - int? IWithIdBuilder.Id - { - get => _id; - set => _id = value; - } string IWithAliasBuilder.Alias { @@ -52,10 +42,82 @@ namespace Umbraco.Tests.Shared.Builders set => _alias = value; } + DateTime? IWithCreateDateBuilder.CreateDate + { + get => _createDate; + set => _createDate = value; + } + + DateTime? IWithDeleteDateBuilder.DeleteDate + { + get => _deleteDate; + set => _deleteDate = value; + } + + 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? IWithUpdateDateBuilder.UpdateDate + { + get => _updateDate; + set => _updateDate = value; + } + + public override IRelationType Build() + { + var alias = _alias ?? Guid.NewGuid().ToString(); + var name = _name ?? Guid.NewGuid().ToString(); + var parentObjectType = _parentObjectType ?? null; + var childObjectType = _childObjectType ?? null; + var id = _id ?? 1; + var key = _key ?? Guid.NewGuid(); + var isBidirectional = _isBidirectional ?? false; + var createDate = _createDate ?? DateTime.Now; + var updateDate = _updateDate ?? DateTime.Now; + var deleteDate = _deleteDate ?? null; + + return new RelationType(name, alias, isBidirectional, parentObjectType, + childObjectType) + { + Id = id, + Key = key, + CreateDate = createDate, + UpdateDate = updateDate, + DeleteDate = deleteDate + }; + } + + public RelationTypeBuilder WithIsBidirectional(bool isBidirectional) + { + _isBidirectional = isBidirectional; + return this; + } + + public RelationTypeBuilder WithChildObjectType(Guid childObjectType) + { + _childObjectType = childObjectType; + return this; + } + + public RelationTypeBuilder WithParentObjectType(Guid parentObjectType) + { + _parentObjectType = parentObjectType; + return this; + } } } diff --git a/src/Umbraco.Tests.Shared/Umbraco.Tests.Shared.csproj b/src/Umbraco.Tests.Shared/Umbraco.Tests.Shared.csproj index 93afb6f531..d18779a4fd 100644 --- a/src/Umbraco.Tests.Shared/Umbraco.Tests.Shared.csproj +++ b/src/Umbraco.Tests.Shared/Umbraco.Tests.Shared.csproj @@ -18,6 +18,7 @@ + diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/LanguageTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/LanguageTests.cs index 57ed20310a..6d80eac16f 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/LanguageTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/LanguageTests.cs @@ -2,6 +2,7 @@ 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 { diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs index 4054f9d992..140b974b61 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using System; +using Newtonsoft.Json; using NUnit.Framework; using Umbraco.Core.Models; using Umbraco.Tests.Shared.Builders; @@ -13,7 +14,10 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models [Test] public void Can_Deep_Clone() { - var item = _builder.Build(); + var item = _builder + .WithParentObjectType(Guid.NewGuid()) + .WithChildObjectType(Guid.NewGuid()) + .Build(); var clone = (RelationType) item.DeepClone(); @@ -21,11 +25,13 @@ namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models Assert.AreEqual(clone, item); Assert.AreEqual(clone.Alias, item.Alias); Assert.AreEqual(clone.ChildObjectType, item.ChildObjectType); + Assert.AreEqual(clone.ParentObjectType, item.ParentObjectType); Assert.AreEqual(clone.IsBidirectional, item.IsBidirectional); 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.UpdateDate, item.UpdateDate); //This double verifies by reflection From 8c8a9764cd7a88cea3ed3aea2c2193b96c90eee0 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Wed, 18 Mar 2020 07:42:35 +0100 Subject: [PATCH 11/12] Post merge + Added new SmtpSettingsBuilder --- .../Builders/BuilderBase.cs | 2 +- .../Builders/ChildBuilderBase.cs | 2 +- .../Builders/ConfigurationEditorBuilder.cs | 2 +- .../Builders/DataEditorBuilder.cs | 2 +- .../Builders/DataTypeBuilder.cs | 4 +- .../Builders/DataValueEditorBuilder.cs | 2 +- .../Builders/DictionaryItemBuilder.cs | 4 +- .../Builders/DictionaryTranslationBuilder.cs | 4 +- .../Builders/Extensions/BuilderExtensions.cs | 4 +- .../Builders/GlobalSettingsBuilder.cs | 31 +++- .../Builders/Interfaces/IWithAliasBuilder.cs | 2 +- .../Interfaces/IWithCreateDateBuilder.cs | 2 +- .../Interfaces/IWithCultureInfoBuilder.cs | 2 +- .../Interfaces/IWithDeleteDateBuilder.cs | 2 +- .../Builders/Interfaces/IWithIdBuilder.cs | 2 +- .../Builders/Interfaces/IWithKeyBuilder.cs | 2 +- .../Builders/Interfaces/IWithNameBuilder.cs | 2 +- .../Interfaces/IWithUpdateDateBuilder.cs | 2 +- .../Builders/LanguageBuilder.cs | 4 +- .../Builders/RelationTypeBuilder.cs | 4 +- .../Builders/SmtpSettingsBuilder.cs | 73 ++++++++++ .../Umbraco.Tests.Shared.csproj | 4 - .../Models/DataTypeTests.cs | 5 +- .../Models/DictionaryItemTests.cs | 2 +- .../Models/LanguageTests.cs | 3 +- .../Models/RelationTypeTests.cs | 2 +- .../Umbraco.Tests.UnitTests.csproj | 13 +- src/Umbraco.Tests/Models/DataTypeTests.cs | 85 ----------- .../Models/DictionaryItemTests.cs | 137 ------------------ src/Umbraco.Tests/Models/LanguageTests.cs | 66 --------- src/Umbraco.Tests/Models/RelationTypeTests.cs | 64 -------- src/Umbraco.Tests/Umbraco.Tests.csproj | 4 - src/Umbraco.Web.UI.Client/package-lock.json | 64 ++++---- src/umbraco.sln | 7 - 34 files changed, 163 insertions(+), 447 deletions(-) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/BuilderBase.cs (69%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/ChildBuilderBase.cs (89%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/ConfigurationEditorBuilder.cs (95%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/DataEditorBuilder.cs (98%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/DataTypeBuilder.cs (98%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/DataValueEditorBuilder.cs (97%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/DictionaryItemBuilder.cs (97%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/DictionaryTranslationBuilder.cs (96%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/Extensions/BuilderExtensions.cs (92%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/GlobalSettingsBuilder.cs (86%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/Interfaces/IWithAliasBuilder.cs (62%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/Interfaces/IWithCreateDateBuilder.cs (69%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/Interfaces/IWithCultureInfoBuilder.cs (73%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/Interfaces/IWithDeleteDateBuilder.cs (69%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/Interfaces/IWithIdBuilder.cs (61%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/Interfaces/IWithKeyBuilder.cs (66%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/Interfaces/IWithNameBuilder.cs (61%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/Interfaces/IWithUpdateDateBuilder.cs (69%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/LanguageBuilder.cs (97%) rename src/{Umbraco.Tests.Shared => Umbraco.Tests.Common}/Builders/RelationTypeBuilder.cs (97%) create mode 100644 src/Umbraco.Tests.Common/Builders/SmtpSettingsBuilder.cs delete mode 100644 src/Umbraco.Tests/Models/DataTypeTests.cs delete mode 100644 src/Umbraco.Tests/Models/DictionaryItemTests.cs delete mode 100644 src/Umbraco.Tests/Models/LanguageTests.cs delete mode 100644 src/Umbraco.Tests/Models/RelationTypeTests.cs diff --git a/src/Umbraco.Tests.Shared/Builders/BuilderBase.cs b/src/Umbraco.Tests.Common/Builders/BuilderBase.cs similarity index 69% rename from src/Umbraco.Tests.Shared/Builders/BuilderBase.cs rename to src/Umbraco.Tests.Common/Builders/BuilderBase.cs index d026999351..d8fc048d1b 100644 --- a/src/Umbraco.Tests.Shared/Builders/BuilderBase.cs +++ b/src/Umbraco.Tests.Common/Builders/BuilderBase.cs @@ -1,4 +1,4 @@ -namespace Umbraco.Tests.Shared.Builders +namespace Umbraco.Tests.Common.Builders { public abstract class BuilderBase { diff --git a/src/Umbraco.Tests.Shared/Builders/ChildBuilderBase.cs b/src/Umbraco.Tests.Common/Builders/ChildBuilderBase.cs similarity index 89% rename from src/Umbraco.Tests.Shared/Builders/ChildBuilderBase.cs rename to src/Umbraco.Tests.Common/Builders/ChildBuilderBase.cs index 742b86d16e..e1436ac1fe 100644 --- a/src/Umbraco.Tests.Shared/Builders/ChildBuilderBase.cs +++ b/src/Umbraco.Tests.Common/Builders/ChildBuilderBase.cs @@ -1,4 +1,4 @@ -namespace Umbraco.Tests.Shared.Builders +namespace Umbraco.Tests.Common.Builders { public abstract class ChildBuilderBase : BuilderBase { diff --git a/src/Umbraco.Tests.Shared/Builders/ConfigurationEditorBuilder.cs b/src/Umbraco.Tests.Common/Builders/ConfigurationEditorBuilder.cs similarity index 95% rename from src/Umbraco.Tests.Shared/Builders/ConfigurationEditorBuilder.cs rename to src/Umbraco.Tests.Common/Builders/ConfigurationEditorBuilder.cs index 3abf683bf2..7789090d16 100644 --- a/src/Umbraco.Tests.Shared/Builders/ConfigurationEditorBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/ConfigurationEditorBuilder.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using Umbraco.Core.PropertyEditors; -namespace Umbraco.Tests.Shared.Builders +namespace Umbraco.Tests.Common.Builders { public class ConfigurationEditorBuilder : ChildBuilderBase { diff --git a/src/Umbraco.Tests.Shared/Builders/DataEditorBuilder.cs b/src/Umbraco.Tests.Common/Builders/DataEditorBuilder.cs similarity index 98% rename from src/Umbraco.Tests.Shared/Builders/DataEditorBuilder.cs rename to src/Umbraco.Tests.Common/Builders/DataEditorBuilder.cs index 0a9e94a74e..b3c3ff1b7e 100644 --- a/src/Umbraco.Tests.Shared/Builders/DataEditorBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/DataEditorBuilder.cs @@ -5,7 +5,7 @@ using Umbraco.Core.PropertyEditors; using Umbraco.Core.Services; using Umbraco.Core.Strings; -namespace Umbraco.Tests.Shared.Builders +namespace Umbraco.Tests.Common.Builders { public class DataEditorBuilder : ChildBuilderBase { diff --git a/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs b/src/Umbraco.Tests.Common/Builders/DataTypeBuilder.cs similarity index 98% rename from src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs rename to src/Umbraco.Tests.Common/Builders/DataTypeBuilder.cs index 62e9e35ee0..20dc1bab81 100644 --- a/src/Umbraco.Tests.Shared/Builders/DataTypeBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/DataTypeBuilder.cs @@ -1,8 +1,8 @@ using System; using Umbraco.Core.Models; -using Umbraco.Tests.Shared.Builders.Interfaces; +using Umbraco.Tests.Common.Builders.Interfaces; -namespace Umbraco.Tests.Shared.Builders +namespace Umbraco.Tests.Common.Builders { public class DataTypeBuilder : BuilderBase, diff --git a/src/Umbraco.Tests.Shared/Builders/DataValueEditorBuilder.cs b/src/Umbraco.Tests.Common/Builders/DataValueEditorBuilder.cs similarity index 97% rename from src/Umbraco.Tests.Shared/Builders/DataValueEditorBuilder.cs rename to src/Umbraco.Tests.Common/Builders/DataValueEditorBuilder.cs index be26510934..3d0b518ee7 100644 --- a/src/Umbraco.Tests.Shared/Builders/DataValueEditorBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/DataValueEditorBuilder.cs @@ -4,7 +4,7 @@ using Umbraco.Core.PropertyEditors; using Umbraco.Core.Services; using Umbraco.Core.Strings; -namespace Umbraco.Tests.Shared.Builders +namespace Umbraco.Tests.Common.Builders { public class DataValueEditorBuilder : ChildBuilderBase { diff --git a/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs b/src/Umbraco.Tests.Common/Builders/DictionaryItemBuilder.cs similarity index 97% rename from src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs rename to src/Umbraco.Tests.Common/Builders/DictionaryItemBuilder.cs index 6baff80972..206bccba80 100644 --- a/src/Umbraco.Tests.Shared/Builders/DictionaryItemBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/DictionaryItemBuilder.cs @@ -2,9 +2,9 @@ using System; using System.Collections.Generic; using System.Linq; using Umbraco.Core.Models; -using Umbraco.Tests.Shared.Builders.Interfaces; +using Umbraco.Tests.Common.Builders.Interfaces; -namespace Umbraco.Tests.Shared.Builders +namespace Umbraco.Tests.Common.Builders { public class DictionaryItemBuilder : BuilderBase, diff --git a/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs b/src/Umbraco.Tests.Common/Builders/DictionaryTranslationBuilder.cs similarity index 96% rename from src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs rename to src/Umbraco.Tests.Common/Builders/DictionaryTranslationBuilder.cs index bd596383d1..37fb7c5b07 100644 --- a/src/Umbraco.Tests.Shared/Builders/DictionaryTranslationBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/DictionaryTranslationBuilder.cs @@ -1,8 +1,8 @@ using System; using Umbraco.Core.Models; -using Umbraco.Tests.Shared.Builders.Interfaces; +using Umbraco.Tests.Common.Builders.Interfaces; -namespace Umbraco.Tests.Shared.Builders +namespace Umbraco.Tests.Common.Builders { public class DictionaryTranslationBuilder : ChildBuilderBase, diff --git a/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs b/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs similarity index 92% rename from src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs rename to src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs index 702bb19bb2..c8f3f80bf1 100644 --- a/src/Umbraco.Tests.Shared/Builders/Extensions/BuilderExtensions.cs +++ b/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs @@ -1,7 +1,7 @@ using System; -using Umbraco.Tests.Shared.Builders.Interfaces; +using Umbraco.Tests.Common.Builders.Interfaces; -namespace Umbraco.Tests.Shared.Builders.Extensions +namespace Umbraco.Tests.Common.Builders.Extensions { public static class BuilderExtensions { diff --git a/src/Umbraco.Tests.Shared/Builders/GlobalSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/GlobalSettingsBuilder.cs similarity index 86% rename from src/Umbraco.Tests.Shared/Builders/GlobalSettingsBuilder.cs rename to src/Umbraco.Tests.Common/Builders/GlobalSettingsBuilder.cs index b3c8e90fa5..56e242146c 100644 --- a/src/Umbraco.Tests.Shared/Builders/GlobalSettingsBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/GlobalSettingsBuilder.cs @@ -1,6 +1,6 @@ using Umbraco.Core.Configuration; -namespace Umbraco.Tests.Shared.Builders +namespace Umbraco.Tests.Common.Builders { public class GlobalSettingsBuilder : GlobalSettingsBuilder { @@ -10,7 +10,6 @@ namespace Umbraco.Tests.Shared.Builders } public class GlobalSettingsBuilder : ChildBuilderBase - { private string _configurationStatus; private string _databaseFactoryServerVersion; @@ -29,14 +28,20 @@ namespace Umbraco.Tests.Shared.Builders private string _umbracoMediaPath; private string _umbracoPath; private string _umbracoScriptsPath; + private string _mainDomLock; + private string _noNodesViewPath; private bool? _useHttps; private int? _versionCheckPeriod; + private readonly SmtpSettingsBuilder> _smtpSettingsBuilder; public GlobalSettingsBuilder(TParent parentBuilder) : base(parentBuilder) { + _smtpSettingsBuilder = new SmtpSettingsBuilder>(this); } + public SmtpSettingsBuilder> AddSmtpSettings() => _smtpSettingsBuilder; + public GlobalSettingsBuilder WithConfigurationStatus(string configurationStatus) { _configurationStatus = configurationStatus; @@ -139,6 +144,17 @@ namespace Umbraco.Tests.Shared.Builders return this; } + public GlobalSettingsBuilder WithMainDomLock(string mainDomLock) + { + _mainDomLock = mainDomLock; + return this; + } + + public GlobalSettingsBuilder WithNoNodesViewPath(string noNodesViewPath) + { + _noNodesViewPath = noNodesViewPath; + return this; + } public GlobalSettingsBuilder WithVersionCheckPeriod(int versionCheckPeriod) { _versionCheckPeriod = versionCheckPeriod; @@ -172,6 +188,9 @@ namespace Umbraco.Tests.Shared.Builders var umbracoScriptsPath = _umbracoScriptsPath ?? "~/scripts"; var versionCheckPeriod = _versionCheckPeriod ?? 0; var timeOutInMinutes = _timeOutInMinutes ?? 20; + var smtpSettings = _smtpSettingsBuilder.Build(); + var mainDomLock = _mainDomLock ?? string.Empty; + var noNodesViewPath = _noNodesViewPath ?? "~/config/splashes/NoNodes.cshtml"; return new TestGlobalSettings @@ -194,7 +213,10 @@ namespace Umbraco.Tests.Shared.Builders UmbracoMediaPath = umbracoMediaPath, UmbracoScriptsPath = umbracoScriptsPath, VersionCheckPeriod = versionCheckPeriod, - TimeOutInMinutes = timeOutInMinutes + TimeOutInMinutes = timeOutInMinutes, + SmtpSettings = smtpSettings, + MainDomLock = mainDomLock, + NoNodesViewPath = noNodesViewPath, }; } @@ -214,11 +236,14 @@ namespace Umbraco.Tests.Shared.Builders public string UmbracoScriptsPath { get; set; } public string UmbracoMediaPath { get; set; } public bool IsSmtpServerConfigured { get; set; } + public ISmtpSettings SmtpSettings { get; set; } public bool InstallMissingDatabase { get; set; } public bool InstallEmptyDatabase { get; set; } public bool DisableElectionForSingleServer { get; set; } public string RegisterType { get; set; } public string DatabaseFactoryServerVersion { get; set; } + public string MainDomLock { get; set; } + public string NoNodesViewPath { get; set; } } } } diff --git a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithAliasBuilder.cs b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithAliasBuilder.cs similarity index 62% rename from src/Umbraco.Tests.Shared/Builders/Interfaces/IWithAliasBuilder.cs rename to src/Umbraco.Tests.Common/Builders/Interfaces/IWithAliasBuilder.cs index 3ab70123f4..78bbbddec9 100644 --- a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithAliasBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithAliasBuilder.cs @@ -1,4 +1,4 @@ -namespace Umbraco.Tests.Shared.Builders.Interfaces +namespace Umbraco.Tests.Common.Builders.Interfaces { public interface IWithAliasBuilder { diff --git a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithCreateDateBuilder.cs b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithCreateDateBuilder.cs similarity index 69% rename from src/Umbraco.Tests.Shared/Builders/Interfaces/IWithCreateDateBuilder.cs rename to src/Umbraco.Tests.Common/Builders/Interfaces/IWithCreateDateBuilder.cs index 7a7b69fc95..47acaa9a52 100644 --- a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithCreateDateBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithCreateDateBuilder.cs @@ -1,6 +1,6 @@ using System; -namespace Umbraco.Tests.Shared.Builders.Interfaces +namespace Umbraco.Tests.Common.Builders.Interfaces { public interface IWithCreateDateBuilder { diff --git a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithCultureInfoBuilder.cs b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithCultureInfoBuilder.cs similarity index 73% rename from src/Umbraco.Tests.Shared/Builders/Interfaces/IWithCultureInfoBuilder.cs rename to src/Umbraco.Tests.Common/Builders/Interfaces/IWithCultureInfoBuilder.cs index ee33d4549d..a60fe3c23c 100644 --- a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithCultureInfoBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithCultureInfoBuilder.cs @@ -1,6 +1,6 @@ using System.Globalization; -namespace Umbraco.Tests.Shared.Builders.Interfaces +namespace Umbraco.Tests.Common.Builders.Interfaces { public interface IWithCultureInfoBuilder { diff --git a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithDeleteDateBuilder.cs b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithDeleteDateBuilder.cs similarity index 69% rename from src/Umbraco.Tests.Shared/Builders/Interfaces/IWithDeleteDateBuilder.cs rename to src/Umbraco.Tests.Common/Builders/Interfaces/IWithDeleteDateBuilder.cs index 3ae8ddfeed..0fdeb6d69d 100644 --- a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithDeleteDateBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithDeleteDateBuilder.cs @@ -1,6 +1,6 @@ using System; -namespace Umbraco.Tests.Shared.Builders.Interfaces +namespace Umbraco.Tests.Common.Builders.Interfaces { public interface IWithDeleteDateBuilder { diff --git a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithIdBuilder.cs b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithIdBuilder.cs similarity index 61% rename from src/Umbraco.Tests.Shared/Builders/Interfaces/IWithIdBuilder.cs rename to src/Umbraco.Tests.Common/Builders/Interfaces/IWithIdBuilder.cs index a5a6175d8f..c13343df15 100644 --- a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithIdBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithIdBuilder.cs @@ -1,4 +1,4 @@ -namespace Umbraco.Tests.Shared.Builders.Interfaces +namespace Umbraco.Tests.Common.Builders.Interfaces { public interface IWithIdBuilder { diff --git a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithKeyBuilder.cs b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithKeyBuilder.cs similarity index 66% rename from src/Umbraco.Tests.Shared/Builders/Interfaces/IWithKeyBuilder.cs rename to src/Umbraco.Tests.Common/Builders/Interfaces/IWithKeyBuilder.cs index 78da4dbc0b..a71bd2d114 100644 --- a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithKeyBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithKeyBuilder.cs @@ -1,6 +1,6 @@ using System; -namespace Umbraco.Tests.Shared.Builders.Interfaces +namespace Umbraco.Tests.Common.Builders.Interfaces { public interface IWithKeyBuilder { diff --git a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithNameBuilder.cs b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithNameBuilder.cs similarity index 61% rename from src/Umbraco.Tests.Shared/Builders/Interfaces/IWithNameBuilder.cs rename to src/Umbraco.Tests.Common/Builders/Interfaces/IWithNameBuilder.cs index 2ddcf65333..d2ccb8dbbc 100644 --- a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithNameBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithNameBuilder.cs @@ -1,4 +1,4 @@ -namespace Umbraco.Tests.Shared.Builders.Interfaces +namespace Umbraco.Tests.Common.Builders.Interfaces { public interface IWithNameBuilder { diff --git a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithUpdateDateBuilder.cs b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithUpdateDateBuilder.cs similarity index 69% rename from src/Umbraco.Tests.Shared/Builders/Interfaces/IWithUpdateDateBuilder.cs rename to src/Umbraco.Tests.Common/Builders/Interfaces/IWithUpdateDateBuilder.cs index 88a23d0275..80a5aa4f61 100644 --- a/src/Umbraco.Tests.Shared/Builders/Interfaces/IWithUpdateDateBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithUpdateDateBuilder.cs @@ -1,6 +1,6 @@ using System; -namespace Umbraco.Tests.Shared.Builders.Interfaces +namespace Umbraco.Tests.Common.Builders.Interfaces { public interface IWithUpdateDateBuilder { diff --git a/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs b/src/Umbraco.Tests.Common/Builders/LanguageBuilder.cs similarity index 97% rename from src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs rename to src/Umbraco.Tests.Common/Builders/LanguageBuilder.cs index 59e859dd3a..ae60920c9c 100644 --- a/src/Umbraco.Tests.Shared/Builders/LanguageBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/LanguageBuilder.cs @@ -3,9 +3,9 @@ using System.Globalization; using Moq; using Umbraco.Core.Configuration; using Umbraco.Core.Models; -using Umbraco.Tests.Shared.Builders.Interfaces; +using Umbraco.Tests.Common.Builders.Interfaces; -namespace Umbraco.Tests.Shared.Builders +namespace Umbraco.Tests.Common.Builders { public class LanguageBuilder : LanguageBuilder { diff --git a/src/Umbraco.Tests.Shared/Builders/RelationTypeBuilder.cs b/src/Umbraco.Tests.Common/Builders/RelationTypeBuilder.cs similarity index 97% rename from src/Umbraco.Tests.Shared/Builders/RelationTypeBuilder.cs rename to src/Umbraco.Tests.Common/Builders/RelationTypeBuilder.cs index 2cb81688b7..4ad39c6641 100644 --- a/src/Umbraco.Tests.Shared/Builders/RelationTypeBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/RelationTypeBuilder.cs @@ -1,8 +1,8 @@ using System; using Umbraco.Core.Models; -using Umbraco.Tests.Shared.Builders.Interfaces; +using Umbraco.Tests.Common.Builders.Interfaces; -namespace Umbraco.Tests.Shared.Builders +namespace Umbraco.Tests.Common.Builders { public class RelationTypeBuilder : RelationTypeBuilder { diff --git a/src/Umbraco.Tests.Common/Builders/SmtpSettingsBuilder.cs b/src/Umbraco.Tests.Common/Builders/SmtpSettingsBuilder.cs new file mode 100644 index 0000000000..3120cc95f6 --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/SmtpSettingsBuilder.cs @@ -0,0 +1,73 @@ +using Umbraco.Core.Configuration; + +namespace Umbraco.Tests.Common.Builders +{ + public class SmtpSettingsBuilder : SmtpSettingsBuilder + { + public SmtpSettingsBuilder() : base(null) + { + } + } + + public class SmtpSettingsBuilder + : ChildBuilderBase + { + private string _from; + private string _host; + private int? _port; + private string _pickupDirectoryLocation; + + public SmtpSettingsBuilder(TParent parentBuilder) : base(parentBuilder) + { + } + + public SmtpSettingsBuilder WithFrom(string from) + { + _from = from; + return this; + } + + public SmtpSettingsBuilder WithHost(string host) + { + _host = host; + return this; + } + + public SmtpSettingsBuilder WithPost(int port) + { + _port = port; + return this; + } + + public SmtpSettingsBuilder WithPickupDirectoryLocation(string pickupDirectoryLocation) + { + _pickupDirectoryLocation = pickupDirectoryLocation; + return this; + } + + + public override ISmtpSettings Build() + { + var from = _from ?? null; + var host = _host ?? null; + var port = _port ?? 25; + var pickupDirectoryLocation = _pickupDirectoryLocation ?? null; + + return new TestSmtpSettings() + { + From = from, + Host = host, + Port = port, + PickupDirectoryLocation = pickupDirectoryLocation, + }; + } + + private class TestSmtpSettings : ISmtpSettings + { + public string From { get; set; } + public string Host { get; set; } + public int Port { get; set; } + public string PickupDirectoryLocation { get; set; } + } + } +} diff --git a/src/Umbraco.Tests.Shared/Umbraco.Tests.Shared.csproj b/src/Umbraco.Tests.Shared/Umbraco.Tests.Shared.csproj index d18779a4fd..43cd79bd6e 100644 --- a/src/Umbraco.Tests.Shared/Umbraco.Tests.Shared.csproj +++ b/src/Umbraco.Tests.Shared/Umbraco.Tests.Shared.csproj @@ -27,8 +27,4 @@ - - - - diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs index ce984b3a79..a097661a93 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DataTypeTests.cs @@ -1,8 +1,9 @@ using Newtonsoft.Json; using NUnit.Framework; using Umbraco.Core.Models; -using Umbraco.Tests.Shared.Builders; -using Umbraco.Tests.Shared.Builders.Extensions; +using Umbraco.Tests.Common.Builders; +using Umbraco.Tests.Common.Builders.Extensions; + namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models { diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs index 85c0e56089..28878a2463 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/DictionaryItemTests.cs @@ -2,7 +2,7 @@ using System.Linq; using Newtonsoft.Json; using NUnit.Framework; using Umbraco.Core.Models; -using Umbraco.Tests.Shared.Builders; +using Umbraco.Tests.Common.Builders; namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models { diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/LanguageTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/LanguageTests.cs index 6d80eac16f..bb82e69fa6 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/LanguageTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/LanguageTests.cs @@ -1,8 +1,7 @@ using Newtonsoft.Json; using NUnit.Framework; using Umbraco.Core.Models; -using Umbraco.Tests.Shared.Builders; -using Umbraco.Tests.Shared.Builders.Extensions; +using Umbraco.Tests.Common.Builders; namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models { diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs index 140b974b61..29ad8251cc 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Models/RelationTypeTests.cs @@ -2,7 +2,7 @@ using Newtonsoft.Json; using NUnit.Framework; using Umbraco.Core.Models; -using Umbraco.Tests.Shared.Builders; +using Umbraco.Tests.Common.Builders; namespace Umbraco.Tests.UnitTests.Umbraco.Infrastructure.Models { diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj index 8dad14e747..37ad3cae82 100644 --- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj @@ -1,7 +1,9 @@  - netcoreapp2.1 + Exe + netcoreapp3.1 + false @@ -18,17 +20,14 @@ + - + - - - - - + diff --git a/src/Umbraco.Tests/Models/DataTypeTests.cs b/src/Umbraco.Tests/Models/DataTypeTests.cs deleted file mode 100644 index fe8a26e431..0000000000 --- a/src/Umbraco.Tests/Models/DataTypeTests.cs +++ /dev/null @@ -1,85 +0,0 @@ -using System; -using System.Diagnostics; -using Moq; -using Newtonsoft.Json; -using NUnit.Framework; -using Umbraco.Core.Logging; -using Umbraco.Core.Models; -using Umbraco.Core.PropertyEditors; -using Umbraco.Core.Serialization; -using Umbraco.Core.Services; -using Umbraco.Core.Strings; - -namespace Umbraco.Tests.Models -{ - [TestFixture] - public class DataTypeTests - { - [Test] - public void Can_Deep_Clone() - { - var dtd = new DataType(new VoidEditor(Mock.Of(), Mock.Of(), Mock.Of(),Mock.Of(), Mock.Of()), 9) - { - CreateDate = DateTime.Now, - CreatorId = 5, - DatabaseType = ValueStorageType.Nvarchar, - Id = 4, - Key = Guid.NewGuid(), - Level = 7, - Name = "Test", - ParentId = 9, - Path = "-1,2", - SortOrder = 8, - Trashed = true, - UpdateDate = DateTime.Now - }; - 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 dtd = new DataType(new VoidEditor(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of(),Mock.Of()), 9) - { - CreateDate = DateTime.Now, - CreatorId = 5, - DatabaseType = ValueStorageType.Nvarchar, - Id = 4, - Key = Guid.NewGuid(), - Level = 7, - Name = "Test", - ParentId = 9, - Path = "-1,2", - SortOrder = 8, - Trashed = true, - UpdateDate = DateTime.Now - }; - - var json = JsonConvert.SerializeObject(dtd); - Debug.Print(json); - } - - } -} diff --git a/src/Umbraco.Tests/Models/DictionaryItemTests.cs b/src/Umbraco.Tests/Models/DictionaryItemTests.cs deleted file mode 100644 index 835cfd96f1..0000000000 --- a/src/Umbraco.Tests/Models/DictionaryItemTests.cs +++ /dev/null @@ -1,137 +0,0 @@ -using System; -using System.Diagnostics; -using System.Linq; -using Newtonsoft.Json; -using NUnit.Framework; -using Umbraco.Core.Models; -using Umbraco.Core.Serialization; -using Umbraco.Tests.TestHelpers; - -namespace Umbraco.Tests.Models -{ - [TestFixture] - public class DictionaryItemTests - { - [Test] - public void Can_Deep_Clone() - { - var item = new DictionaryItem("blah") - { - CreateDate = DateTime.Now, - Id = 8, - ItemKey = "blah", - Key = Guid.NewGuid(), - ParentId = Guid.NewGuid(), - UpdateDate = DateTime.Now, - Translations = new[] - { - new DictionaryTranslation(new Language(SettingsForTests.GenerateMockGlobalSettings(),"en-AU") - { - CreateDate = DateTime.Now, - CultureName = "en", - Id = 11, - IsoCode = "AU", - Key = Guid.NewGuid(), - UpdateDate = DateTime.Now - }, "colour") - { - CreateDate = DateTime.Now, - Id = 88, - Key = Guid.NewGuid(), - UpdateDate = DateTime.Now - }, - new DictionaryTranslation(new Language(SettingsForTests.GenerateMockGlobalSettings(),"en-US") - { - CreateDate = DateTime.Now, - CultureName = "en", - Id = 12, - IsoCode = "US", - Key = Guid.NewGuid(), - UpdateDate = DateTime.Now - }, "color") - { - CreateDate = DateTime.Now, - Id = 89, - Key = Guid.NewGuid(), - UpdateDate = DateTime.Now - }, - } - }; - - var clone = (DictionaryItem)item.DeepClone(); - - Assert.AreNotSame(clone, item); - Assert.AreEqual(clone, item); - Assert.AreEqual(clone.CreateDate, item.CreateDate); - Assert.AreEqual(clone.Id, item.Id); - Assert.AreEqual(clone.ItemKey, item.ItemKey); - Assert.AreEqual(clone.Key, item.Key); - Assert.AreEqual(clone.ParentId, item.ParentId); - Assert.AreEqual(clone.UpdateDate, item.UpdateDate); - Assert.AreEqual(clone.Translations.Count(), item.Translations.Count()); - for (var i = 0; i < item.Translations.Count(); i++) - { - Assert.AreNotSame(clone.Translations.ElementAt(i), item.Translations.ElementAt(i)); - Assert.AreEqual(clone.Translations.ElementAt(i), item.Translations.ElementAt(i)); - } - - //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 DictionaryItem("blah") - { - CreateDate = DateTime.Now, - Id = 8, - ItemKey = "blah", - Key = Guid.NewGuid(), - ParentId = Guid.NewGuid(), - UpdateDate = DateTime.Now, - Translations = new[] - { - new DictionaryTranslation(new Language(SettingsForTests.GenerateMockGlobalSettings(),"en-AU") - { - CreateDate = DateTime.Now, - CultureName = "en", - Id = 11, - IsoCode = "AU", - Key = Guid.NewGuid(), - UpdateDate = DateTime.Now - }, "colour") - { - CreateDate = DateTime.Now, - Id = 88, - Key = Guid.NewGuid(), - UpdateDate = DateTime.Now - }, - new DictionaryTranslation(new Language(SettingsForTests.GenerateMockGlobalSettings(),"en-US") - { - CreateDate = DateTime.Now, - CultureName = "en", - Id = 12, - IsoCode = "US", - Key = Guid.NewGuid(), - UpdateDate = DateTime.Now - }, "color") - { - CreateDate = DateTime.Now, - Id = 89, - Key = Guid.NewGuid(), - UpdateDate = DateTime.Now - }, - } - }; - - - var json = JsonConvert.SerializeObject(item); - Debug.Print(json); - } - } -} diff --git a/src/Umbraco.Tests/Models/LanguageTests.cs b/src/Umbraco.Tests/Models/LanguageTests.cs deleted file mode 100644 index 36986d68ae..0000000000 --- a/src/Umbraco.Tests/Models/LanguageTests.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Diagnostics; -using Newtonsoft.Json; -using NUnit.Framework; -using Umbraco.Core.Configuration; -using Umbraco.Core.Models; -using Umbraco.Core.Serialization; -using Umbraco.Core.Strings; -using Umbraco.Tests.TestHelpers; - -namespace Umbraco.Tests.Models -{ - [TestFixture] - public class LanguageTests - { - private IGlobalSettings GlobalSettings { get; } = SettingsForTests.GenerateMockGlobalSettings(); - - [Test] - public void Can_Deep_Clone() - { - var item = new Language(GlobalSettings, "en-AU") - { - CreateDate = DateTime.Now, - CultureName = "AU", - Id = 11, - IsoCode = "en", - Key = Guid.NewGuid(), - UpdateDate = DateTime.Now - }; - - var clone = (Language) item.DeepClone(); - Assert.AreNotSame(clone, item); - Assert.AreEqual(clone, item); - Assert.AreEqual(clone.CreateDate, item.CreateDate); - Assert.AreEqual(clone.CultureName, item.CultureName); - Assert.AreEqual(clone.Id, item.Id); - Assert.AreEqual(clone.IsoCode, item.IsoCode); - Assert.AreEqual(clone.Key, item.Key); - 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 Language(GlobalSettings, "en-AU") - { - CreateDate = DateTime.Now, - CultureName = "AU", - Id = 11, - IsoCode = "en", - Key = Guid.NewGuid(), - UpdateDate = DateTime.Now - }; - - var json = JsonConvert.SerializeObject(item); - Debug.Print(json); - } - } -} diff --git a/src/Umbraco.Tests/Models/RelationTypeTests.cs b/src/Umbraco.Tests/Models/RelationTypeTests.cs deleted file mode 100644 index bc5572d563..0000000000 --- a/src/Umbraco.Tests/Models/RelationTypeTests.cs +++ /dev/null @@ -1,64 +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 RelationTypeTests - { - [Test] - public void Can_Deep_Clone() - { - var item = new RelationType("test", "test", false, Guid.NewGuid(), Guid.NewGuid()) - { - Id = 66, - CreateDate = DateTime.Now, - IsBidirectional = true, - Key = Guid.NewGuid(), - Name = "Test", - UpdateDate = DateTime.Now - }; - - var clone = (RelationType)item.DeepClone(); - - Assert.AreNotSame(clone, item); - Assert.AreEqual(clone, item); - Assert.AreEqual(clone.Alias, item.Alias); - Assert.AreEqual(clone.ChildObjectType, item.ChildObjectType); - Assert.AreEqual(clone.IsBidirectional, item.IsBidirectional); - 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.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 RelationType("test", "test", false, Guid.NewGuid(), Guid.NewGuid()) - { - Id = 66, - CreateDate = DateTime.Now, - IsBidirectional = true, - Key = Guid.NewGuid(), - Name = "Test", - 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 29d69db0d2..001fe7bd2f 100644 --- a/src/Umbraco.Tests/Umbraco.Tests.csproj +++ b/src/Umbraco.Tests/Umbraco.Tests.csproj @@ -297,17 +297,13 @@ - - - - diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index 2566f56244..60e70ea170 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -3775,7 +3775,7 @@ "domelementtype": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "integrity": "sha1-H4vf6R9aeAYydOgDtL3O326U+U0=", "dev": true } } @@ -4233,7 +4233,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true, "optional": true } @@ -4287,13 +4287,13 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", "dev": true }, "glob-parent": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "integrity": "sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI=", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -4321,19 +4321,19 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", "dev": true }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", "dev": true }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", "dev": true, "requires": { "ansi-regex": "^4.1.0" @@ -4833,7 +4833,7 @@ "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", "dev": true, "requires": { "fill-range": "^7.0.1" @@ -4842,7 +4842,7 @@ "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -4851,7 +4851,7 @@ "glob-parent": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "integrity": "sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI=", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -4869,13 +4869,13 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", "dev": true }, "micromatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "integrity": "sha1-T8sJmb+fvC/L3SEvbWKbmlbDklk=", "dev": true, "requires": { "braces": "^3.0.1", @@ -4885,7 +4885,7 @@ "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", "dev": true, "requires": { "is-number": "^7.0.0" @@ -5203,7 +5203,7 @@ "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", "dev": true, "requires": { "ms": "^2.1.1" @@ -5400,14 +5400,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5422,20 +5420,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -5552,8 +5547,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -5565,7 +5559,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5580,7 +5573,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5588,14 +5580,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -5614,7 +5604,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -5695,8 +5684,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -5708,7 +5696,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -5830,7 +5817,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6193,7 +6179,7 @@ "ignore": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "integrity": "sha1-hLez2+ZFUrbvDsqZ9nQ9vsbZet8=", "dev": true }, "slash": { @@ -8863,7 +8849,7 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=", "dev": true } } @@ -13046,13 +13032,13 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true }, "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=", "dev": true, "requires": { "has-flag": "^3.0.0" diff --git a/src/umbraco.sln b/src/umbraco.sln index 180f05a41e..79fa3bb7d2 100644 --- a/src/umbraco.sln +++ b/src/umbraco.sln @@ -125,8 +125,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Tests.Common", "Umb EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Tests.UnitTests", "Umbraco.Tests.UnitTests\Umbraco.Tests.UnitTests.csproj", "{9102ABDF-E537-4E46-B525-C9ED4833EED0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Umbraco.Tests.Shared", "Umbraco.Tests.Shared\Umbraco.Tests.Shared.csproj", "{58F1DFC6-5096-4B99-B57B-984F2EEDFADE}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -171,10 +169,6 @@ Global {9102ABDF-E537-4E46-B525-C9ED4833EED0}.Debug|Any CPU.Build.0 = Debug|Any CPU {9102ABDF-E537-4E46-B525-C9ED4833EED0}.Release|Any CPU.ActiveCfg = Release|Any CPU {9102ABDF-E537-4E46-B525-C9ED4833EED0}.Release|Any CPU.Build.0 = Release|Any CPU - {58F1DFC6-5096-4B99-B57B-984F2EEDFADE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {58F1DFC6-5096-4B99-B57B-984F2EEDFADE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {58F1DFC6-5096-4B99-B57B-984F2EEDFADE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {58F1DFC6-5096-4B99-B57B-984F2EEDFADE}.Release|Any CPU.Build.0 = Release|Any CPU {33085570-9BF2-4065-A9B0-A29D920D13BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {33085570-9BF2-4065-A9B0-A29D920D13BA}.Debug|Any CPU.Build.0 = Debug|Any CPU {33085570-9BF2-4065-A9B0-A29D920D13BA}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -220,7 +214,6 @@ Global {3A33ADC9-C6C0-4DB1-A613-A9AF0210DF3D} = {B5BD12C1-A454-435E-8A46-FF4A364C0382} {C7311C00-2184-409B-B506-52A5FAEA8736} = {FD962632-184C-4005-A5F3-E705D92FC645} {9102ABDF-E537-4E46-B525-C9ED4833EED0} = {B5BD12C1-A454-435E-8A46-FF4A364C0382} - {58F1DFC6-5096-4B99-B57B-984F2EEDFADE} = {B5BD12C1-A454-435E-8A46-FF4A364C0382} {FB5676ED-7A69-492C-B802-E7B24144C0FC} = {B5BD12C1-A454-435E-8A46-FF4A364C0382} {A499779C-1B3B-48A8-B551-458E582E6E96} = {B5BD12C1-A454-435E-8A46-FF4A364C0382} EndGlobalSection From 8986783cbc4a78cad9a3cbd1abe6a31c38252027 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Mon, 23 Mar 2020 14:31:21 +0100 Subject: [PATCH 12/12] Parse connection string provider --- .../Models/ConnectionStrings.cs | 43 +++++++++++++++++-- .../Models/ConnectionStringsTests.cs | 39 +++++++++++++++++ 2 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 src/Umbraco.Tests.UnitTests/Umbraco.Configuration/Models/ConnectionStringsTests.cs diff --git a/src/Umbraco.Configuration/Models/ConnectionStrings.cs b/src/Umbraco.Configuration/Models/ConnectionStrings.cs index 9fc546a88f..22a0bde571 100644 --- a/src/Umbraco.Configuration/Models/ConnectionStrings.cs +++ b/src/Umbraco.Configuration/Models/ConnectionStrings.cs @@ -1,12 +1,12 @@ using System; -using System.Linq; -using System.Text.Json.Serialization; +using System.Data.Common; using Microsoft.Extensions.Configuration; +using Umbraco.Core; using Umbraco.Core.Configuration; namespace Umbraco.Configuration.Models { - internal class ConnectionStrings : IConnectionStrings + public class ConnectionStrings : IConnectionStrings { private readonly IConfiguration _configuration; @@ -17,8 +17,43 @@ namespace Umbraco.Configuration.Models public ConfigConnectionString this[string key] { - get => new ConfigConnectionString(_configuration.GetConnectionString(key), "System.Data.SqlClient", key); + get + { + var connectionString = _configuration.GetConnectionString(key); + var provider = ParseProvider(connectionString); + return new ConfigConnectionString(connectionString, provider, key); + } set => throw new NotImplementedException(); } + + private string ParseProvider(string connectionString) + { + if (string.IsNullOrEmpty(connectionString)) + { + return null; + } + + var builder = new DbConnectionStringBuilder(); + + builder.ConnectionString = connectionString; + + if (builder.TryGetValue("Data Source", out var ds) && ds is string dataSource) + { + if (dataSource.EndsWith(".sdf")) + { + return Constants.DbProviderNames.SqlCe; + } + } + + if (builder.TryGetValue("Server", out var s) && s is string server && builder.TryGetValue("Database", out var db) && db is string database) + { + if (!string.IsNullOrEmpty(server) && !string.IsNullOrEmpty(database)) + { + return Constants.DbProviderNames.SqlServer; + } + } + + throw new ArgumentException("Cannot determine provider name from connection string", nameof(connectionString)); + } } } diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Configuration/Models/ConnectionStringsTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Configuration/Models/ConnectionStringsTests.cs new file mode 100644 index 0000000000..c5acba362b --- /dev/null +++ b/src/Umbraco.Tests.UnitTests/Umbraco.Configuration/Models/ConnectionStringsTests.cs @@ -0,0 +1,39 @@ +using Microsoft.Extensions.Configuration; +using Moq; +using NUnit.Framework; +using Umbraco.Configuration.Models; +using Umbraco.Core; + +namespace Umbraco.Tests.UnitTests.Umbraco.Configuration.Models +{ + public class ConnectionStringsTests + { + [Test] + [TestCase("", ExpectedResult = null)] + [TestCase(null, ExpectedResult = null)] + [TestCase(@"Data Source=|DataDirectory|\Umbraco.sdf;Flush Interval=1;", ExpectedResult = Constants.DbProviderNames.SqlCe)] + [TestCase(@"Server=(LocalDb)\Umbraco;Database=NetCore;Integrated Security=true", ExpectedResult = Constants.DbProviderNames.SqlServer)] + public string ParseProviderName(string connectionString) + { + var key = Constants.System.UmbracoConnectionName; + var configuration = new Mock(); + + + //This is the underlying method that is called by Configuration.GetConnectionString(string) + if (connectionString != null) + { + configuration.Setup(x => x.GetSection("ConnectionStrings")[key]).Returns(connectionString); + } + + + var connectionStrings = new ConnectionStrings(configuration.Object); + + var actual = connectionStrings[key]; + + Assert.AreEqual(connectionString, actual.ConnectionString); + Assert.AreEqual(key, actual.Name); + + return connectionStrings[key].ProviderName; + } + } +}