public void NegativeBalancesSufferPenalties()
        {
            // Arrange
            HumanAcccountHolder hah = new HumanAcccountHolder("TestUser", "TestPass", new string[] { "First", "middle1", "middle2", "Last" });
            Currency fakeCurrency =  new Currency(1d, "fakemonies", '!');
            // Act

            Account acctDefault = new Account(hah, 50d, 200d, fakeCurrency);
            Transaction bigWithdrawal = new Transaction("Test over withdrawal", new Money(-400d,fakeCurrency), TransactionTypes.Withdrawal);
            acctDefault.PerformTransaction(bigWithdrawal);

            // Assert
            Assert.AreEqual(-250d, acctDefault.Balance.Value);
        }
        public InquiryResult PerformInquiry(Account selectedAccount, Command toPerform, IDataAccessLayer dal, params string[] parameters)
        {
            List<string> responses = new List<string>();
            List<string> followUps = new List<string>();

            switch (toPerform.Inquiry)
            {
                case TransactionTypes.BalanceInquiry:
                    responses.Add(string.Format("Current Balance is:  {0}", selectedAccount.Balance));
                    break;
                case TransactionTypes.Deposit:
                    double depositing = 0d;
                    if (parameters != null && parameters.Count() > 0 && double.TryParse(parameters[0], out depositing))
                    {
                        responses.Add(string.Format("Deposited:  {0}", depositing));
                        selectedAccount.PerformTransaction(new Transaction("Deposited Funds", new Money(depositing, selectedAccount.LocalCurrency), toPerform.Inquiry));
                    }
                    break;
                case TransactionTypes.Withdrawal:
                    double withdrawing = 0d;
                    if (parameters != null && parameters.Count() > 0 && double.TryParse(parameters[0], out withdrawing))
                    {
                        responses.Add(string.Format("Withdrew:  {0}", withdrawing));
                        selectedAccount.PerformTransaction(new Transaction("Withdrew Funds", -new Money(withdrawing, selectedAccount.LocalCurrency), toPerform.Inquiry));
                    }
                    break;
                case TransactionTypes.ChangeCurrency:
                    Currency toSwitch = selectedAccount.LocalCurrency;
                    if (parameters != null && parameters.Count() > 0)
                    {
                        foreach (Currency c in AvailableCurrencies.CurrencyList)
                        {
                            if (c.Name == parameters[0])
                            {
                                toSwitch = c;
                                responses.Add(string.Format("Switching to currency:  {0}", c.Name));
                            }
                        }
                    }
                    selectedAccount.SwitchAccountCurrency(toSwitch);
                    responses.Add(string.Format("Completed currency exchange."));
                    goto case TransactionTypes.BalanceInquiry;
                default:
                    break;
            }

            return new InquiryResult(responses, followUps);
        }