public async Task SubscribedWithHandlerInstancee_ExceptionThrownDuringHandling_OnExceptionIsCalled() { // 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>(); 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); broker.Subscribe(handlerMock); // Act await broker.PublishAsync("event").ConfigureAwait(false); // Assert A.CallTo(() => handlerMock.OnErrorAsync(A <Exception> .Ignored, "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 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 async Task Publish_WithDelegateSubscriptionUnsubscribedWhileWaiting_HandlerIsNotRunned() { // Arrange var handlerMock = A.Fake <IEventHandlerAsync <string> >(); var handlerRunnerMock = A.Fake <IEventHandlerRunnerAsync>(); A.CallTo(() => handlerRunnerMock.RunAsync(null)) .WithAnyArguments() .Invokes(x => { Task.Factory.StartNew(() => { Thread.Sleep(500); ((Func <Task>[])x.Arguments.First())[0].Invoke(); }); }); var broker = new EventBrokerAsync(handlerRunnerMock); broker.Subscribe <string>(handlerMock.HandleAsync); // Act await broker.PublishAsync("event").ConfigureAwait(false); broker.Unsubscribe <string>(handlerMock.HandleAsync); // Assert Thread.Sleep(500); A.CallTo(() => handlerRunnerMock.RunAsync(A <Func <Task> > .Ignored)) .MustHaveHappened(Repeated.Exactly.Once); A.CallTo(() => handlerMock.HandleAsync("event")) .MustNotHaveHappened(); }
public async Task Publish_WithDelegateSubscription_FilterIsRespected() { // Arrange var handlerMock = A.Fake <IEventHandlerAsync <string> >(); A.CallTo(() => handlerMock.ShouldHandleAsync(A <string> .Ignored)) .Returns(false); 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); broker.Subscribe <string>(handlerMock.HandleAsync, handlerMock.ShouldHandleAsync); // 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")) .MustNotHaveHappened(); }
public void EventBroker_Dispose_DisposesIHandlerRunner() { // Arrange var handlerRunnerMock = A.Fake <IEventHandlerRunnerAsync>(); var broker = new EventBrokerAsync(handlerRunnerMock); // Act broker.Dispose(); // Assert A.CallTo(() => handlerRunnerMock.Dispose()) .MustHaveHappened(Repeated.Exactly.Once); }
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 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(); }
public async Task Subscribe_WithDelegate_CreatesSubscribsion() { // Arrange var handlerRunnerMock = A.Fake <IEventHandlerRunnerAsync>(); var broker = new EventBrokerAsync(handlerRunnerMock); var handler = A.Fake <IEventHandlerAsync <string> >(); // Act broker.Subscribe <string>(handler.HandleAsync); await broker.PublishAsync("event").ConfigureAwait(false); // Assert A.CallTo(() => handlerRunnerMock.RunAsync(A <Func <Task> > .Ignored)) .MustHaveHappened(Repeated.Exactly.Once); }
public async Task Unsubscribe_WithHandlerInstance_RemovesSubscribsion() { // Arrange var handlerRunnerMock = A.Fake <IEventHandlerRunnerAsync>(); var broker = new EventBrokerAsync(handlerRunnerMock); var handler = A.Fake <IEventHandlerAsync <string> >(); // Act broker.Subscribe(handler); broker.Unsubscribe(handler); await broker.PublishAsync("event").ConfigureAwait(false); // Assert A.CallTo(() => handlerRunnerMock.RunAsync(A <Func <Task> > .Ignored)) .MustNotHaveHappened(); }
public async Task Subscribe_WithHandlerInstance_CreatesSubscribsion() { // Arrange var handlerRunnerMock = A.Fake <IEventHandlerRunnerAsync>(); var broker = new EventBrokerAsync(handlerRunnerMock); var handler = A.Fake <IEventHandlerAsync <string> >(); A.CallTo(() => handler.ShouldHandleAsync(null)) .WithAnyArguments() .Returns(true); // Act broker.Subscribe(handler); await broker.PublishAsync("event").ConfigureAwait(false); // Assert A.CallTo(() => handlerRunnerMock.RunAsync(A <Func <Task> > .Ignored)) .MustHaveHappened(Repeated.Exactly.Once); }