public void MultipleSubscriptionsPublishTest()
        {
            var handler1 = Substitute.For <IHandle <TestMessage> >();
            var handler2 = Substitute.For <IHandle <TestMessage> >();

            var pubSub = new TopicBasedPubSub();

            pubSub.SubscribeByType(handler1);
            pubSub.SubscribeByType(handler2);
            pubSub.Publish(new TestMessage());

            handler1.Received().Handle(Arg.Any <TestMessage>());
            handler2.Received().Handle(Arg.Any <TestMessage>());
        }
        public void SubscribeWhenPublishingDoesntThrowTest()
        {
            var handler1 = Substitute.For <IHandle <TestMessage> >();
            var handler2 = Substitute.For <IHandle <TestMessage> >();

            var pubSub = new TopicBasedPubSub();

            handler1
            .When(x => x.Handle(Arg.Any <TestMessage>()))
            .Do(callInfo =>
            {
                Assert.DoesNotThrow(() => pubSub.SubscribeByType(handler2));
            });

            pubSub.SubscribeByType(handler1);
            pubSub.Publish(new TestMessage());

            handler2.DidNotReceive().Handle(Arg.Any <TestMessage>());
        }
        public void SingleSubscriptionPublishTest()
        {
            var handler = Substitute.For <IHandle <TestMessage> >();

            var pubSub = new TopicBasedPubSub();

            pubSub.SubscribeByType(handler);
            pubSub.Publish(new TestMessage());
            pubSub.Publish(new AnotherTestMessage());

            handler.Received().Handle(Arg.Any <TestMessage>());
        }
        public void UnsubscribeTest()
        {
            var handler = Substitute.For <IHandle <TestMessage> >();

            var pubSub = new TopicBasedPubSub();

            pubSub.SubscribeByType(handler);
            pubSub.UnsubscribeByType(handler);

            pubSub.Publish(new TestMessage());

            handler.DidNotReceive().Handle(Arg.Any <TestMessage>());
        }