diff --git a/src/Umbraco.Tests.Common/Builders/ContentCultureInfosBuilder.cs b/src/Umbraco.Tests.Common/Builders/ContentCultureInfosBuilder.cs new file mode 100644 index 0000000000..ba99bcbcbd --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/ContentCultureInfosBuilder.cs @@ -0,0 +1,45 @@ +using System; +using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Tests.Common.Builders.Interfaces; + +namespace Umbraco.Cms.Tests.Common.Builders +{ + public class ContentCultureInfosBuilder : ChildBuilderBase, + IWithNameBuilder, + IWithDateBuilder + { + private string _name; + private string _cultureIso; + private DateTime? _date; + public ContentCultureInfosBuilder(ContentCultureInfosCollectionBuilder parentBuilder) : base(parentBuilder) + { + } + + public ContentCultureInfosBuilder WithCultureIso(string cultureIso) + { + _cultureIso = cultureIso; + return this; + } + + public override ContentCultureInfos Build() + { + var name = _name ?? Guid.NewGuid().ToString(); + var cultureIso = _cultureIso ?? "en-us"; + DateTime date = _date ?? DateTime.Now; + + return new ContentCultureInfos(cultureIso) { Name = name, Date = date }; + } + + public string Name + { + get => _name; + set => _name = value; + } + + public DateTime? Date + { + get => _date; + set => _date = value; + } + } +} diff --git a/src/Umbraco.Tests.Common/Builders/ContentCultureInfosCollectionBuilder.cs b/src/Umbraco.Tests.Common/Builders/ContentCultureInfosCollectionBuilder.cs index 2d78132142..ba1f7e357d 100644 --- a/src/Umbraco.Tests.Common/Builders/ContentCultureInfosCollectionBuilder.cs +++ b/src/Umbraco.Tests.Common/Builders/ContentCultureInfosCollectionBuilder.cs @@ -7,31 +7,30 @@ namespace Umbraco.Cms.Tests.Common.Builders { public class ContentCultureInfosCollectionBuilder : ChildBuilderBase, IBuildContentCultureInfosCollection { - private List _cultureInfos; - public ContentCultureInfosCollectionBuilder(ContentBuilder parentBuilder) : base(parentBuilder) => _cultureInfos = new List(); + private List _cultureInfosBuilders; + public ContentCultureInfosCollectionBuilder(ContentBuilder parentBuilder) : base(parentBuilder) => _cultureInfosBuilders = new List(); - // TODO: Should this again wrap *another* child builder "ContentCultureInfosBuilder"? - public ContentCultureInfosCollectionBuilder WithCultureInfo(string culture, string name, DateTime? date = null) + public ContentCultureInfosBuilder AddCultureInfos() { - if (date is null) - { - date = DateTime.Now; - } - - _cultureInfos.Add(new ContentCultureInfos(culture) { Name = name, Date = date.Value }); - return this; + var builder = new ContentCultureInfosBuilder(this); + _cultureInfosBuilders.Add(builder); + return builder; } public override ContentCultureInfosCollection Build() { - var cultureInfos = new ContentCultureInfosCollection(); - - foreach (ContentCultureInfos cultureInfo in _cultureInfos) + if (_cultureInfosBuilders.Count < 1) { - cultureInfos.AddOrUpdate(cultureInfo.Culture, cultureInfo.Name, cultureInfo.Date); + throw new InvalidOperationException("You must add at least one culture infos to the collection builder"); + } + var cultureInfosCollection = new ContentCultureInfosCollection(); + + foreach (ContentCultureInfosBuilder cultureInfosBuilder in _cultureInfosBuilders) + { + cultureInfosCollection.Add(cultureInfosBuilder.Build()); } - return cultureInfos; + return cultureInfosCollection; } } } diff --git a/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs b/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs index 872a6ac367..0ca260b2c9 100644 --- a/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs +++ b/src/Umbraco.Tests.Common/Builders/Extensions/BuilderExtensions.cs @@ -234,5 +234,11 @@ namespace Umbraco.Cms.Tests.Common.Builders.Extensions builder.PropertyValuesSegment = segment; return builder; } + + public static T WithDate(this T builder, DateTime date) where T : IWithDateBuilder + { + builder.Date = date; + return builder; + } } } diff --git a/src/Umbraco.Tests.Common/Builders/Interfaces/IWithDateBuilder.cs b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithDateBuilder.cs new file mode 100644 index 0000000000..3d1c9bddb7 --- /dev/null +++ b/src/Umbraco.Tests.Common/Builders/Interfaces/IWithDateBuilder.cs @@ -0,0 +1,9 @@ +using System; + +namespace Umbraco.Cms.Tests.Common.Builders.Interfaces +{ + public interface IWithDateBuilder + { + DateTime? Date { get; set; } + } +}