From 6f090a41514df37022f2b6644da2b0bb4e931a1d Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Thu, 14 Dec 2017 20:03:31 +0100 Subject: [PATCH] Merging fixed. --- .../Contents/ContentData.cs | 10 +++++----- .../Contents/IdContentData.cs | 7 ++++++- .../Contents/NamedContentData.cs | 7 ++++++- .../Model/Contents/ContentDataTests.cs | 10 ++++++++-- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs b/src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs index 548a88ae3..aa1fece95 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs @@ -31,15 +31,15 @@ namespace Squidex.Domain.Apps.Core.Contents { } - protected static TResult Merge(TResult target, TResult source1, TResult source2) where TResult : ContentData + protected static TResult MergeTo(TResult target, params TResult[] sources) where TResult : ContentData { - if (ReferenceEquals(source1, source2)) + Guard.NotEmpty(sources, nameof(sources)); + + if (sources.Length == 1 || sources.Skip(1).All(x => ReferenceEquals(x, sources[0]))) { - return source1; + return sources[0]; } - var sources = new[] { source1, source2 }; - foreach (var source in sources) { foreach (var otherValue in source) diff --git a/src/Squidex.Domain.Apps.Core.Model/Contents/IdContentData.cs b/src/Squidex.Domain.Apps.Core.Model/Contents/IdContentData.cs index e04e88310..20fbfe83f 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Contents/IdContentData.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Contents/IdContentData.cs @@ -24,9 +24,14 @@ namespace Squidex.Domain.Apps.Core.Contents { } + public static IdContentData Merge(params IdContentData[] contents) + { + return MergeTo(new IdContentData(), contents); + } + public IdContentData MergeInto(IdContentData target) { - return Merge(new IdContentData(), this, target); + return Merge(target, this); } public IdContentData ToCleaned() diff --git a/src/Squidex.Domain.Apps.Core.Model/Contents/NamedContentData.cs b/src/Squidex.Domain.Apps.Core.Model/Contents/NamedContentData.cs index e6f452d66..7318c8214 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Contents/NamedContentData.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Contents/NamedContentData.cs @@ -24,9 +24,14 @@ namespace Squidex.Domain.Apps.Core.Contents { } + public static NamedContentData Merge(params NamedContentData[] contents) + { + return MergeTo(new NamedContentData(), contents); + } + public NamedContentData MergeInto(NamedContentData target) { - return Merge(new NamedContentData(), this, target); + return Merge(target, this); } public NamedContentData ToCleaned() diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/ContentDataTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/ContentDataTests.cs index f885789a3..0eeb4b842 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/ContentDataTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/ContentDataTests.cs @@ -86,12 +86,14 @@ namespace Squidex.Domain.Apps.Core.Model.Contents .AddValue("iv", 1)) .AddField("field2", new ContentFieldData() - .AddValue("de", 2)); + .AddValue("de", 2) + .AddValue("it", 2)); var rhs = new NamedContentData() .AddField("field2", new ContentFieldData() + .AddValue("it", 3) .AddValue("en", 3)) .AddField("field3", new ContentFieldData() @@ -104,6 +106,7 @@ namespace Squidex.Domain.Apps.Core.Model.Contents .AddValue("iv", 1)) .AddField("field2", new ContentFieldData() + .AddValue("it", 2) .AddValue("de", 2) .AddValue("en", 3)) .AddField("field3", @@ -127,12 +130,14 @@ namespace Squidex.Domain.Apps.Core.Model.Contents .AddValue("iv", 1)) .AddField(2, new ContentFieldData() - .AddValue("de", 2)); + .AddValue("de", 2) + .AddValue("it", 2)); var rhs = new IdContentData() .AddField(2, new ContentFieldData() + .AddValue("it", 3) .AddValue("en", 3)) .AddField(3, new ContentFieldData() @@ -145,6 +150,7 @@ namespace Squidex.Domain.Apps.Core.Model.Contents .AddValue("iv", 1)) .AddField(2, new ContentFieldData() + .AddValue("it", 2) .AddValue("de", 2) .AddValue("en", 3)) .AddField(3,