public async void WhenSubscriptionMessagesListenerIsSubscribed_PreviousSubscriptionExists_ThenSubscriptionIsCreatedAgain()
        {
            var settings = TestSettings.MqSettingsForTopic();

            var tickSeconds = 15;
            var name        = settings.TopicNameBuilder(typeof(TestMessageForTopic));
            var nameSpace   = NamespaceManager.CreateFromConnectionString(settings.ConnectionString);
            var topic       = await nameSpace.CreateTopicAsync(name);

            var subscriptionName = $"{topic.Path}.{settings.TopicSubscriberId}";
            var initiallyCreated = DateTime.UtcNow;

            var subscriptionDescription = new SubscriptionDescription(topic.Path, subscriptionName);
            await nameSpace.CreateSubscriptionAsync(subscriptionDescription);

            Thread.Sleep(TimeSpan.FromSeconds(tickSeconds));

            var subscriber = new AzureBusTopicSubscriber(settings, _ => { }, _ => { });
            var listener   = subscriber.Messages <TestMessageForTopic>();

            listener.Subscribe(_ => { });
            var subscription = await nameSpace.GetSubscriptionAsync(topic.Path, subscriptionName);

            var newlyCreated = subscription.CreatedAt > initiallyCreated.AddSeconds(tickSeconds);

            Assert.True(newlyCreated);
        }
        public async void WhenSusbcriptionIsRemoved_ThenSubscriptionIsCreatedAgain()
        {
            var settings = TestSettings.MqSettingsForTopic();

            var subscriber = new AzureBusTopicSubscriber(settings, _ => { }, _ => { });
            var publisher  = new AzureBusTopicPublisher(settings, _ => { }, _ => throw new InvalidOperationException("Errorlogger"));

            var id       = Guid.NewGuid();
            var listener = subscriber.Messages <TestMessageForTopic>();


            var name      = settings.TopicNameBuilder(typeof(TestMessageForTopic));
            var nameSpace = NamespaceManager.CreateFromConnectionString(settings.ConnectionString);
            var topic     = await nameSpace.GetTopicAsync(name);

            var subscriptions = await nameSpace.GetSubscriptionsAsync(topic.Path);

            foreach (var subscriptionDescription in subscriptions)
            {
                await nameSpace.DeleteSubscriptionAsync(topic.Path, subscriptionDescription.Name);
            }

            Thread.Sleep(TimeSpan.FromSeconds(30));

            await publisher.SendAsync(new TestMessageForTopic
            {
                ExampleId = id
            });

            await listener
            .Where(x => x.ExampleId == id)
            .Timeout(TimeSpan.FromSeconds(30))
            .FirstAsync();
        }
        public async void WhenTopicIsRemoved_ThenTopicIsCreatedAgain()
        {
            var settings = TestSettings.MqSettingsForTopic();

            var subscriber = new AzureBusTopicSubscriber(settings, _ => { }, _ => { });
            var publisher  = new AzureBusTopicPublisher(settings, _ => { }, _ => throw new InvalidOperationException("Errorlogger"));

            var id       = Guid.NewGuid();
            var listener = subscriber.Messages <TestMessageForTopic>();


            var name      = settings.TopicNameBuilder(typeof(TestMessageForTopic));
            var nameSpace = NamespaceManager.CreateFromConnectionString(settings.ConnectionString);
            var topic     = await nameSpace.GetTopicAsync(name);

            topic.Should().NotBeNull("Topic should exist at this point");

            await nameSpace.DeleteTopicAsync(name);

            Thread.Sleep(TimeSpan.FromSeconds(30));

            await publisher.SendAsync(new TestMessageForTopic
            {
                ExampleId = id
            });

            await listener
            .Where(x => x.ExampleId == id)
            .Timeout(TimeSpan.FromSeconds(30))
            .FirstAsync();
        }
        public async void WhenMessageIsSend_CorrelationIdCanBeUsed()
        {
            var settings   = TestSettings.MqSettingsForTopic();
            var publisher  = new AzureBusTopicPublisher(settings, _ => { }, _ => { });
            var subscriber = new AzureBusTopicSubscriber(settings, _ => { }, _ => { });

            var id       = Guid.NewGuid();
            var listener = subscriber.Messages <TestMessageForTopic>();

            await publisher.SendAsync(new TestMessageForTopic
            {
                CorrelationId = id.ToString()
            });

            await listener
            .Where(x => x.CorrelationId == id.ToString())
            .Timeout(TimeSpan.FromSeconds(10))
            .FirstAsync();
        }
        public async void WhenMessageIsSend_ThenItCanBeReceived()
        {
            var settings   = TestSettings.MqSettingsForTopic();
            var publisher  = new AzureBusTopicPublisher(settings, _ => { }, _ => { });
            var subscriber = new AzureBusTopicSubscriber(settings, _ => { }, _ => { });

            var id       = Guid.NewGuid();
            var listener = subscriber.Messages <TestMessageForTopic>();

            await publisher.SendAsync(new TestMessageForTopic
            {
                ExampleId = id
            });

            await listener
            .Where(x => x.ExampleId == id)
            .Timeout(TimeSpan.FromSeconds(10))
            .FirstAsync();
        }