public void Bus_MessageBaseSubscribtion_CallReceived()
        {
            ManualResetEvent ev = new ManualResetEvent(false);

            MessageBasedImplementation implementation = new MessageBasedImplementation(ev);

            using (IBus bus = new RabbitMQBus())
            {
                using (ISubscription subscription = bus.RegisterSubscription(implementation))
                {
                    subscription.Open();

                    using (IPublisher publisher = bus.CreatePublisher())
                    {
                        Person person = new Person {
                            Id = 5
                        };

                        BusMessage <Person> busMessage = new BusMessage <Person>
                        {
                            Data = person
                        };

                        busMessage.Headers.Add(new BusHeader
                        {
                            Name  = "Header",
                            Value = "RightValue"
                        });

                        publisher.Send(busMessage);

                        bool waitOne = ev.WaitOne(TimeSpan.FromSeconds(5));

                        waitOne.Should().BeTrue();

                        busMessage.ShouldBeEquivalentTo(implementation.Message,
                                                        options =>
                                                        options.Excluding(message => message.BusId)
                                                        .Excluding(message => message.Sent));
                    }
                }
            }
        }
        public void Bus_MessageBaseSubscription_CallReceived()
        {
            ManualResetEvent ev = new ManualResetEvent(false);

            MessageBasedImplementation implementation = new MessageBasedImplementation(ev);

            using (IBus bus = new MessageBus.Core.RabbitMQBus())
            {
                using (ISubscription subscription = bus.RegisterSubscription(implementation, c => c.SetReceiveSelfPublish()))
                {
                    subscription.Open();

                    using (IPublisher publisher = bus.CreatePublisher())
                    {
                        Person person = new Person {Id = 5};

                        BusMessage<Person> busMessage = new BusMessage<Person>
                            {
                                Data = person
                            };

                        busMessage.Headers.Add(new BusHeader
                            {
                                Name = "Header",
                                Value = "RightValue"
                            });

                        publisher.Send(busMessage);

                        bool waitOne = ev.WaitOne(TimeSpan.FromSeconds(5000));

                        waitOne.Should().BeTrue();

                        busMessage.ShouldBeEquivalentTo(implementation.Message,
                                                        options =>
                                                        options.Excluding(message => message.BusId)
                                                               .Excluding(message => message.Sent));
                    }
                }
            }
        }