public void TestAppendingExchangeRateWithBaseCurrencyNotInMainListCurrenciesRates() { //Arrange var firstRateList = new Dictionary <string, decimal> { { "BRL", (decimal)39471.159 }, { "EUR", (decimal)8708.442 }, { "USD", (decimal)9558.551 } }; var mainExchageRate = new ExchangeRatesList() { BaseCurrencySymbol = "BTC", CurrenciesRates = new Dictionary <string, decimal>(firstRateList) }; //Act var SecondRateList = new Dictionary <string, decimal> { { "CAD", (decimal)1.5344 }, { "HKD", (decimal)9.29 }, { "AUD", (decimal)1.5761 }, { "USD", (decimal)1.1983 } }; var SecondExchageRate = new ExchangeRatesList() { BaseCurrencySymbol = "MYR", CurrenciesRates = new Dictionary <string, decimal>(SecondRateList) }; //Assert Action act = () => mainExchageRate.Append(SecondExchageRate); act.Should().Throw <Exception>().Where(e => e.Message.StartsWith("The ExchangeRatesList can't be appended")); }
public void TestAppendingEmptyExchangeRate() { //Arrange var firstRateList = new Dictionary <string, decimal> { { "BRL", (decimal)39471.159 }, { "EUR", (decimal)8708.442 }, { "USD", (decimal)9558.551 } }; var mainExchageRate = new ExchangeRatesList() { BaseCurrencySymbol = "BTC", CurrenciesRates = new Dictionary <string, decimal>(firstRateList) }; var SecondExchageRate = new ExchangeRatesList() { BaseCurrencySymbol = "EUR" }; //Act mainExchageRate.Append(SecondExchageRate); //Assert mainExchageRate.Should().NotBeNull(); mainExchageRate.BaseCurrencySymbol.Should().Be("BTC"); mainExchageRate.CurrenciesRates.Should().HaveCount(3).And.ContainKeys(firstRateList.Keys);; mainExchageRate.CurrenciesRates["BRL"].Should().Be((decimal)(39471.159)); mainExchageRate.CurrenciesRates["USD"].Should().Be((decimal)(9558.551)); }
public override async Task <ExchangeRatesList> GetExchangeRatesList(string BaseCurrencySymbol, params string[] TargetedCurrencies) { BaseCurrencySymbol = BaseCurrencySymbol.ToUpper(); TargetedCurrencies = TargetedCurrencies.Select(e => e.ToUpper()).ToArray(); if (!supportedCurrencies.Contains(BaseCurrencySymbol)) { throw new InvalidRequestException($"{BaseCurrencySymbol} is Unsupported currency"); } if (TargetedCurrencies == null || TargetedCurrencies.Length == 0) { TargetedCurrencies = _config.DefaultTargetedCurrencies.ToArray(); } List <string> newTargets = new List <string>(); ExchangeRatesList exchangeRatesList = new ExchangeRatesList() { BaseCurrencySymbol = BaseCurrencySymbol }; foreach (var targetedcurrency in TargetedCurrencies) { decimal rate; if (_memoryCache.TryGetValue(GetCacheKey(BaseCurrencySymbol, targetedcurrency), out rate)) { exchangeRatesList.CurrenciesRates.Add(targetedcurrency, rate); } else { newTargets.Add(targetedcurrency); } } if (newTargets.Count > 0) { _logger.LogInformation($"Requesting ExchangeRates of {string.Join(",", newTargets)} from {ServiceProviderName} Provider"); var rates = await base.GetExchangeRatesList(BaseCurrencySymbol, newTargets.ToArray()); foreach (var rate in rates.CurrenciesRates) { _memoryCache.Set(GetCacheKey(BaseCurrencySymbol, rate.Key), rate.Value, DateTimeOffset.Now.AddMinutes(_config.ExpiredAfterInMinutes)); exchangeRatesList.CurrenciesRates.Add(rate.Key, rate.Value); } } return(exchangeRatesList); }
public static void Append(this ExchangeRatesList mainRate, ExchangeRatesList AppendedExchangeRate, bool WithOverwrite = false) { if (AppendedExchangeRate == null) { return; } decimal AppendedBaseCurrencyRate; if (!mainRate.CurrenciesRates.TryGetValue(AppendedExchangeRate.BaseCurrencySymbol, out AppendedBaseCurrencyRate)) { throw new Exception("The ExchangeRatesList can't be appended because its BaseCurrencySymbol is doesn't exists in the main ExchangeRateList's CurrenciesRates"); } foreach (var rate in AppendedExchangeRate.CurrenciesRates) { var newRate = rate.Value * AppendedBaseCurrencyRate; if (!mainRate.CurrenciesRates.TryAdd(rate.Key, newRate) && WithOverwrite) { mainRate.CurrenciesRates[rate.Key] = newRate; } } }
public void TestAppendingExchangeRate_WithOverwrite() { //Arrange var firstRateList = new Dictionary <string, decimal> { { "BRL", (decimal)39471.159 }, { "EUR", (decimal)8708.442 }, { "USD", (decimal)9558.551 } }; var mainExchageRate = new ExchangeRatesList() { BaseCurrencySymbol = "BTC", CurrenciesRates = new Dictionary <string, decimal>(firstRateList) }; var SecondRateList = new Dictionary <string, decimal> { { "CAD", (decimal)1.5344 }, { "HKD", (decimal)9.29 }, { "AUD", (decimal)1.5761 }, { "USD", (decimal)1.3 } }; var SecondExchageRate = new ExchangeRatesList() { BaseCurrencySymbol = "EUR", CurrenciesRates = new Dictionary <string, decimal>(SecondRateList) }; //Act mainExchageRate.Append(SecondExchageRate, true); //Assert mainExchageRate.Should().NotBeNull(); mainExchageRate.BaseCurrencySymbol.Should().Be("BTC"); mainExchageRate.CurrenciesRates.Should().HaveCount(6).And.ContainKeys(SecondRateList.Keys); mainExchageRate.CurrenciesRates["CAD"].Should().Be((decimal)(1.5344 * 8708.442)); mainExchageRate.CurrenciesRates["USD"].Should().Be((decimal)(1.3 * 8708.442)); }