예제 #1
0
        private IBankAccountDailyBalances BuildDailyBalances()
        {
            // Arrange
            IBankAccountDailyBalances dailyBalances = new BankAccountDailyBalances(0.0);

            var parameters = new List <(string Date, double Value)>()
            {
                ("01/10/2020 00:00:00", 1.0),
                ("01/10/2020 01:00:00", 1.0),
                ("01/10/2020 02:00:00", 1.0),
                ("02/15/2020 03:00:00", 2.0),
                ("02/15/2020 04:00:00", 2.0),
                ("02/15/2020 05:00:00", 2.0),
                ("04/01/2020 06:00:00", 3.0),
                ("04/01/2020 07:00:00", 3.0),
                ("04/01/2020 08:00:00", 3.0),
            };

            var transactions = new List <FinancialTransactionDto>();

            foreach (var param in parameters)
            {
                transactions.Add(new FinancialTransactionDto(DateTime.Parse(param.Date), "Ledger", param.Value, "Company"));
            }

            dailyBalances.InsertBatchOfNewTransactions(transactions);
            return(dailyBalances);
        }
예제 #2
0
        public void InsertBatchOfNewTransactions_SingleDayThreeTransactions_ReturnsExpectedBalance()
        {
            // Arrange
            IBankAccountDailyBalances dailyBalances = new BankAccountDailyBalances(0.0);

            var parameters = new List <(string Date, double Value)>()
            {
                ("01/01/2020 00:00:00", 1.0),
                ("01/01/2020 00:00:00", 2.0),
                ("01/01/2020 00:00:00", 3.0),
            };

            var transactions = new List <FinancialTransactionDto>();

            foreach (var param in parameters)
            {
                transactions.Add(new FinancialTransactionDto(DateTime.Parse(param.Date), "Ledger", param.Value, "Company"));
            }

            // Act
            dailyBalances.InsertBatchOfNewTransactions(transactions);

            // Assert
            dailyBalances.LastDailyEndingBalance.ShouldEqual(6);
        }
예제 #3
0
        public void GetAllDailyBalances_EmptyDailyBalance_ReturnsEmptyArray()
        {
            // Arrange
            IBankAccountDailyBalances dailyBalances = new BankAccountDailyBalances(0.0);

            // Act
            var expectedBalances = dailyBalances.GetAllDailyBalances();

            // Assert
            expectedBalances.Count.ShouldEqual(0);
        }
예제 #4
0
        public void ForEach_EmptyDailyBalance_DoesNotExecuteAnything()
        {
            // Arrange
            IBankAccountDailyBalances dailyBalances = new BankAccountDailyBalances(0.0);
            int count = 0;

            // Act
            dailyBalances.ForEach(dailyBalance => count += 1);

            // Assert
            count.ShouldEqual(0);
        }
예제 #5
0
        public void InsertSingleNewTransaction_WithCombinationsOfStartAndTransactValues_ReturnsExpectedBalance(double startingValue, double transactionValue, double expectedValue)
        {
            // Arrange
            IBankAccountDailyBalances dailyBalances = new BankAccountDailyBalances(startingValue);
            FinancialTransactionDto   transaction   = new FinancialTransactionDto(DateTime.Parse("01/01/2020 00:00:00"), "Ledger", transactionValue, "Company");

            // Act
            dailyBalances.InsertSingleNewTransaction(transaction);

            // Assert
            dailyBalances.LastDailyEndingBalance.ShouldEqual(expectedValue);
        }
예제 #6
0
        public void InsertBatchOfNewTransactions_ThreeSparseDaysThreeTransactionsEach_ReturnsExpectedDailyBalance()
        {
            // Arrange
            IBankAccountDailyBalances dailyBalances = new BankAccountDailyBalances(0.0);

            var parameters = new List <(string Date, double Value)>()
            {
                ("01/01/2020 00:00:00", 1.0),
                ("01/01/2020 01:00:00", 1.0),
                ("01/01/2020 02:00:00", 1.0),
                ("02/15/2020 03:00:00", 2.0),
                ("02/15/2020 04:00:00", 2.0),
                ("02/15/2020 05:00:00", 2.0),
                ("04/01/2020 06:00:00", 3.0),
                ("04/01/2020 07:00:00", 3.0),
                ("04/01/2020 08:00:00", 3.0),
            };

            var transactions = new List <FinancialTransactionDto>();

            foreach (var param in parameters)
            {
                transactions.Add(new FinancialTransactionDto(DateTime.Parse(param.Date), "Ledger", param.Value, "Company"));
            }

            // Act
            dailyBalances.InsertBatchOfNewTransactions(transactions);

            // Assert
            var balances = dailyBalances.GetAllDailyBalances();

            balances.Count.ShouldEqual(3);
            balances[0].Date.ShouldEqual(DateTime.Parse("01/01/2020 00:00:00"));
            balances[0].StartingBalance.ShouldEqual(0);
            balances[0].TotalTransactionSum.ShouldEqual(3);
            balances[0].EndingBalance.ShouldEqual(3);

            balances[1].Date.ShouldEqual(DateTime.Parse("02/15/2020 00:00:00"));
            balances[1].StartingBalance.ShouldEqual(3);
            balances[1].TotalTransactionSum.ShouldEqual(6);
            balances[1].EndingBalance.ShouldEqual(9);

            balances[2].Date.ShouldEqual(DateTime.Parse("04/01/2020 00:00:00"));
            balances[2].StartingBalance.ShouldEqual(9);
            balances[2].TotalTransactionSum.ShouldEqual(9);
            balances[2].EndingBalance.ShouldEqual(18);
        }
예제 #7
0
        public void ForEach_SingleDailyBalance_EachDailyBalanceIsSeen()
        {
            // Arrange
            IBankAccountDailyBalances dailyBalances = new BankAccountDailyBalances(0.0);
            FinancialTransactionDto   transaction   = new FinancialTransactionDto(DateTime.Parse("01/01/2020 00:00:00"), "Ledger", 20.0, "Company");

            dailyBalances.InsertSingleNewTransaction(transaction);
            var             expectedBalances = dailyBalances.GetAllDailyBalances();
            List <DateTime> expectedDays     = new List <DateTime>();
            List <DateTime> visitedDays      = new List <DateTime>();

            dailyBalances.ForEach(dailyBalance => expectedDays.Add(dailyBalance.Date));

            // Act
            dailyBalances.ForEach(dailyBalance => visitedDays.Add(dailyBalance.Date));

            // Assert
            visitedDays.Count.ShouldEqual(expectedBalances.Count);
            expectedDays.ShouldEqual(visitedDays);
        }