private Entry GetEntry(DateTime date, decimal amount, Account account, EntryType entryType = EntryType.Debit) { var transaction = new IncomeTransaction { Date = date }; var entry = new Entry { Amount = amount, Account = account, Transaction = transaction, Type = entryType }; transaction.Entries.Add(entry); Repository.Save(transaction); return entry; }
public void Transaction_ShouldSetAndGet() { var transaction = new IncomeTransaction(); var entry = new Entry(); Assert.That(entry.Transaction, Is.Null); entry.Transaction = transaction; Assert.That(entry.Transaction, Is.EqualTo(transaction)); }
public void Date_ShouldSetAndGet() { var date = DateTime.Today.AddDays(1); var transaction = new IncomeTransaction(); Assert.That(transaction.Date, Is.Not.EqualTo(date)); transaction.Date = date; Assert.That(transaction.Date, Is.EqualTo(date)); }
public void Comments_ShouldSetAndGet() { const string comments = "something"; var transaction = new IncomeTransaction(); Assert.That(transaction.Comments, Is.Not.EqualTo(comments)); transaction.Comments = comments; Assert.That(transaction.Comments, Is.EqualTo(comments)); }
public void Delete_ShouldDeleteTransactionFromRepository() { var id = Guid.NewGuid(); var transaction = new IncomeTransaction(); _repository.Stub(x => x.Find<Transaction>(id)).Return(transaction); _repository.Expect(x => x.Delete(transaction)); var controller = GetController(); controller.Delete(id); _repository.VerifyAllExpectations(); }
public void CanSaveAndGetEntries() { var transaction = new IncomeTransaction(); transaction.Entries.Add(new Entry { Account = SaveAccount(new IncomeAccount()), Transaction = transaction }); transaction.Entries.Add(new Entry { Account = SaveAccount(new AssetAccount()), Transaction = transaction }); Repository.Save(transaction); var retrieved = Repository.Find<IncomeTransaction>(transaction.Id); Assert.That(retrieved, Is.Not.Null); Assert.That(retrieved.Entries.Count, Is.EqualTo(2)); Assert.That(retrieved.Entries.SingleOrDefault(x => x.Id == transaction.Entries[0].Id), Is.Not.Null); Assert.That(retrieved.Entries.SingleOrDefault(x => x.Id == transaction.Entries[1].Id), Is.Not.Null); }
public void CanSaveAndGet() { var transaction = new IncomeTransaction(); transaction.Date = DateTime.Today; transaction.Comments = "some comment"; Repository.Save(transaction); var retrieved = Repository.Find<IncomeTransaction>(transaction.Id); Assert.That(retrieved, Is.Not.Null); Assert.That(retrieved.Id, Is.EqualTo(transaction.Id)); Assert.That(retrieved.Date, Is.EqualTo(transaction.Date)); Assert.That(retrieved.Comments, Is.EqualTo(transaction.Comments)); }
public void Configure_ShouldSetPropertiesAsExpected() { const decimal amount = 100; var date = DateTime.Today.AddDays(1); const string comments = "something"; var incomeAccount = new IncomeAccount(); var assetAccount = new AssetAccount(); var transaction = new IncomeTransaction(); transaction.Configure(amount) .ForDate(date) .WithComments(comments) .IncomeAccount(incomeAccount) .AccountToDebit(assetAccount); Assert.That(transaction.Date, Is.EqualTo(date)); Assert.That(transaction.Comments, Is.EqualTo(comments)); Assert.That(transaction.Entries.Count, Is.EqualTo(2)); Assert.That(transaction.Entries.Any(x => (x.Amount == amount) && (x.Type == EntryType.Credit) && (x.Account == incomeAccount)), Is.True); Assert.That(transaction.Entries.Any(x => (x.Amount == amount) && (x.Type == EntryType.Debit) && (x.Account == assetAccount)), Is.True); }
public void Entries_ShouldByEmptyByDefault() { var transaction = new IncomeTransaction(); Assert.That(transaction.Entries, Is.Empty); }
public void Edit_ShouldSaveTransactionToRepository() { const decimal amount = 100; var date = DateTime.Today.AddDays(1); const string comments = "something"; var incomeAccount = new IncomeAccount(); var assetAccount = new AssetAccount(); var IncomeTransaction = new IncomeTransaction(); var model = new EditModel(); model.Id = IncomeTransaction.Id; model.Amount = amount; model.Date = date; model.Comments = comments; model.SelectedIncomeAccountId = incomeAccount.Id; model.SelectedAssetAccountId = assetAccount.Id; _repository.Stub(x => x.Find<IncomeTransaction>(IncomeTransaction.Id)).Return(IncomeTransaction); _repository.Stub(x => x.Find<Account>(incomeAccount.Id)).Return(incomeAccount); _repository.Stub(x => x.Find<Account>(assetAccount.Id)).Return(assetAccount); _repository.Expect(x => x.Save(Arg<IncomeTransaction>.Matches( y => (y.Date == date) && (y.Comments == comments) && (y.Entries.Count == 2) && (y.Entries.Any(z => (z.Account.Id == incomeAccount.Id) && (z.Amount == amount) && (z.Type == EntryType.Credit))) && (y.Entries.Any(z => (z.Account.Id == assetAccount.Id) && (z.Amount == amount) && (z.Type == EntryType.Debit)))))).Return(null); var controller = GetController(); controller.Edit(model); _repository.VerifyAllExpectations(); }
public void Edit_ShouldReturnViewWithModel() { var incomeAccount1 = new IncomeAccount(); var incomeAccount2 = new IncomeAccount(); var assetAccount1 = new AssetAccount(); var assetAccount2 = new AssetAccount(); var accounts = new Account[] { incomeAccount1, incomeAccount2, assetAccount1, assetAccount2 }; const string comments = "something"; const decimal amount = 100; var date = DateTime.Today.AddDays(1); var IncomeTransaction = new IncomeTransaction(); IncomeTransaction.Configure(amount) .ForDate(date) .WithComments(comments) .IncomeAccount(incomeAccount2) .AccountToDebit(assetAccount2); _repository.Stub(x => x.Find<IncomeTransaction>(IncomeTransaction.Id)).Return(IncomeTransaction); _repository.Stub(x => x.Get<Account>()).Repeat.Times(2).Return(accounts); var controller = GetController(); var result = (ViewResult)controller.Edit(IncomeTransaction.Id); Assert.That(result.ViewName, Is.EqualTo("Edit")); var viewModel = (EditModel)result.Model; Assert.That(viewModel.Id, Is.EqualTo(IncomeTransaction.Id)); Assert.That(viewModel.IncomeAccounts.Count(), Is.EqualTo(2)); Assert.That(viewModel.IncomeAccounts.Any(x => x.Id == incomeAccount1.Id), Is.True); Assert.That(viewModel.IncomeAccounts.Any(x => x.Id == incomeAccount2.Id), Is.True); Assert.That(viewModel.SelectedIncomeAccountId, Is.EqualTo(incomeAccount2.Id)); Assert.That(viewModel.AssetAccounts.Count(), Is.EqualTo(2)); Assert.That(viewModel.AssetAccounts.Any(x => x.Id == assetAccount1.Id), Is.True); Assert.That(viewModel.AssetAccounts.Any(x => x.Id == assetAccount2.Id), Is.True); Assert.That(viewModel.SelectedAssetAccountId, Is.EqualTo(assetAccount2.Id)); Assert.That(viewModel.Date, Is.EqualTo(date)); Assert.That(viewModel.Amount, Is.EqualTo(amount)); Assert.That(viewModel.Comments, Is.EqualTo(comments)); }
public void Edit_ShouldReturnRedirectToIndex() { var IncomeTransaction = new IncomeTransaction(); var model = new EditModel(); model.Id = IncomeTransaction.Id; model.SelectedIncomeAccountId = Guid.NewGuid(); model.SelectedAssetAccountId = Guid.NewGuid(); _repository.Stub(x => x.Find<IncomeTransaction>(IncomeTransaction.Id)).Return(IncomeTransaction); _repository.Stub(x => x.Find<Account>(model.SelectedIncomeAccountId)).Return(new IncomeAccount()); _repository.Stub(x => x.Find<Account>(model.SelectedAssetAccountId)).Return(new AssetAccount()); var controller = GetController(); var result = (RedirectToRouteResult)controller.Edit(model); Assert.That(result.RouteValues["action"], Is.EqualTo("Index")); Assert.That(result.RouteValues["controller"], Is.EqualTo("Transaction")); }