From 3d83860f96087d2c7a232018c4b8032fbb06195d Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Wed, 13 Dec 2017 08:29:37 +0100 Subject: [PATCH] Tests and logic fixed. --- .../Contents/ContentData.cs | 21 ++++++++++++------- .../Contents/IdContentData.cs | 2 +- .../Contents/NamedContentData.cs | 8 ++++++- .../Contents/ContentDomainObject.cs | 6 +++++- .../Model/Contents/ContentDataTests.cs | 4 ++++ .../Contents/ContentDomainObjectTests.cs | 7 ++++++- 6 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs b/src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs index 81f11e599..548a88ae3 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs @@ -31,20 +31,25 @@ namespace Squidex.Domain.Apps.Core.Contents { } - protected static TResult Merge(TResult source, TResult target) where TResult : ContentData + protected static TResult Merge(TResult target, TResult source1, TResult source2) where TResult : ContentData { - if (ReferenceEquals(target, source)) + if (ReferenceEquals(source1, source2)) { - return source; + return source1; } - foreach (var otherValue in source) - { - var fieldValue = target.GetOrAdd(otherValue.Key, x => new ContentFieldData()); + var sources = new[] { source1, source2 }; - foreach (var value in otherValue.Value) + foreach (var source in sources) + { + foreach (var otherValue in source) { - fieldValue[value.Key] = value.Value; + var fieldValue = target.GetOrAdd(otherValue.Key, x => new ContentFieldData()); + + foreach (var value in otherValue.Value) + { + fieldValue[value.Key] = value.Value; + } } } diff --git a/src/Squidex.Domain.Apps.Core.Model/Contents/IdContentData.cs b/src/Squidex.Domain.Apps.Core.Model/Contents/IdContentData.cs index 524e90f82..e04e88310 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Contents/IdContentData.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Contents/IdContentData.cs @@ -26,7 +26,7 @@ namespace Squidex.Domain.Apps.Core.Contents public IdContentData MergeInto(IdContentData target) { - return Merge(this, target); + return Merge(new IdContentData(), this, target); } 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 71cc639f0..e6f452d66 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Contents/NamedContentData.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Contents/NamedContentData.cs @@ -7,6 +7,7 @@ // ========================================================================== using System; +using System.Collections.Generic; using Squidex.Infrastructure; namespace Squidex.Domain.Apps.Core.Contents @@ -18,9 +19,14 @@ namespace Squidex.Domain.Apps.Core.Contents { } + public NamedContentData(NamedContentData copy) + : base(copy, EqualityComparer.Default) + { + } + public NamedContentData MergeInto(NamedContentData target) { - return Merge(this, target); + return Merge(new NamedContentData(), this, target); } public NamedContentData ToCleaned() diff --git a/src/Squidex.Domain.Apps.Write/Contents/ContentDomainObject.cs b/src/Squidex.Domain.Apps.Write/Contents/ContentDomainObject.cs index 37a9eaf33..482f31195 100644 --- a/src/Squidex.Domain.Apps.Write/Contents/ContentDomainObject.cs +++ b/src/Squidex.Domain.Apps.Write/Contents/ContentDomainObject.cs @@ -119,7 +119,11 @@ namespace Squidex.Domain.Apps.Write.Contents if (!newData.Equals(Data)) { - RaiseEvent(SimpleMapper.Map(command, new ContentUpdated { Data = newData })); + var @event = SimpleMapper.Map(command, new ContentUpdated()); + + @event.Data = newData; + + RaiseEvent(@event); } return this; 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 f9fe1e6f8..f885789a3 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/ContentDataTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/ContentDataTests.cs @@ -113,6 +113,8 @@ namespace Squidex.Domain.Apps.Core.Model.Contents var actual = lhs.MergeInto(rhs); Assert.Equal(expected, actual); + Assert.NotSame(expected, rhs); + Assert.NotSame(expected, lhs); } [Fact] @@ -152,6 +154,8 @@ namespace Squidex.Domain.Apps.Core.Model.Contents var actual = lhs.MergeInto(rhs); Assert.Equal(expected, actual); + Assert.NotSame(expected, rhs); + Assert.NotSame(expected, lhs); } [Fact] diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentDomainObjectTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentDomainObjectTests.cs index 8f612faf7..4e0c8d538 100644 --- a/tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentDomainObjectTests.cs +++ b/tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentDomainObjectTests.cs @@ -32,10 +32,14 @@ namespace Squidex.Domain.Apps.Write.Contents new ContentFieldData() .AddValue("iv", 2)); + private readonly NamedContentData patched; + public Guid ContentId { get; } = Guid.NewGuid(); public ContentDomainObjectTests() { + patched = otherData.MergeInto(data); + sut = new ContentDomainObject(ContentId, 0); } @@ -143,12 +147,13 @@ namespace Squidex.Domain.Apps.Write.Contents public void Patch_should_create_events() { CreateContent(); + UpdateContent(); sut.Patch(CreateContentCommand(new PatchContent { Data = otherData })); sut.GetUncomittedEvents() .ShouldHaveSameEvents( - CreateContentEvent(new ContentUpdated { Data = otherData }) + CreateContentEvent(new ContentUpdated { Data = patched }) ); }