public void WhenThereAreMultipleHandlersForACommandTheyAreAllReturned() { var handlers = _target.Filter(typeof(CommandA)); Assert.Collection(handlers, e => Assert.IsType <CommandACommandHandler>(e), e => Assert.IsType <CommandACommandHandler2>(e)); }
public void WhenIExecuteACommandItIsDispatchedToItsHandler() { var commandHandler = Substitute.For <ICommandHandler <TestCommand> >(); var actualCommandHandlerList = new ICommandHandler[] { commandHandler }; var expectedEvents = new List <IEvent> { Substitute.For <IEvent>(), Substitute.For <IEvent>() }; var expectedContextId = Guid.NewGuid(); _commandHandlerRegistry.Filter(typeof(TestCommand)).Returns(actualCommandHandlerList); var command = new TestCommand(); commandHandler.Execute(expectedContextId, command).Returns(expectedEvents); _target.Dispatch(expectedContextId, command); _repository.Received().Add(Arg.Is <IEnumerable <IEvent> >(e => ValidateEventList(expectedEvents, e.ToArray()))); }
public void Dispatch <TCommand>(Guid contextId, TCommand command) where TCommand : ICommand { var events = new List <IEvent>(); var handlers = _commandHandlerRegistry.Filter(command.GetType()); if (!handlers.Any()) { throw new EventEngineMissingCommandHandlerException(command); } foreach (var handler in handlers) { var executionMethodInfo = handler.GetType().GetMethod(nameof(ICommandHandler <ICommand> .Execute)); events.AddRange((IEnumerable <IEvent>)executionMethodInfo.Invoke(handler, new object[] { contextId, command })); } _eventStore.Add(events); }