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);
        }
Beispiel #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);
        }
        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);
        }
Beispiel #4
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);
        }
        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();
        }
Beispiel #6
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();
        }
        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();
        }
Beispiel #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();
        }