Improve tests to not create new HttpClient every times

This commit is contained in:
nicolas.dorier
2020-01-18 19:23:40 +09:00
parent 76008c9f5c
commit 1bf680fdb9
3 changed files with 17 additions and 11 deletions

View File

@@ -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();
}
}
}

View File

@@ -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<IHttpClientFactory>();
}
}
}

View File

@@ -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