public async Task WhenPublishTopicClientOrQueueClientIsCreatedForTopicNameOrQueueName()
        {
            // arrange
            BusBuilder.Produce <SomeMessage>(x => x.ToTopic());
            BusBuilder.Produce <OtherMessage>(x => x.ToQueue());

            var sm1 = new SomeMessage {
                Id = "1", Value = 10
            };
            var sm2 = new SomeMessage {
                Id = "2", Value = 12
            };
            var om1 = new OtherMessage {
                Id = "1"
            };
            var om2 = new OtherMessage {
                Id = "2"
            };

            // act
            await ProviderBus.Value.Publish(sm1, "some-topic").ConfigureAwait(false);

            await ProviderBus.Value.Publish(sm2, "some-topic").ConfigureAwait(false);

            await ProviderBus.Value.Publish(om1, "some-queue").ConfigureAwait(false);

            await ProviderBus.Value.Publish(om2, "some-queue").ConfigureAwait(false);

            // assert
            TopicClientMockByName.Should().ContainKey("some-topic");
            TopicClientMockByName.Should().HaveCount(1);
            QueueClientMockByName.Should().ContainKey("some-queue");
            QueueClientMockByName.Should().HaveCount(1);
        }
        public async Task WhenPublishGivenModifierConfiguredForMessageTypeThenModifierExecuted()
        {
            // arrange
            BusBuilder.Produce <SomeMessage>(x =>
            {
                x.DefaultTopic("default-topic");
                x.WithModifier((message, sbMessage) =>
                {
                    sbMessage.MessageId    = message.Id;
                    sbMessage.PartitionKey = (message.Value % 2).ToString(CultureInfo.InvariantCulture);
                });
            });

            var m1 = new SomeMessage {
                Id = "1", Value = 10
            };
            var m2 = new SomeMessage {
                Id = "2", Value = 3
            };

            // act
            await ProviderBus.Value.Publish(m1).ConfigureAwait(false);

            await ProviderBus.Value.Publish(m2).ConfigureAwait(false);

            // assert
            var topicClient = TopicClientMockByName["default-topic"];

            topicClient.Verify(x => x.SendAsync(It.Is <Message>(m => m.MessageId == "1" && m.PartitionKey == "0")), Times.Once);
            topicClient.Verify(x => x.SendAsync(It.Is <Message>(m => m.MessageId == "2" && m.PartitionKey == "1")), Times.Once);
        }
        public async Task WhenPublishGivenModifierConfiguredForMessageTypeThatThrowsErrorThenModifierDoesNotPreventMessageDelivery()
        {
            // arrange
            BusBuilder.Produce <SomeMessage>(x =>
            {
                x.DefaultTopic("default-topic");
                x.WithModifier((message, sbMessage) => throw new Exception("Someone is having bad day today!"));
            });

            var m = new SomeMessage {
                Id = "1", Value = 10
            };

            // act
            await ProviderBus.Value.Publish(m).ConfigureAwait(false);

            // assert
            TopicClientMockByName["default-topic"].Verify(x => x.SendAsync(It.IsAny <Message>()), Times.Once);
        }