public async Task CanPublishEndpointEvents()
            {
                _messageTypePathMappings.Add(new MessageTypeMessagingEntityMappingDetails(typeof(TestSpecificEvent1), "events/subscriptions/specific-events-1", MessagingEntityType.Subscription));

                var mockMessageSender = new Mock <IMessageSender>();

                mockMessageSender.Setup(mr => mr.SendAsync(It.IsNotNull <BrokeredMessage>()))
                .Returns(Task.FromResult(true));

                _mockMessagingFactory.Setup(mf => mf.CreateMessageSender(It.IsNotNull <Type>(), It.IsNotNull <string>()))
                .Returns(mockMessageSender.Object);

                var endpointProvider = new AzureServiceBusEndpointProvider <TestMessage, TestMessage, TestCommand, TestEvent, TestRequest, TestResponse>(
                    "TestEndpoint", _mockMessagingFactory.Object, new JsonMessageSerializer(), new JsonMessageDeserializerFactory(typeof(JsonMessageDeserializer <>)), _messageTypePathMappings, _testAssemblyFilter, _testMessageTypeFilter, _messagePropertyProviderManager, _mockMessageOutgoingPropertiesTable.Object);

                var testEvent = new TestSpecificEvent1
                {
                    TestId = 1234
                };

                await endpointProvider.CreateEndpoint().PublishAsync(testEvent);

                _mockMessagingFactory.Verify(mf => mf.CreateMessageSender(It.Is <Type>(t => t == typeof(TestSpecificEvent1)), It.Is <string>(s => s == "events")), Times.Once());

                mockMessageSender.Verify(mr => mr.SendAsync(It.IsAny <BrokeredMessage>()), Times.Once());
            }
            public async Task CanReceiveEndpointClientEvents()
            {
                var testSubscriptionPath = "events/subscriptions/specific-events-1";

                _messageTypePathMappings.Add(new MessageTypeMessagingEntityMappingDetails(typeof(TestSpecificEvent1), testSubscriptionPath, MessagingEntityType.Subscription));

                var publishedEventBrokeredMessageTaskCompletionSource = new TaskCompletionSource <BrokeredMessage>();

                var mockMessageReceiver = new Mock <IMessageReceiver>();

                mockMessageReceiver.Setup(mr => mr.ReceiveAsync())
                .Returns(() => publishedEventBrokeredMessageTaskCompletionSource.Task);

                _mockMessagingFactory.Setup(mf => mf.CreateMessageReceiver(It.IsNotNull <Type>(), It.IsNotNull <string>(), It.IsAny <MessageReceiveMode>()))
                .Returns(mockMessageReceiver.Object);

                var mockMessageSender = new Mock <IMessageSender>();

                mockMessageSender.Setup(mr => mr.SendAsync(It.IsNotNull <BrokeredMessage>()))
                .Callback <BrokeredMessage>(bm =>
                {
                    publishedEventBrokeredMessageTaskCompletionSource.SetResult(bm);
                    publishedEventBrokeredMessageTaskCompletionSource = new TaskCompletionSource <BrokeredMessage>();
                })
                .Returns(Task.FromResult(true));

                _mockMessagingFactory.Setup(mf => mf.CreateMessageSender(It.IsNotNull <Type>(), It.IsNotNull <string>()))
                .Returns(mockMessageSender.Object);

                var endpointProvider = new AzureServiceBusEndpointProvider <TestMessage, TestMessage, TestCommand, TestEvent, TestRequest, TestResponse>(
                    "TestEndpoint", _mockMessagingFactory.Object, new JsonMessageSerializer(), new JsonMessageDeserializerFactory(typeof(JsonMessageDeserializer <>)), _messageTypePathMappings, _testAssemblyFilter, _testMessageTypeFilter, _messagePropertyProviderManager, _mockMessageOutgoingPropertiesTable.Object);

                var endpointClient = endpointProvider.CreateEndpointClient();

                var publishedEvents = endpointClient.Events.Replay();

                using (publishedEvents.Connect())
                {
                    await endpointProvider.CreateEndpoint().PublishAsync(new TestSpecificEvent1
                    {
                        TestId = 1234
                    });

                    var testEvent = await publishedEvents.FirstOrDefaultAsync();

                    testEvent.Should().NotBeNull();
                    testEvent.TestId.Should().Be(1234);
                }

                _mockMessagingFactory.Verify(mf => mf.CreateMessageReceiver(It.Is <Type>(it => it == typeof(TestSpecificEvent1)), testSubscriptionPath, It.Is <MessageReceiveMode>(mrm => mrm == MessageReceiveMode.ReceiveAndDelete)), Times.Once());

                /* NOTE: it's possible ReceiveAsync will be called up to two times due to concurrency here:
                 * the first time will return the msg for the test, but then it's possible there will be a second call to ReceiveAsync to wait for the next message
                 * before the subscription is shut down.
                 */
                mockMessageReceiver.Verify(mr => mr.ReceiveAsync(), Times.AtMost(2));
            }