public async Task Then_If_The_Status_Has_Changed_To_Error_On_Some_Of_The_Queues_Then_A_Degraded_Response_Is_Returned_With_The_Queues_Listed(
            [Frozen] Mock <IAzureQueueService> azureQueueService,
            HealthCheckContext healthCheckContext,
            QueueHealthCheck handler
            )
        {
            //Arrange
            var expectedQueueName  = "test.queue";
            var expectedQueueName2 = "test.queue2";
            var expectedQueueName3 = "test.queue3";
            var queueMonitor       = new QueueMonitor(expectedQueueName, true);
            var queueMonitor2      = new QueueMonitor(expectedQueueName2, true);
            var queueMonitor3      = new QueueMonitor(expectedQueueName3, true);

            azureQueueService.Setup(x => x.GetQueuesToMonitor()).Returns(new List <QueueMonitor>
            {
                queueMonitor,
                queueMonitor2,
                queueMonitor3
            });
            azureQueueService.SetupSequence(x => x.IsQueueHealthy(It.IsAny <string>()))
            .ReturnsAsync(false).ReturnsAsync(false).ReturnsAsync(true);

            //Act
            var actual = await handler.CheckHealthAsync(healthCheckContext, CancellationToken.None);

            //Assert
            azureQueueService.Verify(x => x.IsQueueHealthy(expectedQueueName), Times.Once);
            Assert.AreEqual(HealthStatus.Degraded, actual.Status);
            Assert.IsTrue(actual.Data.ContainsKey("QueuesInError"));
            Assert.AreEqual("test.queue, test.queue2", actual.Data["QueuesInError"]);
        }
        public async Task Then_The_Queue_Details_Are_Retrieved(
            [Frozen] Mock <IAzureQueueService> azureQueueService,
            HealthCheckContext healthCheckContext,
            QueueHealthCheck handler)
        {
            //Arrange
            azureQueueService.Setup(x => x.GetQueuesToMonitor()).Returns(new List <QueueMonitor>
            {
                new QueueMonitor("test.queue", false)
            });

            //Act
            await handler.CheckHealthAsync(healthCheckContext, CancellationToken.None);

            //Assert
            azureQueueService.Verify(x => x.GetQueuesToMonitor(), Times.Once);
        }
        public async Task Then_Each_Queue_Is_Checked_And_The_Status_Returned(
            [Frozen] Mock <IAzureQueueService> azureQueueService,
            HealthCheckContext healthCheckContext,
            QueueHealthCheck handler)
        {
            //Arrange
            var expectedQueueName = "test.queue";

            azureQueueService.Setup(x => x.GetQueuesToMonitor()).Returns(new List <QueueMonitor>
            {
                new QueueMonitor(expectedQueueName, false)
            });

            //Act
            await handler.CheckHealthAsync(healthCheckContext, CancellationToken.None);

            //Assert
            azureQueueService.Verify(x => x.IsQueueHealthy(expectedQueueName), Times.Once);
        }
        public async Task Then_If_The_Status_Has_Not_Been_Set_And_Unhealthy_A_Unhealthy_Response_Is_Returned(
            [Frozen] Mock <IAzureQueueService> azureQueueService,
            HealthCheckContext healthCheckContext,
            QueueHealthCheck handler
            )
        {
            //Arrange
            var expectedQueueName = "test.queue";
            var queueMonitor      = new QueueMonitor(expectedQueueName, null);

            azureQueueService.Setup(x => x.GetQueuesToMonitor()).Returns(new List <QueueMonitor>
            {
                queueMonitor
            });
            azureQueueService.Setup(x => x.IsQueueHealthy(expectedQueueName)).ReturnsAsync(false);

            //Act
            var actual = await handler.CheckHealthAsync(healthCheckContext, CancellationToken.None);

            //Assert
            azureQueueService.Verify(x => x.IsQueueHealthy(expectedQueueName), Times.Once);
            Assert.AreEqual(HealthStatus.Unhealthy, actual.Status);
        }