Beispiel #1
0
        public void Test_Addition_Of_Money()
        {
            var bank = new Bank();

            ICurrencyExpression sum = Money.Dollar(15).Plus(Money.Dollar(10));
            var reduced             = bank.Reduce(sum, "USD");

            Assert.AreEqual(Money.Dollar(25), reduced);
        }
Beispiel #2
0
        public void Test_Bank_Reduces_Sum()
        {
            var bank = new Bank();
            var five = Money.Dollar(5);
            ICurrencyExpression sum = five.Plus(five);
            Money reduced           = bank.Reduce(sum, "USD");

            Assert.AreEqual(Money.Dollar(10), reduced);
        }
 public ICurrencyExpression Times(ICurrencyExpression source, int multiplier)
 {
     if (source is null)
     {
         throw new ArgumentNullException("Multiplicand can not be null", nameof(Times));
     }
     if (multiplier == 0)
     {
         throw new ArgumentNullException("Multiplier can not be 0", nameof(Times));
     }
     return(new Money(source.Amount * multiplier, source.Currency));
 }
Beispiel #4
0
        public void Exchange_currency_then_return_assign_currency_and_correct_amount()
        {
            //Given
            IExchangeService exchange = new ExchangeService();
            var tenFranc = FakeDataBuilder.MakeFranc(10);

            exchange.AddRate("CHF", "USD", 2);
            //When
            ICurrencyExpression result = exchange.Exchange(tenFranc, "USD");

            //Then
            Assert.Equal(FakeDataBuilder.MakeDollar(5), result);
        }
Beispiel #5
0
        public void Test_Money_Add_Different_Currencies()
        {
            var bank = new Bank();

            ICurrencyExpression tenDollars = Money.Dollar(10);
            ICurrencyExpression sixFranc   = Money.Franc(6);

            ICurrencyExpression sum = tenDollars.Plus(sixFranc);

            bank.AddRate("CHF", "USD", 2);
            var result = sum.Reduce(bank, "USD");

            Assert.AreEqual(Money.Dollar(13), result);
        }
 public ICurrencyExpression Exchange(ICurrencyExpression source, string to)
 {
     if (source is null)
     {
         throw new ArgumentNullException("Exchange must be have Money", nameof(Exchange));
     }
     if (string.IsNullOrEmpty(to))
     {
         throw new ArgumentNullException("Exchange must assign Currency", nameof(Exchange));
     }
     if (rates.Count == 0)
     {
         throw new ArgumentNullException("Before Exchange must be setting Exchange rates", nameof(Exchange));
     }
     return(new Money(source.Amount / Rate(source.Currency, to), to));
 }
        public void TestBankExchangeService()
        {
            //Given
            IExchangeService    service   = new ExchangeService();
            Bank                bank      = new Bank(service);
            ICurrencyExpression fivebucks = Bank.Dollar(5);
            ICurrencyExpression tenfranc  = Bank.Franc(10);

            bank.AddRate("CHF", "USD", 2);
            //When
            ICurrencyExpression sum    = service.Sum("USD", new ICurrencyExpression[] { fivebucks, tenfranc });
            ICurrencyExpression result = bank.reduce(sum, "USD");

            //Then
            Assert.Equal(Bank.Dollar(10), result);
        }
Beispiel #8
0
        public void Currency_Times_N_then_return_amount_multiplied_by_N()
        {
            //Given
            IExchangeService exchange     = new ExchangeService();
            int fakeAmount                = 5;
            ICurrencyExpression fiveBucks = FakeDataBuilder.MakeDollar(fakeAmount);
            ICurrencyExpression fiveFranc = FakeDataBuilder.MakeFranc(fakeAmount);
            //When
            var result = exchange.Times(fiveBucks, 8);

            //Then
            Assert.True(FakeDataBuilder.MakeDollar(10).Equals(exchange.Times(fiveBucks, 2)));
            Assert.True(FakeDataBuilder.MakeDollar(15).Equals(exchange.Times(fiveBucks, 3)));
            Assert.True(FakeDataBuilder.MakeFranc(10).Equals(exchange.Times(fiveFranc, 2)));
            Assert.True(FakeDataBuilder.MakeFranc(15).Equals(exchange.Times(fiveFranc, 3)));
        }
Beispiel #9
0
        public void Test_Times_Money_Add_Different_Currencies()
        {
            //Arrange
            var bank = new Bank();

            bank.AddRate("CHF", "USD", 2);

            ICurrencyExpression tenDollars = Money.Dollar(10);
            ICurrencyExpression sixFranc   = Money.Franc(6);

            //Act
            ICurrencyExpression sumThenTimes = tenDollars.Plus(sixFranc).Times(2);
            var result = sumThenTimes.Reduce(bank, "USD");

            //Assert
            Assert.AreEqual(Money.Dollar(26), result);
        }
        public void After_ExchangeTo_currency_then_clean_ExpressionList()
        {
            //Given
            IExchangeService exchange = new ExchangeService();
            var fiveBucks             = FakeDataBuilder.MakeDollar(5);
            var tenFranc = FakeDataBuilder.MakeFranc(10);

            exchange.AddRate("CHF", "USD", 2);
            //When
            ICurrencyExpression sameParamSum = exchange
                                               .Sum(new Money[] { fiveBucks, fiveBucks })
                                               .ExchangeTo("USD");
            int counts = exchange.ExpressionsList.Count();

            //Then
            Assert.Equal(0, counts);
        }
        public void Sum_and_Times_N_and_ExchangeTo_then_return_correct_total()
        {
            //Given
            IExchangeService service = new ExchangeService();
            var tenBucks             = FakeDataBuilder.MakeDollar(10);
            var fiveBucks            = FakeDataBuilder.MakeDollar(5);

            service.AddRate("CHF", "USD", 2);
            //When
            ICurrencyExpression result = service
                                         .Sum(new Money[] { tenBucks, fiveBucks })
                                         .Times(2)
                                         .ExchangeTo("USD");

            //Then
            Assert.Equal(FakeDataBuilder.MakeDollar(30), result);
        }
        public void ExchangeTo_then_return_correct_currency()
        {
            //Given
            ExchangeService service = new ExchangeService();

            service.AddRate("CHF", "USD", 2);
            //When
            ICurrencyExpression result = service
                                         .Sum(
                new ICurrencyExpression[]
            {
                FakeDataBuilder.MakeDollar(5),
                FakeDataBuilder.MakeFranc(10)
            }).ExchangeTo("USD");

            //Then
            Assert.Equal(FakeDataBuilder.MakeDollar(10), result);
        }
Beispiel #13
0
        public void Test_Sum_Plus_Money_Add_Different_Currencies()
        {
            //Arrange
            var bank = new Bank();

            bank.AddRate("CHF", "USD", 2);

            ICurrencyExpression tenDollars = Money.Dollar(10);
            ICurrencyExpression sixFranc   = Money.Franc(6);
            ICurrencyExpression eightFranc = Money.Franc(8);

            //Act
            ICurrencyExpression sum = tenDollars.Plus(sixFranc);

            sum = sum.Plus(eightFranc);
            var result = sum.Reduce(bank, "USD");

            //Assert
            Assert.AreEqual(Money.Dollar(17), result);
        }
Beispiel #14
0
 public Sum(ICurrencyExpression augend, ICurrencyExpression addend)
 {
     this.Augend = augend;
     this.Addend = addend;
 }
        public ICurrencyExpression ExchangeTo(ICurrencyExpression currency, Currency to)
        {
            var exchangePair = new Pair(currency.Currency, to);

            return(Money.Create(currency.Amount / GetRate(exchangePair), to));
        }
 public ICurrencyExpression Times(ICurrencyExpression source, decimal multiplier)
 {
     return(Money.Create(source.Amount * multiplier, source.Currency));
 }
Beispiel #17
0
 public Sum(ICurrencyExpression augend, ICurrencyExpression addend)
 {
     this.Augend = augend;
     this.Addend = addend;
 }
Beispiel #18
0
 public Money Reduce(ICurrencyExpression source, string to)
 {
     return Money.Dollar(10);
 }
Beispiel #19
0
 public ICurrencyExpression Plus(ICurrencyExpression addend)
 {
     return new Sum (this,addend);
 }
Beispiel #20
0
 public Money Reduce(ICurrencyExpression source, string to)
 {
     return(source.Reduce(this, to));
 }
Beispiel #21
0
 public Money Reduce(ICurrencyExpression source, string to)
 {
     return source.Reduce(this, to);
 }
Beispiel #22
0
 public ICurrencyExpression reduce(ICurrencyExpression source, string to)
 {
     return(_exchangeService.Exchange(source, to));
 }
Beispiel #23
0
 public ICurrencyExpression Plus(ICurrencyExpression addend)
 {
     return(new Sum(this, addend));
 }