public void GetAllTransactionsWhenSearchedOnAccountAndPayeeAndCategoryReturnsSortedTransactionCollection()
        {
            DataHelper.NewDb();
            var account    = "sort";
            var accountId  = DataHelper.Accounts.Where(a => a.Name.ToLower().Contains(account)).SingleOrDefault().Id;
            var payee      = "gas";
            var payeeId    = DataHelper.Payees.Where(a => a.Name.ToLower().Contains(payee)).SingleOrDefault().Id;
            var category   = "charges";
            var categoryId = DataHelper.Categories.Where(a => a.Name.ToLower().Contains(category)).SingleOrDefault().Id;

            var service = new RentalsService();

            var expectedAccountMatches = DataHelper.Transactions
                                         .Where(t => t.AccountId == accountId &&
                                                t.Date >= DateTime.Today.AddMonths(-6) &&
                                                t.Date <= DateTime.Today).Count();
            var expectedPayeeMatches = DataHelper.Transactions
                                       .Where(t => t.PayeeId == payeeId &&
                                              t.Date >= DateTime.Today.AddMonths(-6) &&
                                              t.Date <= DateTime.Today).Count();
            var expectedCategoryMatches = DataHelper.Transactions
                                          .Where(t => t.CategoryId == categoryId &&
                                                 t.Date >= DateTime.Today.AddMonths(-6) &&
                                                 t.Date <= DateTime.Today).Count();
            var actual = service.GetAllTransactionsWithAccountAndPayeeAndCategory(
                account, payee, category,
                DateTime.Today.AddMonths(-6), DateTime.Today, true);

            Assert.IsNotNull(actual);
            Assert.AreEqual(expectedAccountMatches, actual.Count(t => t.AccountId == accountId));
            Assert.AreEqual(expectedPayeeMatches, actual.Count(t => t.PayeeId == payeeId));
            Assert.AreEqual(expectedCategoryMatches, actual.Count(t => t.CategoryId == categoryId));
        }
        public void CanInsertNewTransactionWithANewAccountCategoryAndPayeeAndAllWillBeInserted()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            var transactionToAdd = new Transaction()
            {
                Date    = DateTime.Today,
                Amount  = 10.00m,
                Account = new Account()
                {
                    Name = "New Accoount", OpeningBalance = 0.00m
                },
                Payee = new Payee()
                {
                    Name = "New Payee", DefaultCategoryId = 1
                },
                Category = new Category()
                {
                    Name = "New Category", Type = CategoryType.Income
                },
                Reference = "Reference",
                Memo      = "Memo"
            };

            service.SaveNewTransaction(transactionToAdd);

            Assert.AreEqual(DataHelper.Transactions.Count + 1, service.GetNumberOfTransactions());
            Assert.AreEqual(DataHelper.Accounts.Count + 1, service.GetNumberOfAccounts());
            Assert.AreEqual(DataHelper.Payees.Count + 1, service.GetNumberOfPayees());
            Assert.AreEqual(DataHelper.Categories.Count + 1, service.GetNumberOfCategories());
        }
        public void GetAllTransactionsOnSortablePayeeWithDateRangeAndOrderDescendingReturnsSortedTransactionCollection()
        {
            DataHelper.NewDb();
            var payee   = "Sortable Payee";
            var payeeId = DataHelper.Payees.Where(a => a.Name == payee).SingleOrDefault().Id;

            var service = new RentalsService();

            var expected = DataHelper.Transactions
                           .Where(t => t.PayeeId == payeeId &&
                                  t.Date >= DateTime.Today.AddMonths(-6) &&
                                  t.Date <= DateTime.Today);
            var actual = service.GetAllTransactionsWithAccountAndPayeeAndCategory(
                null, payee, null,
                DateTime.Today.AddMonths(-6), DateTime.Today, false);

            Assert.IsNotNull(actual);

            var order = actual.First().Amount;

            foreach (var transaction in actual)
            {
                Assert.AreEqual(order, transaction.Amount);
                order -= 1.00m;
            }
        }
        public void CanGetNumberOfTransactions()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            Assert.AreEqual(DataHelper.Transactions.Count, service.GetNumberOfTransactions());
        }
        public void CanGetAnEmptyListOfAccounts()
        {
            DataHelper.NewDb(false);

            var service = new RentalsService();

            Assert.AreEqual(0, service.GetAllAccounts().Count);
        }
        public void CanGetNumberOfPayees()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            Assert.AreEqual(DataHelper.Payees.Count, service.GetNumberOfPayees());
        }
        public void CanGetAListOfAccounts()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            Assert.AreEqual(DataHelper.Accounts.Count, service.GetAllAccounts().Count);
        }
        public void GettingBalanceOfNonExistentAccountReturnsZero()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            Assert.AreEqual(0.00m, service.GetAccountBalance(999));
        }
        public void FindAnAccountWithTransactionsThatDoesNotExistReturnsNull()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            var actual = service.FindAccountWithTransactions(999);

            Assert.IsNull(actual);
        }
        public void CannotDeleteTransactionThatDoesNotExist()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            service.RemoveTransaction(999);

            Assert.Fail("Deleted a non-existent transaction");
        }
        public void CanDeleteTransaction()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            service.RemoveTransaction(1);

            Assert.AreEqual(DataHelper.Transactions.Count - 1, service.GetAllTransactionsWithAccountAndPayeeAndCategory().Count);
        }
        public void CanGetAccountBalanceByAccountId()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            Assert.AreEqual(DataHelper.GetAccountBalance(1), service.GetAccountBalance(1));
            Assert.AreEqual(DataHelper.GetAccountBalance(2), service.GetAccountBalance(2));
            Assert.AreEqual(DataHelper.GetAccountBalance(3), service.GetAccountBalance(3));
        }
        public void FindAPayeeThatDoesNotExistReturnsNull()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            var actual = service.FindPayee(999);

            Assert.IsNull(actual);
        }
        public void FindPayeeWithTransactionsWithDateTodayReturnsEmptyTransactionCollection()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            var actual = service.FindPayeeWithTransactions(1, DateTime.Today, DateTime.Today);

            Assert.IsNotNull(actual);
            Assert.AreEqual(0, actual.Transactions.Count);
        }
        public void GetAllTransactionsWithNoFilteringReturnsAllTransactionsCollection()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            var actual = service.GetAllTransactionsWithAccountAndPayeeAndCategory();

            Assert.IsNotNull(actual);
            Assert.AreEqual(DataHelper.Transactions.Count, actual.Count);
        }
        public void GetAllAccountsIncludesBalances()
        {
            DataHelper.NewDb();

            var service = new RentalsService();
            var actual  = new List <Account>(service.GetAllAccounts());

            Assert.AreEqual(DataHelper.Accounts.Count, actual.Count);
            Assert.AreEqual(DataHelper.GetAccountBalance(1), actual[0].Balance);
            Assert.AreEqual(DataHelper.GetAccountBalance(2), actual[1].Balance);
            Assert.AreEqual(DataHelper.GetAccountBalance(3), actual[2].Balance);
        }
        public async Task Update_CorrectData_RentalCreated()
        {
            var repository = MockRentalsRepository();
            var service    = new RentalsService(repository.Object);
            var rental     = new Rental {
                Id = 1, BookId = 1, CustomerId = Guid.NewGuid(), StartDate = new DateTime(2012, 12, 12)
            };

            await service.Update(rental);

            repository.Verify(repository => repository.Update(rental), Times.AtLeastOnce);
        }
        public void GetAllTransactionsWithDateTomorrowReturnsEmptyTransactionCollection()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            var actual = service.GetAllTransactionsWithAccountAndPayeeAndCategory(
                null, null, null,
                DateTime.Today.AddDays(1), DateTime.Today.AddDays(1));

            Assert.IsNotNull(actual);
            Assert.AreEqual(0, actual.Count);
        }
        public void CannotUpdateACategoryNameToTheSameNameAsAnExistingCategory()
        {
            DataHelper.NewDb();

            var service  = new RentalsService();
            var category = service.FindCategory(1);

            category.Name = "Utilities";

            service.SaveUpdatedCategory(category);

            Assert.Fail("Added an category with same name as an exiting category");
        }
        public void CannotUpdateATransactionToHaveAnAmountOfZero()
        {
            DataHelper.NewDb();

            var service     = new RentalsService();
            var transaction = service.FindTransaction(1);

            transaction.Amount = 0.00m;

            service.SaveUpdatedTransaction(transaction);

            Assert.Fail("Added an transaction with an amount of zero");
        }
        public void CannotUpdateAPayeeNameToTheSameNameAsAnExistingPayee()
        {
            DataHelper.NewDb();

            var service = new RentalsService();
            var payee   = service.FindPayee(1);

            payee.Name = "Renter B";

            service.SaveUpdatedPayee(payee);

            Assert.Fail("Added an payee with same name as an exiting payee");
        }
        public void CannotUpdateAnAccountNameToTheSameNameAsAnExistingAccount()
        {
            DataHelper.NewDb();

            var service = new RentalsService();
            var account = service.FindAccount(1);

            account.Name = "BankAccount3";

            service.SaveUpdatedAccount(account);

            Assert.Fail("Added an account with same name as an exiting account");
        }
        public void CanFindCategoryById()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            var actual = service.FindCategory(1);

            var expected = DataHelper.Categories.SingleOrDefault(c => c.Id == 1);

            Assert.AreEqual(expected.Name, actual.Name);
            Assert.AreEqual(expected.Type, actual.Type);
        }
        public void CanFindCategoryByIdWithAllItsTransactions()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            var actual = service.FindCategoryWithTransactions(1);

            var expected = DataHelper.Categories.SingleOrDefault(c => c.Id == 1);

            Assert.AreEqual(expected.Name, actual.Name);
            Assert.AreEqual(DataHelper.Transactions.Count(t => t.CategoryId == 1), actual.Transactions.Count);
        }
        public void CanFindAccountById()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            var actual = service.FindAccount(1);

            var expected = DataHelper.Accounts.SingleOrDefault(a => a.Id == 1);

            Assert.AreEqual(expected.Name, actual.Name);
            Assert.AreEqual(expected.OpeningBalance, actual.OpeningBalance);
            Assert.AreEqual(DataHelper.GetAccountBalance(1), actual.Balance);
        }
        public void CanGetTotalOfAccountBalances()
        {
            DataHelper.NewDb();

            var service = new RentalsService();
            var total   = 0.00m;

            foreach (var account in DataHelper.Accounts)
            {
                total += DataHelper.GetAccountBalance(account.Id);
            }

            Assert.AreEqual(total, service.GetTotalOfAccountBalances());
        }
        public void CanUpdatePayee()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            var    payee    = service.FindPayee(1);
            string expected = "Changed Name";

            payee.Name = expected;

            service.SaveUpdatedPayee(payee);

            Assert.AreEqual(expected, service.FindPayee(1).Name);
        }
        public void FindPayeeWithTransactionsOnSortablePayeeWithDateTodayReturnsTransactionCollection()
        {
            DataHelper.NewDb();
            var payeeId = DataHelper.Payees.Where(a => a.Name == "Sortable Payee").SingleOrDefault().Id;

            var service = new RentalsService();

            var expected = DataHelper.Transactions
                           .Where(t => t.PayeeId == payeeId &&
                                  t.Date == DateTime.Today);
            var actual = service.FindPayeeWithTransactions(payeeId, DateTime.Today, DateTime.Today);

            Assert.IsNotNull(actual);
            Assert.AreEqual(expected.Count(), actual.Transactions.Count);
        }
        public void CanFindPayeeByIdWithAllItsTransactions()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            var actual = service.FindPayeeWithTransactions(1);

            var expected = DataHelper.Payees.SingleOrDefault(p => p.Id == 1);

            Assert.AreEqual(expected.Name, actual.Name);
            Assert.AreEqual(expected.DefaultCategoryId, actual.DefaultCategoryId);
            Assert.AreEqual(expected.Memo, actual.Memo);
            Assert.AreEqual(expected.Transactions.Count, actual.Transactions.Count);
        }
        public void CanFindPayeeById()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            var actual = service.FindPayee(1);

            var expected = DataHelper.Payees.SingleOrDefault(p => p.Id == 1);

            Assert.AreEqual(expected.Name, actual.Name);
            Assert.AreEqual(expected.DefaultCategoryId, actual.DefaultCategoryId);
            Assert.AreEqual(expected.Memo, actual.Memo);
            Assert.IsNotNull(actual.DefaultCategory);
        }