public async Task WebUptimeMetricLogic_CollectMetricData_NoWebServers()
        {
            //Arrange
            var metricData = new MetricData();
            var webUptime  = new WebUptime {
                SuccessfulSamples = 9, TotalSamples = 10
            };

            metricDataService.Setup(s => s.GetData <WebUptime>(metricData)).Returns(webUptime);

            serverRepository.Setup(r => r.ReadAllActiveAsync()).ReturnsAsync(new List <Server>());

            var logic = new WebUptimeMetricLogic(httpClientFactoryMock.Object, serverRepository.Object, metricDataService.Object, configRepository.Object, logger.Object);

            //Act
            var result = await logic.CollectMetricData(metricData);

            //Assert
            var resultWebUptime = (WebUptime)result;

            Assert.That(result, Is.Not.Null);
            Assert.That(resultWebUptime, Is.Not.Null);
            Assert.That(resultWebUptime.SuccessfulSamples, Is.EqualTo(9));
            Assert.That(resultWebUptime.TotalSamples, Is.EqualTo(11));
        }
        public async Task WebUptimeMetricLogic_CollectMetricData_SomeServersDown()
        {
            //Arrange
            var metricData = new MetricData();
            var webUptime  = new WebUptime {
                SuccessfulSamples = 9, TotalSamples = 10
            };

            metricDataService.Setup(s => s.GetData <WebUptime>(metricData)).Returns(webUptime);
            SetupHttpClientAdditionalResponses(new Uri("http://127.0.0.1/Relativity/"), HttpStatusCode.NotFound);
            SetupHttpClientAdditionalResponses(new Uri("https://127.0.0.1/Relativity/"), HttpStatusCode.NotFound);
            SetupHttpClientAdditionalResponses(new Uri("http://1.com/Relativity/"), HttpStatusCode.NotFound);
            SetupHttpClientAdditionalResponses(new Uri("https://1.com/Relativity/"), HttpStatusCode.NotFound);

            serverRepository.Setup(r => r.ReadAllActiveAsync()).ReturnsAsync(servers);

            var logic = new WebUptimeMetricLogic(httpClientFactoryMock.Object, serverRepository.Object, metricDataService.Object, configRepository.Object, logger.Object);

            //Act
            var result = await logic.CollectMetricData(metricData);

            //Assert
            var resultWebUptime = (WebUptime)result;

            Assert.That(result, Is.Not.Null);
            Assert.That(resultWebUptime, Is.Not.Null);
            Assert.That(resultWebUptime.SuccessfulSamples, Is.EqualTo(10));
            Assert.That(resultWebUptime.TotalSamples, Is.EqualTo(11));
        }
        public async Task WebUptimeMetricLogic_CollectMetricData_SuggestedUrl()
        {
            //Arrange
            var metricData = new MetricData();
            var webUptime  = new WebUptime {
                SuccessfulSamples = 9, TotalSamples = 10
            };
            var suggestedUrl = "http://www.google.com";

            SetupHttpClientAdditionalResponses(new Uri(suggestedUrl), HttpStatusCode.OK);
            metricDataService.Setup(s => s.GetData <WebUptime>(metricData)).Returns(webUptime);
            configRepository.Setup(r => r.ReadConfigurationValue(ConfigurationKeys.Section, ConfigurationKeys.WebUptimeUserAgent)).Returns("Chrome");
            configRepository.Setup(r => r.ReadConfigurationValue(ConfigurationKeys.Section, ConfigurationKeys.SuggestedWebUptimeUrl)).Returns(suggestedUrl);

            var logic = new WebUptimeMetricLogic(httpClientFactoryMock.Object, serverRepository.Object, metricDataService.Object, configRepository.Object, logger.Object);

            //Act
            var result = await logic.CollectMetricData(metricData);

            //Assert
            var resultWebUptime = (WebUptime)result;

            Assert.That(result, Is.Not.Null);
            Assert.That(resultWebUptime, Is.Not.Null);
            Assert.That(resultWebUptime.SuccessfulSamples, Is.EqualTo(10));
            Assert.That(resultWebUptime.TotalSamples, Is.EqualTo(11));
        }
        public async Task WebUptimeMetricLogic_CollectMetricData_NewDataSource()
        {
            //Arrange
            var metricData = new MetricData();

            serverRepository.Setup(r => r.ReadAllActiveAsync()).ReturnsAsync(servers);
            configRepository.Setup(r => r.ReadConfigurationValue(ConfigurationKeys.Section, ConfigurationKeys.WebUptimeUserAgent)).Returns("Chrome");

            var logic = new WebUptimeMetricLogic(httpClientFactoryMock.Object, serverRepository.Object, metricDataService.Object, configRepository.Object, logger.Object);

            //Act
            var result = await logic.CollectMetricData(metricData);


            //Assert
            var resultWebUptime = (WebUptime)result;

            Assert.That(result, Is.Not.Null);
            Assert.That(resultWebUptime, Is.Not.Null);
            Assert.That(resultWebUptime.SuccessfulSamples, Is.EqualTo(1));
            Assert.That(resultWebUptime.TotalSamples, Is.EqualTo(1));
        }