using System; using System.Collections.Generic; using System.Text; using System.Linq; using System.Threading.Tasks; namespace BTCPayServer.Services.Rates { public class MockRateProviderFactory : IRateProviderFactory { List _Mocks = new List(); public MockRateProviderFactory() { } public void AddMock(MockRateProvider mock) { _Mocks.Add(mock); } public IRateProvider GetRateProvider(BTCPayNetwork network, bool longCache) { return _Mocks.FirstOrDefault(m => m.CryptoCode == network.CryptoCode); } } public class MockRateProvider : IRateProvider { List _Rates; public string CryptoCode { get; } public MockRateProvider(string cryptoCode, params Rate[] rates) { _Rates = new List(rates); CryptoCode = cryptoCode; } public MockRateProvider(string cryptoCode, List rates) { _Rates = rates; CryptoCode = cryptoCode; } public Task GetRateAsync(string currency) { var rate = _Rates.FirstOrDefault(r => r.Currency.Equals(currency, StringComparison.OrdinalIgnoreCase)); if (rate == null) throw new RateUnavailableException(currency); return Task.FromResult(rate.Value); } public Task> GetRatesAsync() { ICollection rates = _Rates; return Task.FromResult(rates); } } }