Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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();
        }
Exemple #5
0
        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();
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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();
        }
Exemple #8
0
        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();
        }
Exemple #9
0
        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);
        }
Exemple #10
0
        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();
        }
Exemple #11
0
        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);
        }