Browse Source

Merge branch 'master' into refactoring-no-cqrs

# Conflicts:
#	src/Squidex.Domain.Apps.Entities/Contents/ContentDomainObject.cs
#	tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs
pull/206/head
Sebastian Stehle 8 years ago
parent
commit
60cb4d01c3
  1. 21
      src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs
  2. 2
      src/Squidex.Domain.Apps.Core.Model/Contents/IdContentData.cs
  3. 8
      src/Squidex.Domain.Apps.Core.Model/Contents/NamedContentData.cs
  4. 9
      src/Squidex.Domain.Apps.Entities.MongoDb/History/MongoHistoryEventRepository.cs
  5. 6
      src/Squidex.Domain.Apps.Entities/Contents/ContentDomainObject.cs
  6. 5
      src/Squidex.Infrastructure/Commands/DomainObjectBase.cs
  7. 4
      tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/ContentDataTests.cs
  8. 9
      tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs

21
src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs

@ -31,20 +31,25 @@ namespace Squidex.Domain.Apps.Core.Contents
{
}
protected static TResult Merge<TResult>(TResult source, TResult target) where TResult : ContentData<T>
protected static TResult Merge<TResult>(TResult target, TResult source1, TResult source2) where TResult : ContentData<T>
{
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;
}
}
}

2
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()

8
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<string>.Default)
{
}
public NamedContentData MergeInto(NamedContentData target)
{
return Merge(this, target);
return Merge(new NamedContentData(), this, target);
}
public NamedContentData ToCleaned()

9
src/Squidex.Domain.Apps.Entities.MongoDb/History/MongoHistoryEventRepository.cs

@ -90,7 +90,14 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.History
entity.AppId = appEvent.AppId.Id;
entity.Version = @event.Headers.EventStreamNumber();
if (@event.Headers.Contains(CommonHeaders.SnapshotVersion))
{
entity.Version = @event.Headers.SnapshotVersion();
}
else
{
entity.Version = @event.Headers.EventStreamNumber();
}
entity.Channel = message.Channel;
entity.Message = message.Message;

6
src/Squidex.Domain.Apps.Entities/Contents/ContentDomainObject.cs

@ -71,7 +71,11 @@ namespace Squidex.Domain.Apps.Entities.Contents
if (!newData.Equals(State.Data))
{
RaiseEvent(SimpleMapper.Map(command, new ContentUpdated { Data = newData }));
var @event = SimpleMapper.Map(command, new ContentUpdated());
@event.Data = newData;
RaiseEvent(@event);
}
return this;

5
src/Squidex.Infrastructure/Commands/DomainObjectBase.cs

@ -97,6 +97,11 @@ namespace Squidex.Infrastructure.Commands
{
state.Version += events.Length;
foreach (var @event in events)
{
@event.SetSnapshotVersion(state.Version);
}
await persistence.WriteSnapshotAsync(state);
try

4
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]

9
tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs

@ -29,6 +29,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
.AddField("field2",
new ContentFieldData()
.AddValue("iv", 2));
private readonly NamedContentData patched;
private readonly Guid contentId = Guid.NewGuid();
private readonly ContentDomainObject sut = new ContentDomainObject();
@ -37,6 +38,11 @@ namespace Squidex.Domain.Apps.Entities.Contents
get { return contentId; }
}
public ContentDomainObjectTests()
{
patched = otherData.MergeInto(data);
}
[Fact]
public void Create_should_throw_exception_if_created()
{
@ -141,12 +147,13 @@ namespace Squidex.Domain.Apps.Entities.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 })
);
}

Loading…
Cancel
Save