public void NoExceptionsWhenPublishingWithoutPublisherRegistrations()
        {
            var publisherFake = new FooPublisher();
            var messageId = Guid.NewGuid();
            var message = new FooHappens(messageId);

            publisherFake.Publish(message);
        }
        public void EventHandlerIsCalledWhenItsSubscrivedAndTheEventIsPublished()
        {
            var messageId = Guid.NewGuid();
            var message = new FooHappens(messageId);
            var subscriber = Substitute.For<IEventSubscriber<FooHappens>>();
            var publisher = new FooPublisher();
            MessageBus.RegisterPublisher(publisher);
            MessageBus.RegisterSubscriber(subscriber);

            publisher.Publish(message);

            subscriber.Received(1).Handle(message);
        }
        public void ThreeSubsDontHandleEventWhenSubsAreRegisteredThenSubsAreUnRegisteredThenPubIsRegistered()
        {
            var subscriberId1 = Guid.NewGuid();
            var subscriberId2 = Guid.NewGuid();
            var subscriberId3 = Guid.NewGuid();
            var subscriberFake1 = Substitute.For<IEventSubscriber<FooHappens>>();
            var subscriberFake2 = Substitute.For<IEventSubscriber<FooHappens>>();
            var subscriberFake3 = Substitute.For<IEventSubscriber<FooHappens>>();
            var publisherFake = new FooPublisher();
            subscriberFake1.Id.Returns(subscriberId1);
            subscriberFake2.Id.Returns(subscriberId2);
            subscriberFake3.Id.Returns(subscriberId3);
            var messageId = Guid.NewGuid();
            var message = new FooHappens(messageId);
            var bus = new SingleProcessMessageBus();
            bus.RegisterSubscriber(subscriberFake1);
            bus.RegisterSubscriber(subscriberFake2);
            bus.RegisterSubscriber(subscriberFake3);
            bus.UnRegisterSubscriber(subscriberFake1);
            bus.UnRegisterSubscriber(subscriberFake2);
            bus.UnRegisterSubscriber(subscriberFake3);
            bus.RegisterPublisher(publisherFake);

            publisherFake.Publish(message);

            subscriberFake1.Received(0).Handle(message);
            subscriberFake2.Received(0).Handle(message);
            subscriberFake3.Received(0).Handle(message);
        }
        public void OneSubDoesntHandleEventWhenSubIsRegisteredThenSubIsUnRegisteredThenPubIsRegistered()
        {
            var messageId = Guid.NewGuid();
            var subscriberId = Guid.NewGuid();
            var subscriberFake = Substitute.For<IEventSubscriber<FooHappens>>();
            var publisherFake = new FooPublisher();
            subscriberFake.Id.Returns(subscriberId);
            var bus = new SingleProcessMessageBus();
            bus.RegisterSubscriber(subscriberFake);
            bus.UnRegisterSubscriber(subscriberFake);
            bus.RegisterPublisher(publisherFake);
            var message = new FooHappens(messageId);

            publisherFake.Publish(message);

            subscriberFake.Received(0).Handle(message);
        }