public async Task ExecuteDeferredEvents_WhenCalled_ShouldExecuteEventHandlersForEventsFiredInHandlers()
{
// Arrange
var triggerEvent = new FakeEvent { Id = 1 };
var handlerFactory = new MessageHandlerRegistry();
var mediator = new Mediator(handlerFactory.MultiInstanceFactory, handlerFactory.SingleInstanceFactory);
handlerFactory.AddHandlersForEvent(new List<IEventHandler<FakeEvent>>
{
new HandlerDeferringMultipleEvents(mediator),
new HandlerDeferringSingleEvent(mediator),
new HandlerWithoutAdditionalEvents()
});
handlerFactory.AddHandlersForEvent(new List<IEventHandler<FakeEventFromHandler>>
{
new DependentEventHandler()
});
handlerFactory.AddHandlersForEvent(new List<IEventHandler<FakeEventTwoFromHandler>>
{
_autoSubstitute.SubstituteFor<ChainedEventHandler>()
});
// Act
mediator.DeferEvent(triggerEvent);
await mediator.ExecuteDeferredEvents();
// Assert
foreach (var handler in handlerFactory.GetHandlersFor<FakeEventTwoFromHandler>())
{
handler.Received(1).Handle(Arg.Any<FakeEventTwoFromHandler>()).FireAndForget();
}
}