public void FindAnAccountWithTransactionsThatDoesNotExistReturnsNull()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            var actual = service.FindAccountWithTransactions(999);

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

            var service = new RentalsService();

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

            Assert.IsNotNull(actual);
            Assert.AreEqual(0, actual.Transactions.Count);
        }
        public void FindAccountWithTransactionsOnSortableAccountWithDateTodayReturnsTransactionCollection()
        {
            DataHelper.NewDb();
            var accountId = DataHelper.Accounts.Where(a => a.Name == "Sortable Account").SingleOrDefault().Id;

            var service = new RentalsService();

            var expected = DataHelper.Transactions
                           .Where(t => t.AccountId == accountId &&
                                  t.Date == DateTime.Today);
            var actual = service.FindAccountWithTransactions(accountId, DateTime.Today, DateTime.Today);

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

            var service = new RentalsService();

            var actual = service.FindAccountWithTransactions(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);
            Assert.AreEqual(expected.Transactions.Count, actual.Transactions.Count);
        }
        public void FindingAnAccountWithTransactionsByIdAlsoReturnsABalanceForEachTransaction()
        {
            DataHelper.NewDb();

            var service = new RentalsService();

            var actual = service.FindAccountWithTransactions(1);

            var balance      = actual.OpeningBalance;
            var transactions = actual.Transactions.ToArray();

            foreach (var transaction in transactions)
            {
                balance += transaction.Amount;
                Assert.AreEqual(balance, transaction.Balance);
            }
        }
        public void FindAccountWithTransactionsOnSortableAccountWithDateRangeAndOrderAscendingReturnsSortedTransactionCollection()
        {
            DataHelper.NewDb();
            var accountId = DataHelper.Accounts.Where(a => a.Name == "Sortable Account").SingleOrDefault().Id;

            var service = new RentalsService();

            var expected = DataHelper.Transactions
                           .Where(t => t.AccountId == accountId &&
                                  t.Date >= DateTime.Today.AddMonths(-6) &&
                                  t.Date <= DateTime.Today);
            var actual = service.FindAccountWithTransactions(accountId, DateTime.Today.AddMonths(-6), DateTime.Today, true);

            Assert.IsNotNull(actual);
            var order = actual.Transactions.First().Amount;

            foreach (var transaction in actual.Transactions)
            {
                Assert.AreEqual(order, transaction.Amount);
                order += 1.00m;
            }
        }