public void AccountName_is_blank_if_Account_property_is_not_set_on_transaction() { var transaction = new Transaction(_journal, TransactionDirection.In); var vm = new TransactionViewModel(transaction, _mockAccountRepository); Assert.AreEqual("", vm.AccountName); }
public void cannot_change_attribtes_when_journal_has_been_verified() { var journal = new Journal(_today, "Morrisons"); var t1 = new Transaction(journal, TransactionDirection.Out, amount: 9.99M, account: _creditCard); var t2 = new Transaction(journal, TransactionDirection.In, amount: 8.545M, account: _groceries); new Transaction(journal, TransactionDirection.In, amount: 1.445M, account: _toiletries); journal.IsLocked = true; Assert.Throws<VerifiedJournalCannotBeModifiedException>(() => journal.Date = DateTime.Now); Assert.AreEqual(_today, journal.Date); Assert.Throws<VerifiedJournalCannotBeModifiedException>(() => journal.Description = "Morrisons 2"); Assert.AreEqual("Morrisons", journal.Description); Assert.Throws<VerifiedJournalCannotBeModifiedException>(() => journal.DeleteTransaction(t1)); Assert.IsTrue(journal.Transactions.Contains(t1)); Assert.Throws<VerifiedJournalCannotBeModifiedException>(() => new Transaction(journal, TransactionDirection.In)); Assert.AreEqual(3, journal.Transactions.Count); Assert.Throws<TransactionIsLockedAndCannotBeModifiedException>(() => t1.Amount = 2M); Assert.AreEqual(9.99M, t1.Amount); Assert.Throws<TransactionIsLockedAndCannotBeModifiedException>(() => t1.Account = _toiletries); Assert.AreEqual(_creditCard, t1.Account); Assert.Throws<TransactionIsLockedAndCannotBeModifiedException>(() => t1.Note = "New note"); Assert.AreEqual("", t1.Note); Assert.Throws<TransactionIsLockedAndCannotBeModifiedException>(() => t2.Direction = TransactionDirection.Out); Assert.AreEqual(TransactionDirection.In, t2.Direction); }
public void AccountBackgroundColour_is_pink_when_AccountName_is_invalid() { var transaction = new Transaction(_journal, TransactionDirection.Out, null, 123.45M); var vm = new TransactionViewModel(transaction, _mockAccountRepository); var pink = new SolidColorBrush(Colors.Pink); Assert.AreEqual(pink.ToString(), vm.AccountBackgroundColour.ToString()); }
public void AccountBackgroundColour_is_white_when_AccountName_is_valid() { var transaction = new Transaction(_journal, TransactionDirection.In, _account); var vm = new TransactionViewModel(transaction, _mockAccountRepository); var white = new SolidColorBrush(Colors.White); Assert.AreEqual(white.ToString(), vm.AccountBackgroundColour.ToString()); }
public void can_create_new_Transaction() { var transaction = new Transaction(_journal, TransactionDirection.In, _account, amount: 10.58M, note:"Test Transaction"); Assert.AreEqual(_journal, transaction.Journal); Assert.AreEqual(TransactionDirection.In, transaction.Direction); Assert.AreEqual(_account, transaction.Account); Assert.AreEqual(10.58M, transaction.Amount); Assert.AreEqual("Test Transaction", transaction.Note); Assert.IsTrue(transaction.IsValid); }
public void can_create_new_Transaction_without_optional_parameters() { var transaction = new Transaction(_journal, TransactionDirection.In, _account); Assert.AreEqual(_journal, transaction.Journal); Assert.AreEqual(TransactionDirection.In, transaction.Direction); Assert.AreEqual(_account, transaction.Account); Assert.AreEqual(0M, transaction.Amount); Assert.AreEqual("", transaction.Note); Assert.IsFalse(transaction.IsValid); }
public void cannot_update_or_edit_transaction_if_it_belongs_to_a_locked_Journal() { var journal2 = new Journal(3, DateTime.Today); var tran1 = new Transaction(journal2, TransactionDirection.In, _account, 10M, "Stylophone"); new Transaction(journal2, TransactionDirection.Out, _account, 10M); journal2.IsLocked = true; Assert.Throws<TransactionIsLockedAndCannotBeModifiedException>(() => tran1.Direction = TransactionDirection.Out); Assert.Throws<TransactionIsLockedAndCannotBeModifiedException>(() => tran1.Account = _account2); Assert.Throws<TransactionIsLockedAndCannotBeModifiedException>(() => tran1.Amount = 100.99M); Assert.Throws<TransactionIsLockedAndCannotBeModifiedException>(() => tran1.Note = ""); }
public TransactionViewModel(Transaction transaction, IAccountRepository accountRepository, IMainWindowViewModel mainWindow = null) { if (transaction == null) throw new ArgumentNullException("transaction"); if (accountRepository == null) throw new ArgumentNullException("accountRepository"); _transaction = transaction; _accountRepository = accountRepository; if (_transaction.Amount != 0M) _hasAmountBeenEdited = true; _mainWindow = mainWindow; }
public void AccountNames_retrurns_all_names_from_account_repository() { var transaction = new Transaction(_journal, TransactionDirection.In, _account); var vm = new TransactionViewModel(transaction, _mockAccountRepository); var account1 = new Account(0, "Account Name 1", AccountType.Asset); var account2 = new Account(0, "Account Name 2", AccountType.Liability); var accounts = new Account[2]; accounts[0] = account1; accounts[1] = account2; Expect.Once.On(_mockAccountRepository).Method("GetAll").Will(Return.Value(accounts)); var accountNames = vm.AccountNames; Assert.AreEqual(2, accountNames.Count()); Assert.AreEqual(account1.Name, accountNames[0]); Assert.AreEqual(account2.Name, accountNames[1]); _mocks.VerifyAllExpectationsHaveBeenMet(); }
public void TransactionModified_is_called_if_Account_is_changed() { var transaction = new Transaction(_journal, TransactionDirection.In); var vm = new TransactionViewModel(transaction, _mockAccountRepository); bool hasTransactionModifiedBeenCalled = false; vm.TransactionModified += (o, e) => { hasTransactionModifiedBeenCalled = true; }; Expect.Once.On(_mockAccountRepository).Method("GetByName").With("HSBC Current").Will(Return.Value(_account)); vm.AccountName = "HSBC Current"; Assert.IsTrue(hasTransactionModifiedBeenCalled); }
public void ToggleDirectionText_is_lt_when_TransactionDirection_is_In() { var transaction = new Transaction(_journal, TransactionDirection.In); var vm = new TransactionViewModel(transaction, _mockAccountRepository); Assert.AreEqual("In", vm.ToggleDirectionText); }
public void ToggleDirectionCommand_toggles_transaction_direction(TransactionDirection initialDirection, TransactionDirection toggledDirection) { var transaction = new Transaction(_journal, initialDirection); var vm = new TransactionViewModel(transaction, _mockAccountRepository); vm.PropertyChanged += _changeCounter.HandlePropertyChange; bool hasTransactionModifiedBeenCalled = false; vm.TransactionModified += (o, e) => { hasTransactionModifiedBeenCalled = true; }; vm.ToggleDirectionCommand.Execute(null); Assert.AreEqual(toggledDirection, transaction.Direction); Assert.AreEqual(7, _changeCounter.NoOfPropertiesChanged); Assert.AreEqual(7, _changeCounter.TotalChangeCount); Assert.AreEqual(1, _changeCounter.ChangeCount("ToggleDirectionText")); Assert.AreEqual(1, _changeCounter.ChangeCount("AmountIn")); Assert.AreEqual(1, _changeCounter.ChangeCount("AmountOut")); Assert.AreEqual(1, _changeCounter.ChangeCount("IsAmountInEnabled")); Assert.AreEqual(1, _changeCounter.ChangeCount("IsAmountOutEnabled")); Assert.AreEqual(1, _changeCounter.ChangeCount("AmountInBackgroundColour")); Assert.AreEqual(1, _changeCounter.ChangeCount("AmountOutBackgroundColour")); Assert.IsTrue(hasTransactionModifiedBeenCalled); }
public void AmountInBackgroundColour_is_pink_when_AmountIn_is_invalid() { var transaction = new Transaction(_journal, TransactionDirection.In, _account); var vm = new TransactionViewModel(transaction, _mockAccountRepository); var white = new SolidColorBrush(Colors.White); var pink = new SolidColorBrush(Colors.Pink); Assert.AreEqual(pink.ToString(), vm.AmountInBackgroundColour.ToString()); Assert.AreEqual(white.ToString(), vm.AmountOutBackgroundColour.ToString()); }
public void cannot_set_amountOut_on_transaction_with_in_TransactionDirection() { var transaction = new Transaction(_journal, TransactionDirection.In, amount: 0.99M); var vm = new TransactionViewModel(transaction, _mockAccountRepository); vm.PropertyChanged += _changeCounter.HandlePropertyChange; vm.AmountOut = "1234.56"; Assert.AreEqual(0.99M, transaction.Amount); Assert.AreEqual(2, _changeCounter.NoOfPropertiesChanged); Assert.AreEqual(2, _changeCounter.TotalChangeCount); }
private void SetUpValidJournalVM() { _date = new DateTime(2011, 1, 28); _journal = new Journal(_date, "Morrisons"); var fromAccount = new Account(1, "Bank", AccountType.Asset); var toAccount = new Account(2, "Food", AccountType.Expense); _tran1 = new Transaction(_journal, TransactionDirection.In, amount: 123.45M, account: fromAccount); _tran2 = new Transaction(_journal, TransactionDirection.Out, amount: 123.45M, account: toAccount); _vm = new JournalViewModel(_journal, _mockJournalRepository, _mockAccountRepository); _vm.PropertyChanged += _changeCounter.HandlePropertyChange; }
public void when_AccountName_is_set_to_an_nonexistent_account_name_no_change_is_made() { var transaction = new Transaction(_journal, TransactionDirection.In, _account); var vm = new TransactionViewModel(transaction, _mockAccountRepository); vm.PropertyChanged += _changeCounter.HandlePropertyChange; bool hasTransactionModifiedBeenCalled = false; vm.TransactionModified += (o, e) => { hasTransactionModifiedBeenCalled = true; }; Expect.Once.On(_mockAccountRepository).Method("GetByName").With("Nonexistent Account").Will(Return.Value(null)); vm.AccountName = "Nonexistent Account"; Assert.AreEqual("", vm.AccountName); Assert.AreEqual(null, transaction.Account); Assert.IsTrue(hasTransactionModifiedBeenCalled); Assert.AreEqual(2, _changeCounter.NoOfPropertiesChanged); Assert.AreEqual(2, _changeCounter.TotalChangeCount); Assert.AreEqual(1, _changeCounter.ChangeCount("AccountName")); Assert.AreEqual(1, _changeCounter.ChangeCount("AccountBackgroundColour")); _mocks.VerifyAllExpectationsHaveBeenMet(); }
private void SetUpInValidJournalVM() { _date = new DateTime(2011, 1, 28); _journal = new Journal(_date, "Morrisons"); _tran1 = new Transaction(_journal, TransactionDirection.In, amount: 123.45M); _tran2 = new Transaction(_journal, TransactionDirection.Out, amount: 543.21M); _vm = new JournalViewModel(_journal, _mockJournalRepository, _mockAccountRepository); _vm.PropertyChanged += _changeCounter.HandlePropertyChange; }
public void AmountOutBackgroundColour_is_white_when_AmountOut_is_valid() { var transaction = new Transaction(_journal, TransactionDirection.Out, null, 123.45M); var vm = new TransactionViewModel(transaction, _mockAccountRepository); var white = new SolidColorBrush(Colors.White); Assert.AreEqual(white.ToString(), vm.AmountOutBackgroundColour.ToString()); Assert.AreEqual(white.ToString(), vm.AmountInBackgroundColour.ToString()); }
public void IsAmountOutEnabled_is_true_and_IsAmountInEnabled_is_false_when_transaction_is_Out_direction() { var transaction = new Transaction(_journal, TransactionDirection.Out, amount: 1234.56M); var vm = new TransactionViewModel(transaction, _mockAccountRepository); Assert.IsTrue(vm.IsAmountOutEnabled); Assert.IsFalse(vm.IsAmountInEnabled); }
public void exception_raised_if_you_create_new_TransactionViewModel_with_null_accountRepository() { var transaction = new Transaction(_journal, TransactionDirection.In, _account, 123.45M, "100EUR"); Assert.Throws<ArgumentNullException>(() => new TransactionViewModel(transaction, null)); }
public void can_set_note_on_the_transation() { var transaction = new Transaction(_journal, TransactionDirection.Out, amount: 1234.56M, note:"George Foreman Grill"); var vm = new TransactionViewModel(transaction, _mockAccountRepository); vm.PropertyChanged += _changeCounter.HandlePropertyChange; vm.TransactionNote = "George Foreman Deluxe Grille"; Assert.AreEqual("George Foreman Deluxe Grille", vm.TransactionNote); Assert.AreEqual("George Foreman Deluxe Grille", transaction.Note); Assert.AreEqual(1, _changeCounter.NoOfPropertiesChanged); Assert.AreEqual(1, _changeCounter.TotalChangeCount); Assert.AreEqual(1, _changeCounter.ChangeCount("TransactionNote")); }
public void can_set_amountIn() { var transaction = new Transaction(_journal, TransactionDirection.In); var vm = new TransactionViewModel(transaction, _mockAccountRepository); vm.PropertyChanged += _changeCounter.HandlePropertyChange; vm.AmountIn = "1,234.56"; Assert.AreEqual("1,234.56", vm.AmountIn); Assert.AreEqual(1234.56M, transaction.Amount); Assert.AreEqual(2, _changeCounter.NoOfPropertiesChanged); Assert.AreEqual(2, _changeCounter.TotalChangeCount); Assert.AreEqual(1, _changeCounter.ChangeCount("AmountIn")); Assert.AreEqual(1, _changeCounter.ChangeCount("AmountInBackgroundColour")); }
public void can_create_new_TransactionViewModel() { var transaction = new Transaction(_journal, TransactionDirection.In, _account, 123.45M, "100EUR"); var vm = new TransactionViewModel(transaction, _mockAccountRepository); Assert.AreEqual("HSBC Current", vm.AccountName); Assert.AreEqual("100EUR", vm.TransactionNote); Assert.AreEqual("", vm.AmountOut); Assert.AreEqual("123.45", vm.AmountIn); Assert.IsTrue(vm.TransactionValid); }
public void setting_amountOut_to_the_same_value_does_not_cause_update() { var transaction = new Transaction(_journal, TransactionDirection.Out, amount: 1234.56M); var vm = new TransactionViewModel(transaction, _mockAccountRepository); vm.PropertyChanged += _changeCounter.HandlePropertyChange; vm.AmountOut = "1,234.56"; Assert.AreEqual("1,234.56", vm.AmountOut); Assert.AreEqual(1234.56M, transaction.Amount); Assert.AreEqual(0, _changeCounter.NoOfPropertiesChanged); Assert.AreEqual(0, _changeCounter.TotalChangeCount); }
public void TransactionModified_is_called_if_AmountOut_is_changed() { var transaction = new Transaction(_journal, TransactionDirection.Out); var vm = new TransactionViewModel(transaction, _mockAccountRepository); bool hasTransactionModifiedBeenCalled = false; vm.TransactionModified += (o, e) => { hasTransactionModifiedBeenCalled = true; }; vm.AmountOut = "1234.56"; Assert.IsTrue(hasTransactionModifiedBeenCalled); }
public void setting_an_invalid_AmountOut_makes_amount_zero() { var transaction = new Transaction(_journal, TransactionDirection.Out, amount:1234.56M); var vm = new TransactionViewModel(transaction, _mockAccountRepository); vm.PropertyChanged += _changeCounter.HandlePropertyChange; vm.AmountOut = "invalid"; Assert.AreEqual("1,234.56", vm.AmountOut); Assert.AreEqual(1234.56M, transaction.Amount); Assert.AreEqual(2, _changeCounter.NoOfPropertiesChanged); Assert.AreEqual(2, _changeCounter.TotalChangeCount); Assert.AreEqual(1, _changeCounter.ChangeCount("AmountOut")); Assert.AreEqual(1, _changeCounter.ChangeCount("AmountOutBackgroundColour")); }
public void when_AccountName_is_set_to_the_same_name_nothing_happens() { var transaction = new Transaction(_journal, TransactionDirection.In, _account); var vm = new TransactionViewModel(transaction, _mockAccountRepository); vm.PropertyChanged += _changeCounter.HandlePropertyChange; bool hasTransactionModifiedBeenCalled = false; vm.TransactionModified += (o, e) => { hasTransactionModifiedBeenCalled = true; }; vm.AccountName = "HSBC Current"; Assert.IsFalse(hasTransactionModifiedBeenCalled); Assert.AreEqual(0, _changeCounter.NoOfPropertiesChanged); Assert.AreEqual(0, _changeCounter.TotalChangeCount); _mocks.VerifyAllExpectationsHaveBeenMet(); }
public void setting_note_to_the_same_value_does_not_cause_update() { var transaction = new Transaction(_journal, TransactionDirection.Out, amount: 1234.56M, note: "George Foreman Grill"); var vm = new TransactionViewModel(transaction, _mockAccountRepository); vm.PropertyChanged += _changeCounter.HandlePropertyChange; vm.TransactionNote = "George Foreman Grill"; Assert.AreEqual("George Foreman Grill", vm.TransactionNote); Assert.AreEqual("George Foreman Grill", transaction.Note); Assert.AreEqual(0, _changeCounter.NoOfPropertiesChanged); Assert.AreEqual(0, _changeCounter.TotalChangeCount); }
public void setting_amountOut_on_transaction_with_in_TransactionDirection_has_no_affect() { var transaction = new Transaction(_journal, TransactionDirection.In); var vm = new TransactionViewModel(transaction, _mockAccountRepository); vm.PropertyChanged += _changeCounter.HandlePropertyChange; vm.AmountOut = "1234.56"; vm.AmountIn = "543.21"; Assert.AreEqual("", vm.AmountOut); Assert.AreEqual("543.21", vm.AmountIn); Assert.AreEqual(4, _changeCounter.NoOfPropertiesChanged); Assert.AreEqual(4, _changeCounter.TotalChangeCount); }
public void Amount_properties_format_values_just_the_way_I_want_them_to() { var transaction1 = new Transaction(_journal, TransactionDirection.Out, _account, 12345.67899M, "100EUR"); var transaction2 = new Transaction(_journal, TransactionDirection.In, _account, 0.095M, "100EUR"); var vm1 = new TransactionViewModel(transaction1, _mockAccountRepository); var vm2 = new TransactionViewModel(transaction2, _mockAccountRepository); Assert.AreEqual("12,345.67899", vm1.AmountOut); Assert.AreEqual("0.095", vm2.AmountIn); }