From 8448b26cb5a8bbab0d66c5de15a8543331ccf6f0 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Thu, 10 Aug 2017 22:35:06 +0200 Subject: [PATCH] Factory refactored. --- Squidex.sln.DotSettings | 1 + .../CQRS/Commands/AggregateHandler.cs | 81 +++++++++---------- .../Commands/DefaultDomainObjectRepository.cs | 21 ++--- .../CQRS/Commands/IDomainObjectRepository.cs | 2 +- .../Dispatching/ActionContextDispatcher.cs | 11 +-- .../Dispatching/ActionDispatcher.cs | 11 +-- .../Dispatching/FuncContextDispatcher.cs | 11 +-- .../Dispatching/FuncDispatcher.cs | 11 +-- .../Dispatching/Helper.cs | 22 ++--- src/Squidex/Config/Domain/WriteModule.cs | 2 +- .../CommandHandlers/ETagCommandMiddleware.cs | 2 +- .../EnrichWithActorCommandMiddleware.cs | 2 +- .../EnrichWithAppIdCommandMiddleware.cs | 2 +- .../EnrichWithSchemaIdCommandMiddleware.cs | 2 +- .../CQRS/Commands/AggregateHandlerTests.cs | 26 ++---- .../DefaultDomainObjectRepositoryTests.cs | 10 +-- 16 files changed, 91 insertions(+), 126 deletions(-) diff --git a/Squidex.sln.DotSettings b/Squidex.sln.DotSettings index c3b776133..93845309b 100644 --- a/Squidex.sln.DotSettings +++ b/Squidex.sln.DotSettings @@ -1,4 +1,5 @@  + True False True False diff --git a/src/Squidex.Infrastructure/CQRS/Commands/AggregateHandler.cs b/src/Squidex.Infrastructure/CQRS/Commands/AggregateHandler.cs index 45f3ebddb..1f8a991e8 100644 --- a/src/Squidex.Infrastructure/CQRS/Commands/AggregateHandler.cs +++ b/src/Squidex.Infrastructure/CQRS/Commands/AggregateHandler.cs @@ -10,6 +10,9 @@ using System; using System.Threading.Tasks; using Squidex.Infrastructure.CQRS.Events; +// ReSharper disable ConvertIfStatementToConditionalTernaryExpression +// ReSharper disable InvertIf + namespace Squidex.Infrastructure.CQRS.Commands { public sealed class AggregateHandler : IAggregateHandler @@ -17,16 +20,6 @@ namespace Squidex.Infrastructure.CQRS.Commands private readonly IDomainObjectRepository domainObjectRepository; private readonly IDomainObjectFactory domainObjectFactory; - public IDomainObjectRepository Repository - { - get { return domainObjectRepository; } - } - - public IDomainObjectFactory Factory - { - get { return domainObjectFactory; } - } - public AggregateHandler( IDomainObjectFactory domainObjectFactory, IDomainObjectRepository domainObjectRepository) @@ -38,44 +31,58 @@ namespace Squidex.Infrastructure.CQRS.Commands this.domainObjectRepository = domainObjectRepository; } - public async Task CreateAsync(CommandContext context, Func creator) where T : class, IAggregate + public Task CreateAsync(CommandContext context, Func creator) where T : class, IAggregate { Guard.NotNull(creator, nameof(creator)); - Guard.NotNull(context, nameof(context)); - - var aggregateCommand = GetCommand(context); - var aggregate = domainObjectFactory.CreateNew(aggregateCommand.AggregateId); - - await creator(aggregate); - await SaveAsync(aggregate); + return InvokeAsync(context, creator, false); + } - if (!context.IsCompleted) - { - context.Complete(new EntityCreatedResult(aggregate.Id, aggregate.Version)); - } + public Task UpdateAsync(CommandContext context, Func updater) where T : class, IAggregate + { + Guard.NotNull(updater, nameof(updater)); - return aggregate; + return InvokeAsync(context, updater, true); } - public async Task UpdateAsync(CommandContext context, Func updater) where T : class, IAggregate + private async Task InvokeAsync(CommandContext context, Func handler, bool isUpdate) where T : class, IAggregate { - Guard.NotNull(updater, nameof(updater)); Guard.NotNull(context, nameof(context)); var aggregateCommand = GetCommand(context); - var aggregate = await domainObjectRepository.GetByIdAsync(aggregateCommand.AggregateId, aggregateCommand.ExpectedVersion); + var aggregateObject = domainObjectFactory.CreateNew(aggregateCommand.AggregateId); - await updater(aggregate); + if (isUpdate) + { + await domainObjectRepository.LoadAsync(aggregateObject, aggregateCommand.ExpectedVersion); + } + + await handler(aggregateObject); + + var events = aggregateObject.GetUncomittedEvents(); + + foreach (var @event in events) + { + @event.SetAggregateId(aggregateObject.Id); + } + + await domainObjectRepository.SaveAsync(aggregateObject, events, Guid.NewGuid()); - await SaveAsync(aggregate); + aggregateObject.ClearUncommittedEvents(); if (!context.IsCompleted) { - context.Complete(new EntitySavedResult(aggregate.Version)); + if (isUpdate) + { + context.Complete(new EntitySavedResult(aggregateObject.Version)); + } + else + { + context.Complete(EntityCreatedResult.Create(aggregateObject.Id, aggregateObject.Version)); + } } - return aggregate; + return aggregateObject; } private static IAggregateCommand GetCommand(CommandContext context) @@ -91,19 +98,5 @@ namespace Squidex.Infrastructure.CQRS.Commands return command; } - - private async Task SaveAsync(IAggregate aggregate) - { - var events = aggregate.GetUncomittedEvents(); - - foreach (var @event in events) - { - @event.SetAggregateId(aggregate.Id); - } - - await domainObjectRepository.SaveAsync(aggregate, events, Guid.NewGuid()); - - aggregate.ClearUncommittedEvents(); - } } } diff --git a/src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectRepository.cs b/src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectRepository.cs index 6d4620d50..43d3844a5 100644 --- a/src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectRepository.cs +++ b/src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectRepository.cs @@ -17,40 +17,31 @@ namespace Squidex.Infrastructure.CQRS.Commands public sealed class DefaultDomainObjectRepository : IDomainObjectRepository { private readonly IStreamNameResolver nameResolver; - private readonly IDomainObjectFactory factory; private readonly IEventStore eventStore; private readonly EventDataFormatter formatter; - public DefaultDomainObjectRepository( - IDomainObjectFactory factory, - IEventStore eventStore, - IStreamNameResolver nameResolver, - EventDataFormatter formatter) + public DefaultDomainObjectRepository(IEventStore eventStore, IStreamNameResolver nameResolver, EventDataFormatter formatter) { - Guard.NotNull(factory, nameof(factory)); Guard.NotNull(formatter, nameof(formatter)); Guard.NotNull(eventStore, nameof(eventStore)); Guard.NotNull(nameResolver, nameof(nameResolver)); - this.factory = factory; this.formatter = formatter; this.eventStore = eventStore; this.nameResolver = nameResolver; } - public async Task GetByIdAsync(Guid id, long? expectedVersion = null) where T : class, IAggregate + public async Task LoadAsync(IAggregate domainObject, long? expectedVersion = null) { - var streamName = nameResolver.GetStreamName(typeof(T), id); + var streamName = nameResolver.GetStreamName(domainObject.GetType(), domainObject.Id); var events = await eventStore.GetEventsAsync(streamName); if (events.Count == 0) { - throw new DomainObjectNotFoundException(id.ToString(), typeof(T)); + throw new DomainObjectNotFoundException(domainObject.Id.ToString(), domainObject.GetType()); } - var domainObject = factory.CreateNew(id); - foreach (var storedEvent in events) { var envelope = ParseKnownCommand(storedEvent); @@ -63,10 +54,8 @@ namespace Squidex.Infrastructure.CQRS.Commands if (expectedVersion != null && domainObject.Version != expectedVersion.Value) { - throw new DomainObjectVersionException(id.ToString(), typeof(T), domainObject.Version, expectedVersion.Value); + throw new DomainObjectVersionException(domainObject.Id.ToString(), domainObject.GetType(), domainObject.Version, expectedVersion.Value); } - - return domainObject; } public async Task SaveAsync(IAggregate domainObject, ICollection> events, Guid commitId) diff --git a/src/Squidex.Infrastructure/CQRS/Commands/IDomainObjectRepository.cs b/src/Squidex.Infrastructure/CQRS/Commands/IDomainObjectRepository.cs index 82590593d..c6dc0ee30 100644 --- a/src/Squidex.Infrastructure/CQRS/Commands/IDomainObjectRepository.cs +++ b/src/Squidex.Infrastructure/CQRS/Commands/IDomainObjectRepository.cs @@ -15,7 +15,7 @@ namespace Squidex.Infrastructure.CQRS.Commands { public interface IDomainObjectRepository { - Task GetByIdAsync(Guid id, long? expectedVersion = null) where T : class, IAggregate; + Task LoadAsync(IAggregate domainObject, long? expectedVersion = null); Task SaveAsync(IAggregate domainObject, ICollection> events, Guid commitId); } diff --git a/src/Squidex.Infrastructure/Dispatching/ActionContextDispatcher.cs b/src/Squidex.Infrastructure/Dispatching/ActionContextDispatcher.cs index b34477641..c0dabb460 100644 --- a/src/Squidex.Infrastructure/Dispatching/ActionContextDispatcher.cs +++ b/src/Squidex.Infrastructure/Dispatching/ActionContextDispatcher.cs @@ -28,14 +28,15 @@ namespace Squidex.Infrastructure.Dispatching BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) - .Where(m => Helper.HasRightName(m, methodName)) - .Where(m => Helper.HasRightParameters(m)) - .Where(m => Helper.HasRightVoidReturn(m)) + .Where(m => + m.HasMatchingName(methodName) && + m.HasMatchingParameters() && + m.HasMatchingReturnType(typeof(void))) .Select(m => { var inputType = m.GetParameters()[0].ParameterType; - var factoryMethod = + var handler = typeof(ActionContextDispatcher) .GetMethod(nameof(Factory), BindingFlags.Static | @@ -43,7 +44,7 @@ namespace Squidex.Infrastructure.Dispatching .MakeGenericMethod(inputType) .Invoke(null, new object[] { m }); - return (inputType, factoryMethod); + return (inputType, handler); }) .ToDictionary(m => m.Item1, h => (ActionContextDelegate)h.Item2); diff --git a/src/Squidex.Infrastructure/Dispatching/ActionDispatcher.cs b/src/Squidex.Infrastructure/Dispatching/ActionDispatcher.cs index 61798cade..5663a5e52 100644 --- a/src/Squidex.Infrastructure/Dispatching/ActionDispatcher.cs +++ b/src/Squidex.Infrastructure/Dispatching/ActionDispatcher.cs @@ -28,14 +28,15 @@ namespace Squidex.Infrastructure.Dispatching BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) - .Where(m => Helper.HasRightName(m, methodName)) - .Where(m => Helper.HasRightParameters(m)) - .Where(m => Helper.HasRightVoidReturn(m)) + .Where(m => + m.HasMatchingName(methodName) && + m.HasMatchingParameters() && + m.HasMatchingReturnType(typeof(void))) .Select(m => { var inputType = m.GetParameters()[0].ParameterType; - var factoryMethod = + var handler = typeof(ActionDispatcher) .GetMethod(nameof(Factory), BindingFlags.Static | @@ -43,7 +44,7 @@ namespace Squidex.Infrastructure.Dispatching .MakeGenericMethod(inputType) .Invoke(null, new object[] { m }); - return (inputType, factoryMethod); + return (inputType, handler); }) .ToDictionary(m => m.Item1, h => (ActionDelegate)h.Item2); diff --git a/src/Squidex.Infrastructure/Dispatching/FuncContextDispatcher.cs b/src/Squidex.Infrastructure/Dispatching/FuncContextDispatcher.cs index 576392950..294488276 100644 --- a/src/Squidex.Infrastructure/Dispatching/FuncContextDispatcher.cs +++ b/src/Squidex.Infrastructure/Dispatching/FuncContextDispatcher.cs @@ -27,14 +27,15 @@ namespace Squidex.Infrastructure.Dispatching BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) - .Where(m => Helper.HasRightName(m, methodName)) - .Where(m => Helper.HasRightParameters(m)) - .Where(m => Helper.HasRightReturnType(m)) + .Where(m => + m.HasMatchingName(methodName) && + m.HasMatchingParameters() && + m.HasMatchingReturnType(typeof(TOut))) .Select(m => { var inputType = m.GetParameters()[0].ParameterType; - var factoryMethod = + var handler = typeof(FuncContextDispatcher) .GetMethod(nameof(Factory), BindingFlags.Static | @@ -42,7 +43,7 @@ namespace Squidex.Infrastructure.Dispatching .MakeGenericMethod(inputType) .Invoke(null, new object[] { m }); - return (inputType, factoryMethod); + return (inputType, handler); }) .ToDictionary(m => m.Item1, h => (FuncContextDelegate)h.Item2); diff --git a/src/Squidex.Infrastructure/Dispatching/FuncDispatcher.cs b/src/Squidex.Infrastructure/Dispatching/FuncDispatcher.cs index ee607b37b..d600e5b33 100644 --- a/src/Squidex.Infrastructure/Dispatching/FuncDispatcher.cs +++ b/src/Squidex.Infrastructure/Dispatching/FuncDispatcher.cs @@ -27,14 +27,15 @@ namespace Squidex.Infrastructure.Dispatching BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) - .Where(m => Helper.HasRightName(m, methodName)) - .Where(m => Helper.HasRightParameters(m)) - .Where(m => Helper.HasRightReturnType(m)) + .Where(m => + m.HasMatchingName(methodName) && + m.HasMatchingParameters() && + m.HasMatchingReturnType(typeof(TOut))) .Select(m => { var inputType = m.GetParameters()[0].ParameterType; - var factoryMethod = + var handler = typeof(FuncDispatcher) .GetMethod(nameof(Factory), BindingFlags.Static | @@ -42,7 +43,7 @@ namespace Squidex.Infrastructure.Dispatching .MakeGenericMethod(inputType) .Invoke(null, new object[] { m }); - return (inputType, factoryMethod); + return (inputType, handler); }) .ToDictionary(m => m.Item1, h => (FuncDelegate)h.Item2); diff --git a/src/Squidex.Infrastructure/Dispatching/Helper.cs b/src/Squidex.Infrastructure/Dispatching/Helper.cs index ebf87b328..1800cc9fd 100644 --- a/src/Squidex.Infrastructure/Dispatching/Helper.cs +++ b/src/Squidex.Infrastructure/Dispatching/Helper.cs @@ -13,34 +13,24 @@ namespace Squidex.Infrastructure.Dispatching { internal static class Helper { - public static bool HasRightName(MethodInfo method, string name) + public static bool HasMatchingName(this MethodInfo method, string name) { return string.Equals(method.Name, name, StringComparison.OrdinalIgnoreCase); } - - public static bool HasRightName(MethodInfo method) - { - return string.Equals(method.Name, "On", StringComparison.OrdinalIgnoreCase); - } - - public static bool HasRightReturnType(MethodInfo method) - { - return method.ReturnType == typeof(TOut); - } - - public static bool HasRightVoidReturn(MethodInfo method) + + public static bool HasMatchingReturnType(this MethodInfo method, Type type) { - return method.ReturnType == typeof(void); + return method.ReturnType == type; } - public static bool HasRightParameters(MethodInfo method) + public static bool HasMatchingParameters(this MethodInfo method) { var parameters = method.GetParameters(); return parameters.Length == 1 && typeof(TIn).IsAssignableFrom(parameters[0].ParameterType); } - public static bool HasRightParameters(MethodInfo method) + public static bool HasMatchingParameters(this MethodInfo method) { var parameters = method.GetParameters(); diff --git a/src/Squidex/Config/Domain/WriteModule.cs b/src/Squidex/Config/Domain/WriteModule.cs index 21b6c54fd..0192fdd6c 100644 --- a/src/Squidex/Config/Domain/WriteModule.cs +++ b/src/Squidex/Config/Domain/WriteModule.cs @@ -14,7 +14,7 @@ using Squidex.Domain.Apps.Write.Assets; using Squidex.Domain.Apps.Write.Contents; using Squidex.Domain.Apps.Write.Schemas; using Squidex.Infrastructure.CQRS.Commands; -using Squidex.Pipeline.CommandMiddlewares; +using Squidex.Pipeline.CommandHandlers; // ReSharper disable UnusedAutoPropertyAccessor.Local diff --git a/src/Squidex/Pipeline/CommandHandlers/ETagCommandMiddleware.cs b/src/Squidex/Pipeline/CommandHandlers/ETagCommandMiddleware.cs index 9552a9b7a..1d48310c3 100644 --- a/src/Squidex/Pipeline/CommandHandlers/ETagCommandMiddleware.cs +++ b/src/Squidex/Pipeline/CommandHandlers/ETagCommandMiddleware.cs @@ -13,7 +13,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Primitives; using Squidex.Infrastructure.CQRS.Commands; -namespace Squidex.Pipeline.CommandMiddlewares +namespace Squidex.Pipeline.CommandHandlers { public class ETagCommandMiddleware : ICommandMiddleware { diff --git a/src/Squidex/Pipeline/CommandHandlers/EnrichWithActorCommandMiddleware.cs b/src/Squidex/Pipeline/CommandHandlers/EnrichWithActorCommandMiddleware.cs index 92edbdf70..ff172bea3 100644 --- a/src/Squidex/Pipeline/CommandHandlers/EnrichWithActorCommandMiddleware.cs +++ b/src/Squidex/Pipeline/CommandHandlers/EnrichWithActorCommandMiddleware.cs @@ -17,7 +17,7 @@ using Squidex.Infrastructure.Security; // ReSharper disable InvertIf -namespace Squidex.Pipeline.CommandMiddlewares +namespace Squidex.Pipeline.CommandHandlers { public class EnrichWithActorCommandMiddleware : ICommandMiddleware { diff --git a/src/Squidex/Pipeline/CommandHandlers/EnrichWithAppIdCommandMiddleware.cs b/src/Squidex/Pipeline/CommandHandlers/EnrichWithAppIdCommandMiddleware.cs index d206e95bb..50a24ae94 100644 --- a/src/Squidex/Pipeline/CommandHandlers/EnrichWithAppIdCommandMiddleware.cs +++ b/src/Squidex/Pipeline/CommandHandlers/EnrichWithAppIdCommandMiddleware.cs @@ -15,7 +15,7 @@ using Squidex.Infrastructure.CQRS.Commands; // ReSharper disable InvertIf -namespace Squidex.Pipeline.CommandMiddlewares +namespace Squidex.Pipeline.CommandHandlers { public sealed class EnrichWithAppIdCommandMiddleware : ICommandMiddleware { diff --git a/src/Squidex/Pipeline/CommandHandlers/EnrichWithSchemaIdCommandMiddleware.cs b/src/Squidex/Pipeline/CommandHandlers/EnrichWithSchemaIdCommandMiddleware.cs index e1af82270..ffd1589e5 100644 --- a/src/Squidex/Pipeline/CommandHandlers/EnrichWithSchemaIdCommandMiddleware.cs +++ b/src/Squidex/Pipeline/CommandHandlers/EnrichWithSchemaIdCommandMiddleware.cs @@ -18,7 +18,7 @@ using Squidex.Infrastructure.CQRS.Commands; // ReSharper disable InvertIf -namespace Squidex.Pipeline.CommandMiddlewares +namespace Squidex.Pipeline.CommandHandlers { public sealed class EnrichWithSchemaIdCommandMiddleware : ICommandMiddleware { diff --git a/tests/Squidex.Infrastructure.Tests/CQRS/Commands/AggregateHandlerTests.cs b/tests/Squidex.Infrastructure.Tests/CQRS/Commands/AggregateHandlerTests.cs index 6b8712a56..c2cf61f7b 100644 --- a/tests/Squidex.Infrastructure.Tests/CQRS/Commands/AggregateHandlerTests.cs +++ b/tests/Squidex.Infrastructure.Tests/CQRS/Commands/AggregateHandlerTests.cs @@ -53,7 +53,6 @@ namespace Squidex.Infrastructure.CQRS.Commands private readonly Envelope event1 = new Envelope(new MyEvent()); private readonly Envelope event2 = new Envelope(new MyEvent()); private readonly CommandContext context; - private readonly MyCommand command; private readonly AggregateHandler sut; private readonly MyDomainObject domainObject; @@ -66,20 +65,7 @@ namespace Squidex.Infrastructure.CQRS.Commands .RaiseNewEvent(event1) .RaiseNewEvent(event2); - command = new MyCommand { AggregateId = domainObject.Id }; - context = new CommandContext(command); - } - - [Fact] - public void Should_provide_access_to_factory() - { - Assert.Equal(factory, sut.Factory); - } - - [Fact] - public void Should_provide_access_to_repository() - { - Assert.Equal(repository, sut.Repository); + context = new CommandContext(new MyCommand { AggregateId = domainObject.Id }); } [Fact] @@ -143,8 +129,8 @@ namespace Squidex.Infrastructure.CQRS.Commands [Fact] public async Task Update_async_should_create_domain_object_and_save() { - A.CallTo(() => repository.GetByIdAsync(command.AggregateId, null)) - .Returns(Task.FromResult(domainObject)); + A.CallTo(() => factory.CreateNew(domainObject.Id)) + .Returns(domainObject); A.CallTo(() => repository.SaveAsync(domainObject, A>>.Ignored, A.Ignored)) .Returns(TaskHelper.Done); @@ -161,14 +147,15 @@ namespace Squidex.Infrastructure.CQRS.Commands Assert.Equal(domainObject, passedDomainObject); Assert.NotNull(context.Result()); + A.CallTo(() => repository.LoadAsync(domainObject, null)).MustHaveHappened(); A.CallTo(() => repository.SaveAsync(domainObject, A>>.Ignored, A.Ignored)).MustHaveHappened(); } [Fact] public async Task Update_sync_should_create_domain_object_and_save() { - A.CallTo(() => repository.GetByIdAsync(command.AggregateId, null)) - .Returns(Task.FromResult(domainObject)); + A.CallTo(() => factory.CreateNew(domainObject.Id)) + .Returns(domainObject); A.CallTo(() => repository.SaveAsync(domainObject, A>>.Ignored, A.Ignored)) .Returns(TaskHelper.Done); @@ -183,6 +170,7 @@ namespace Squidex.Infrastructure.CQRS.Commands Assert.Equal(domainObject, passedDomainObject); Assert.NotNull(context.Result()); + A.CallTo(() => repository.LoadAsync(domainObject, null)).MustHaveHappened(); A.CallTo(() => repository.SaveAsync(domainObject, A>>.Ignored, A.Ignored)).MustHaveHappened(); } } diff --git a/tests/Squidex.Infrastructure.Tests/CQRS/Commands/DefaultDomainObjectRepositoryTests.cs b/tests/Squidex.Infrastructure.Tests/CQRS/Commands/DefaultDomainObjectRepositoryTests.cs index c5fa1507a..8492d4dba 100644 --- a/tests/Squidex.Infrastructure.Tests/CQRS/Commands/DefaultDomainObjectRepositoryTests.cs +++ b/tests/Squidex.Infrastructure.Tests/CQRS/Commands/DefaultDomainObjectRepositoryTests.cs @@ -40,7 +40,7 @@ namespace Squidex.Infrastructure.CQRS.Commands A.CallTo(() => factory.CreateNew(aggregateId)) .Returns(domainObject); - sut = new DefaultDomainObjectRepository(factory, eventStore, streamNameResolver, eventDataFormatter); + sut = new DefaultDomainObjectRepository(eventStore, streamNameResolver, eventDataFormatter); } public sealed class MyEvent : IEvent @@ -77,7 +77,7 @@ namespace Squidex.Infrastructure.CQRS.Commands A.CallTo(() => eventStore.GetEventsAsync(streamName)) .Returns(Task.FromResult>(new List())); - await Assert.ThrowsAsync(() => sut.GetByIdAsync(aggregateId)); + await Assert.ThrowsAsync(() => sut.LoadAsync(domainObject, -1)); } [Fact] @@ -103,9 +103,9 @@ namespace Squidex.Infrastructure.CQRS.Commands A.CallTo(() => eventDataFormatter.Parse(eventData2)) .Returns(new Envelope(event2)); - var result = await sut.GetByIdAsync(aggregateId); + await sut.LoadAsync(domainObject); - Assert.Equal(result.AppliedEvents, new[] { event1, event2 }); + Assert.Equal(domainObject.AppliedEvents, new[] { event1, event2 }); } [Fact] @@ -131,7 +131,7 @@ namespace Squidex.Infrastructure.CQRS.Commands A.CallTo(() => eventDataFormatter.Parse(eventData2)) .Returns(new Envelope(event2)); - await Assert.ThrowsAsync(() => sut.GetByIdAsync(aggregateId, 200)); + await Assert.ThrowsAsync(() => sut.LoadAsync(domainObject, 200)); } [Fact]