From 1bf680fdb93a1116d2f94d92989bfa50727a84a3 Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Sat, 18 Jan 2020 19:23:40 +0900 Subject: [PATCH] Improve tests to not create new HttpClient every times --- BTCPayServer.Tests/ChangellyTests.cs | 12 ++---------- BTCPayServer.Tests/TestUtils.cs | 9 +++++++++ BTCPayServer.Tests/UnitTest1.cs | 7 ++++++- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/BTCPayServer.Tests/ChangellyTests.cs b/BTCPayServer.Tests/ChangellyTests.cs index 16c666a76..9579b1803 100644 --- a/BTCPayServer.Tests/ChangellyTests.cs +++ b/BTCPayServer.Tests/ChangellyTests.cs @@ -182,7 +182,7 @@ namespace BTCPayServer.Tests var factory = UnitTest1.CreateBTCPayRateFactory(); var fetcher = new RateFetcher(factory); - var httpClientFactory = new MockHttpClientFactory(); + var httpClientFactory = TestUtils.CreateHttpFactory(); var changellyController = new ChangellyController( new ChangellyClientProvider(tester.PayTester.StoreRepository, httpClientFactory), tester.NetworkProvider, fetcher); @@ -213,7 +213,7 @@ namespace BTCPayServer.Tests var factory = UnitTest1.CreateBTCPayRateFactory(); var fetcher = new RateFetcher(factory); - var httpClientFactory = new MockHttpClientFactory(); + var httpClientFactory = TestUtils.CreateHttpFactory(); var changellyController = new ChangellyController( new ChangellyClientProvider(tester.PayTester.StoreRepository, httpClientFactory), tester.NetworkProvider, fetcher); @@ -243,12 +243,4 @@ namespace BTCPayServer.Tests Assert.Equal(20, ChangellyCalculationHelper.ComputeCorrectAmount(10, 1, 2)); } } - - public class MockHttpClientFactory : IHttpClientFactory - { - public HttpClient CreateClient(string name) - { - return new HttpClient(); - } - } } diff --git a/BTCPayServer.Tests/TestUtils.cs b/BTCPayServer.Tests/TestUtils.cs index f0b365e6b..c76d6131a 100644 --- a/BTCPayServer.Tests/TestUtils.cs +++ b/BTCPayServer.Tests/TestUtils.cs @@ -7,6 +7,8 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Xunit.Sdk; using System.Linq; +using System.Net.Http; +using Microsoft.Extensions.DependencyInjection; namespace BTCPayServer.Tests { @@ -104,5 +106,12 @@ namespace BTCPayServer.Tests } } } + + internal static IHttpClientFactory CreateHttpFactory() + { + var services = new ServiceCollection(); + services.AddHttpClient(); + return services.BuildServiceProvider().GetRequiredService(); + } } } diff --git a/BTCPayServer.Tests/UnitTest1.cs b/BTCPayServer.Tests/UnitTest1.cs index e2dae7e36..a3b8174d6 100644 --- a/BTCPayServer.Tests/UnitTest1.cs +++ b/BTCPayServer.Tests/UnitTest1.cs @@ -2681,6 +2681,7 @@ noninventoryitem: public void CanQueryDirectProviders() { var factory = CreateBTCPayRateFactory(); + var directlySupported = factory.GetSupportedExchanges().Where(s => s.Source == RateSource.Direct).Select(s => s.Id).ToHashSet(); var all = string.Join("\r\n", factory.GetSupportedExchanges().Select(e => e.Id).ToArray()); foreach (var result in factory .Providers @@ -2712,6 +2713,10 @@ noninventoryitem: && e.BidAsk.Bid > 1.0m // 1BTC will always be more than 1USD ); } + // We are not showing a directly implemented exchange as directly implemented in the UI + // we need to modify the AvailableRateProvider + if (result.ExpectedName != "coinaverage") + Assert.Contains(result.ExpectedName, directlySupported); } // Kraken emit one request only after first GetRates factory.Providers["kraken"].GetRatesAsync(default).GetAwaiter().GetResult(); @@ -2782,7 +2787,7 @@ noninventoryitem: public static RateProviderFactory CreateBTCPayRateFactory() { - return new RateProviderFactory(new MockHttpClientFactory()); + return new RateProviderFactory(TestUtils.CreateHttpFactory()); } class SpyRateProvider : IRateProvider