public void Publish_WithHandlersFactory_HandlerIsRunned() { // Arrange var handlerMock = A.Fake <IEventHandler <string> >(); A.CallTo(() => handlerMock.ShouldHandle(A <string> .Ignored)) .Returns(true); var eventHandlersFactory = new EventHandlersFactory(); eventHandlersFactory.Add(() => handlerMock); var handlerRunnerMock = A.Fake <IEventHandlerRunner>(); A.CallTo(() => handlerRunnerMock.Run(null)) .WithAnyArguments() .Invokes(x => ((Action[])x.Arguments.First()).First().Invoke()); var broker = new EventBroker(handlerRunnerMock, eventHandlersFactory); // Act broker.Publish("event"); // Assert A.CallTo(() => handlerRunnerMock.Run(A <Action> .Ignored)) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => handlerMock.Handle("event")) .MustHaveHappened(Repeated.Exactly.Once); }
public async Task Publish_WithHandlersFactory_HandlerIsRunned() { // Arrange var handlerMock = A.Fake <IEventHandlerAsync <string> >(); A.CallTo(() => handlerMock.ShouldHandleAsync(A <string> .Ignored)) .Returns(true); var eventHandlersFactory = new EventHandlersFactory(); eventHandlersFactory.Add(() => handlerMock); var handlerRunnerMock = A.Fake <IEventHandlerRunnerAsync>(); A.CallTo(() => handlerRunnerMock.RunAsync(null)) .WithAnyArguments() .Invokes(x => ((Func <Task>[])x.Arguments.First())[0].Invoke()); var broker = new EventBrokerAsync(handlerRunnerMock, eventHandlersFactory); // Act await broker.PublishAsync("event").ConfigureAwait(false); // Assert A.CallTo(() => handlerRunnerMock.RunAsync(A <Func <Task> > .Ignored)) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => handlerMock.HandleAsync("event")) .MustHaveHappened(Repeated.Exactly.Once); }
public void SubscribedWithHandlersFactory_ExceptionThrownDuringOnError_ExceptionIsMuted() { // Arrange var handlerMock = A.Fake <IEventHandler <string> >(); A.CallTo(() => handlerMock.ShouldHandle(A <string> .Ignored)) .Returns(true); A.CallTo(() => handlerMock.Handle(A <string> .Ignored)) .Throws <Exception>(); A.CallTo(() => handlerMock.OnError(A <Exception> .Ignored, A <string> .Ignored)) .Throws <Exception>(); var eventHandlersFactory = new EventHandlersFactory(); eventHandlersFactory.Add(() => handlerMock); var handlerRunnerMock = A.Fake <IEventHandlerRunner>(); A.CallTo(() => handlerRunnerMock.Run(null)) .WithAnyArguments() .Invokes(x => ((Action[])x.Arguments.First())[0].Invoke()); var broker = new EventBroker(handlerRunnerMock, eventHandlersFactory); // Act broker.Publish("event"); // Assert Assert.True(true); }
public async Task SubscribedWithHandlersFactory_ExceptionThrownDuringOnError_ExceptionIsMuted() { // Arrange var handlerMock = A.Fake <IEventHandlerAsync <string> >(); A.CallTo(() => handlerMock.ShouldHandleAsync(A <string> .Ignored)) .Returns(true); A.CallTo(() => handlerMock.HandleAsync(A <string> .Ignored)) .Throws <Exception>(); A.CallTo(() => handlerMock.OnErrorAsync(A <Exception> .Ignored, A <string> .Ignored)) .Throws <Exception>(); var eventHandlersFactory = new EventHandlersFactory(); eventHandlersFactory.Add(() => handlerMock); var handlerRunnerMock = A.Fake <IEventHandlerRunnerAsync>(); A.CallTo(() => handlerRunnerMock.RunAsync(null)) .WithAnyArguments() .Invokes(x => ((Func <Task>[])x.Arguments.First())[0].Invoke()); var broker = new EventBrokerAsync(handlerRunnerMock, eventHandlersFactory); // Act await broker.PublishAsync("event").ConfigureAwait(false); // Assert Assert.True(true); }
public void Publish_WithMultipleSubscribers_AllHandlersAreRunned() { // Arrange var handlerRunnerMock = A.Fake <IEventHandlerRunner>(); A.CallTo(() => handlerRunnerMock.Run(null)) .WithAnyArguments() .Invokes(x => ((Action[])x.Arguments.First()).ToList().ForEach(a => a.Invoke())); var handlerMock1 = A.Fake <IEventHandler <string> >(); A.CallTo(() => handlerMock1.ShouldHandle(A <string> .Ignored)) .Returns(true); var eventHandlersFactory = new EventHandlersFactory(); eventHandlersFactory.Add(() => handlerMock1); var broker = new EventBroker(handlerRunnerMock, eventHandlersFactory); var handlerMock2 = A.Fake <IEventHandler <string> >(); A.CallTo(() => handlerMock2.ShouldHandle(A <string> .Ignored)) .Returns(true); broker.Subscribe(handlerMock2); var handlerMock3 = A.Fake <IEventHandler <string> >(); broker.Subscribe <string>(handlerMock3.Handle); var handlerMock4 = A.Fake <IEventHandler <int> >(); broker.Subscribe(handlerMock4); // Act broker.Publish("event"); // Assert A.CallTo(() => handlerMock1.Handle("event")) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => handlerMock2.Handle("event")) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => handlerMock3.Handle("event")) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => handlerMock4.Handle(A <int> .Ignored)) .MustNotHaveHappened(); }
public async Task Publish_WithMultipleSubscribers_AllHandlersAreRunned() { // Arrange var handlerRunnerMock = A.Fake <IEventHandlerRunnerAsync>(); A.CallTo(() => handlerRunnerMock.RunAsync(null)) .WithAnyArguments() .Invokes(x => ((Func <Task>[])x.Arguments.First()).ToList().ForEach(a => a.Invoke())); var handlerMock1 = A.Fake <IEventHandlerAsync <string> >(); A.CallTo(() => handlerMock1.ShouldHandleAsync(A <string> .Ignored)) .Returns(true); var eventHandlersFactory = new EventHandlersFactory(); eventHandlersFactory.Add(() => handlerMock1); var broker = new EventBrokerAsync(handlerRunnerMock, eventHandlersFactory); var handlerMock2 = A.Fake <IEventHandlerAsync <string> >(); A.CallTo(() => handlerMock2.ShouldHandleAsync(A <string> .Ignored)) .Returns(true); broker.Subscribe(handlerMock2); var handlerMock3 = A.Fake <IEventHandlerAsync <string> >(); broker.Subscribe <string>(handlerMock3.HandleAsync); var handlerMock4 = A.Fake <IEventHandlerAsync <int> >(); broker.Subscribe(handlerMock4); // Act await broker.PublishAsync("event").ConfigureAwait(false); // Assert A.CallTo(() => handlerMock1.HandleAsync("event")) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => handlerMock2.HandleAsync("event")) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => handlerMock3.HandleAsync("event")) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => handlerMock4.HandleAsync(A <int> .Ignored)) .MustNotHaveHappened(); }
public void Publish_WithHandlersFactoryReturningNull_NothingHappens() { // Arrange var handlerRunnerMock = A.Fake <IEventHandlerRunner>(); var eventHandlersFactory = new EventHandlersFactory(); var broker = new EventBroker(handlerRunnerMock, eventHandlersFactory); // Act broker.Publish("event"); // Assert A.CallTo(() => handlerRunnerMock.Run(A <Action> .Ignored)) .MustNotHaveHappened(); }
public async Task Publish_WithHandlersFactoryReturningNull_NothingHappens() { // Arrange var handlerRunnerMock = A.Fake <IEventHandlerRunnerAsync>(); var eventHandlersFactory = new EventHandlersFactory(); var broker = new EventBrokerAsync(handlerRunnerMock, eventHandlersFactory); // Act await broker.PublishAsync("event").ConfigureAwait(false); // Assert A.CallTo(() => handlerRunnerMock.RunAsync(A <Func <Task> > .Ignored)) .MustNotHaveHappened(); }