Exemplo n.º 1
0
        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"));
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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;
                }
            }
        }
Exemplo n.º 5
0
        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));
        }