public async Task DeferEvents_CanDeferMultipleEvents()
{
// Arrange
var handlerFactory = new MessageHandlerRegistry();
var mediator = new Mediator(handlerFactory.MultiInstanceFactory, handlerFactory.SingleInstanceFactory);
handlerFactory.AddHandlersForEvent(new List<IEventHandler<FakeEvent>>
{
Substitute.For<HandlerDeferringMultipleEvents>(mediator),
Substitute.For<HandlerDeferringSingleEvent>(mediator),
Substitute.For<HandlerWithoutAdditionalEvents>()
});
handlerFactory.AddHandlersForEvent(new List<IEventHandler<FakeEventFromHandler>>
{
Substitute.For<DependentEventHandler>()
});
handlerFactory.AddHandlersForCommandOrQuery<ICommandHandler<TestCommand>>(new TestCommandHandler(mediator));
// Act
var result = await mediator.Send(new TestCommand { Id = 1 });
Assert.IsFalse(result.ValidationResults.Any());
// Assert
foreach (var handler in handlerFactory.GetHandlersFor<FakeEvent>())
{
handler.Received().Handle(Arg.Any<FakeEvent>()).FireAndForget();
}
foreach (var handler in handlerFactory.GetHandlersFor<FakeEventFromHandler>())
{
handler.Received().Handle(Arg.Any<FakeEventFromHandler>()).FireAndForget();
}
}