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); }
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)); }
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); }
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); }
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))); }
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); }
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); }
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)); }
public Sum(ICurrencyExpression augend, ICurrencyExpression addend) { this.Augend = augend; this.Addend = addend; }
public Money Reduce(ICurrencyExpression source, string to) { return Money.Dollar(10); }
public ICurrencyExpression Plus(ICurrencyExpression addend) { return new Sum (this,addend); }
public Money Reduce(ICurrencyExpression source, string to) { return(source.Reduce(this, to)); }
public Money Reduce(ICurrencyExpression source, string to) { return source.Reduce(this, to); }
public ICurrencyExpression reduce(ICurrencyExpression source, string to) { return(_exchangeService.Exchange(source, to)); }
public ICurrencyExpression Plus(ICurrencyExpression addend) { return(new Sum(this, addend)); }