public async Task TriggersSlackWebhook() { // Arrange var requestMade = false; var uri = new Uri("http://slack.api/web/hook"); var config = new Mock <IConfiguration>(); config .SetupGet(conf => conf["Secrets:Slack:Enabled"]) .Returns(true.ToString()); config .SetupGet(conf => conf["Secrets:Slack:WebHook"]) .Returns(uri.AbsoluteUri); var responseHandler = new ResponseHandler(); responseHandler.AddAction(uri, () => (requestMade = true).ToString()); var httpClientFactory = new Mock <IHttpClientFactory>(); httpClientFactory .Setup(factory => factory.BuildClient()) .Returns(new HttpClient(responseHandler)); var slack = new SlackService( new Mock <ILogger <SlackService> >().Object, config.Object, httpClientFactory.Object ); // Act await slack.SendMessageAsync("The message"); // Assert Assert.True(requestMade); // Clean up responseHandler.RemoveAction(uri); }
public async Task GeneratesCorrectDataPoint(HttpResponseOption option) { // Arrange var responseHandler = new ResponseHandler(); responseHandler.AddAction( new Uri("http://ping.server"), () => option == HttpResponseOption.Success ? JsonConvert.SerializeObject( new RemotePingServerResponse { Latency = 100, StatusCode = 200, IsError = false } ) : JsonConvert.SerializeObject( new RemotePingServerResponse { StatusCode = 503, IsError = true, Error = "Some error" } ) ); var mockHttpFactory = new Mock <IHttpClientFactory>(); mockHttpFactory .Setup(factory => factory.BuildClient()) .Returns(new HttpClient(responseHandler)); var metricServiceMock = new Mock <IMetricService>(); metricServiceMock .Setup(mock => mock.GetOrCreateMetricAsync(Metrics.Ping, "https://my.url.com")) .ReturnsAsync(new Metric()); var config = new Mock <IConfiguration>(); config .SetupGet(conf => conf["Data:PingServerUrl"]) .Returns("http://ping.server"); var pingService = new RemotePingService( metricServiceMock.Object, new Mock <ILogger <PingService> >().Object, config.Object, mockHttpFactory.Object ); // Act var dataPoint = await pingService.PingServerAsync( new PingSetting { ServerUrl = "https://my.url.com", MaxResponseTime = new TimeSpan(0, 0, 0, 0, 500) } ); // Assert switch (option) { case HttpResponseOption.Success: Assert.True(dataPoint.Success); Assert.Equal(dataPoint.ResponseTime, new TimeSpan(0, 0, 0, 0, 100)); Assert.Equal("OK", dataPoint.Message); break; case HttpResponseOption.ServiceUnavailable: Assert.False(dataPoint.Success); Assert.Equal(dataPoint.ResponseTime, new TimeSpan(0)); Assert.Equal("Some error", dataPoint.Message); break; } // Clean up responseHandler.RemoveAction( new Uri("http://ping.server") ); }