/// <summary>
        ///     Converts allowed currencies into USD.
        /// </summary>
        /// <param name="money">Money.</param>
        /// <returns>Money.</returns>
        public Task <PositiveMoney> ConvertToUSD(PositiveMoney money)
        {
            // hardcoded rates from https://www.xe.com/currency/usd-us-dollar

            if (money.GetCurrency() == Currency.Dollar)
            {
                return(Task.FromResult(money));
            }

            if (money.GetCurrency() == Currency.Euro)
            {
                return(Task.FromResult(
                           new PositiveMoney(
                               money.ToMoney().ToDecimal() * 0.89021m,
                               Currency.Euro.ToString())));
            }

            if (money.GetCurrency() == Currency.Canadian)
            {
                return(Task.FromResult(
                           new PositiveMoney(
                               money.ToMoney().ToDecimal() * 1.35737m,
                               Currency.Canadian.ToString())));
            }

            if (money.GetCurrency() == Currency.BritishPound)
            {
                return(Task.FromResult(
                           new PositiveMoney(
                               money.ToMoney().ToDecimal() * 0.80668m,
                               Currency.BritishPound.ToString())));
            }

            if (money.GetCurrency() == Currency.Krona)
            {
                return(Task.FromResult(
                           new PositiveMoney(
                               money.ToMoney().ToDecimal() * 9.31944m,
                               Currency.Krona.ToString())));
            }

            if (money.GetCurrency() == Currency.Real)
            {
                return(Task.FromResult(
                           new PositiveMoney(
                               money.ToMoney().ToDecimal() * 5.46346m,
                               Currency.Krona.ToString())));
            }

            throw new CurrencyNotAllowedException();
        }
        public async Task Convert()
        {
            var serviceCollection = new ServiceCollection();

            serviceCollection.AddHttpClient(CurrencyExchangeService.HttpClientName);
            serviceCollection.AddSingleton <CurrencyExchangeService>();

            var serviceProvider = serviceCollection.BuildServiceProvider();
            var sut             = serviceProvider.GetRequiredService <CurrencyExchangeService>();

            PositiveMoney usdMoney = new PositiveMoney(100, "EUR");
            PositiveMoney actual   = await sut.ConvertToUSD(usdMoney);

            Assert.True(actual.ToMoney().ToDecimal() > 100);
            Assert.Equal("USD", actual.GetCurrency().ToString());
        }
Ejemplo n.º 3
0
 internal bool LessThan(PositiveMoney amount)
 {
     return(_money < amount.ToMoney()._money);
 }
Ejemplo n.º 4
0
 public TransactionModel(PositiveMoney amount, string description, DateTime transactionDate)
 {
     this.Amount          = amount.ToMoney().ToDecimal();
     this.Description     = description;
     this.TransactionDate = transactionDate;
 }