public void When_ExchangeMoney_Then_ShouldReturn_ExpectedValue(decimal balance, decimal amount, decimal expected)
        {
            var currencyFrom = new Currency()
            {
                Name = "USD"
            };
            var currencyTo = new Currency()
            {
                Name = "PHP"
            };

            var user = new MoneyExchange.User.Domain.Models.User()
            {
                Balances = new List <Balance>()
                {
                    new Balance()
                    {
                        Id       = 1,
                        Currency = currencyFrom,
                        Amount   = balance
                    }
                }
            };

            user.ExchangeMoney(new Money(amount, currencyFrom), currencyTo);

            user.GetBalance()[currencyFrom.Name].ShouldBe(expected);
        }
        public void When_AddMoney_Then_ShouldReturn_ExpectedValue(decimal input1, decimal input2, decimal expected)
        {
            var currency = new Currency()
            {
                Name = "USD"
            };

            var user = new MoneyExchange.User.Domain.Models.User()
            {
                Balances = new List <Balance>()
                {
                    new Balance()
                    {
                        Id       = 1,
                        Currency = currency,
                        Amount   = 0
                    }
                }
            };

            user.AddMoney(new Money(input1, currency));
            user.AddMoney(new Money(input2, currency));

            user.GetBalance()[currency.Name].ShouldBe(expected);
        }
        public void When_ExchangeMoney_And_InsufficientBalance_Then_ShouldReturn_Exception()
        {
            try
            {
                var currency = new Currency()
                {
                    Name = "USD"
                };

                var user = new MoneyExchange.User.Domain.Models.User()
                {
                    Balances = new List <Balance>()
                    {
                        new Balance()
                        {
                            Currency = currency,
                            Amount   = 20
                        }
                    }
                };

                user.ExchangeMoney(new Money(90, currency), currency);

                Assert.Fail();
            }
            catch (Exception e)
            {
                Assert.Pass();
            }
        }
        public void When_GetBalance_And_NoCurrencyFound_Then_ShouldReturn_Null()
        {
            var user = new MoneyExchange.User.Domain.Models.User()
            {
                Balances = new List <Balance>()
            };

            var result = user.GetBalance("");

            result.ShouldBeNull();
        }