public void NoTransactionsExpectNoBalances()
        {
            var calculator = new BalanceCalculator();
            var amount     = new Amount()
            {
                AmountInPennies = 10, BalancePolarity = BalancePolarity.Credit
            };
            var now          = DateTime.Now.Date;
            var transactions = new List <Transaction>()
            {
            };

            var result = calculator.CalculateBalances(amount, transactions);

            Assert.Empty(result);
        }
        public void CalculationWithNegativeBalance()
        {
            var calculator = new BalanceCalculator();
            var amount     = new Amount()
            {
                AmountInPennies = 10, BalancePolarity = BalancePolarity.Credit
            };
            var now          = DateTime.Now.Date;
            var transactions = new List <Transaction>()
            {
                new Transaction()
                {
                    AmountInPennies = 2, BalancePolarity = BalancePolarity.Debit, BookingDate = now.AddDays(-1)
                },
                new Transaction()
                {
                    AmountInPennies = 13, BalancePolarity = BalancePolarity.Debit, BookingDate = now.AddDays(-2)
                },
                new Transaction()
                {
                    AmountInPennies = 5, BalancePolarity = BalancePolarity.Debit, BookingDate = now.AddDays(-4)
                },
            };

            var result = calculator.CalculateBalances(amount, transactions);

            Assert.Equal(3, result.Length);

            var yesterday   = result[0];
            var TwoDaysAgo  = result[1];
            var FourDaysAgo = result[2];

            Assert.True(yesterday.Date == now.AddDays(-1));
            Assert.True(yesterday.AmountInPennies == 8);

            Assert.True(TwoDaysAgo.Date == now.AddDays(-2));
            Assert.True(TwoDaysAgo.AmountInPennies == -5);

            Assert.True(FourDaysAgo.Date == now.AddDays(-4));
            Assert.True(FourDaysAgo.AmountInPennies == -10);
        }
        public void ExampleTest()
        {
            BalanceCalculator.Node[] tree =
            {
                new BalanceCalculator.Node(-2, -1,  1),
                new BalanceCalculator.Node(8,   3,  2),
                new BalanceCalculator.Node(9,  -1, -1),
                new BalanceCalculator.Node(3,   4,  5),
                new BalanceCalculator.Node(0,  -1, -1),
                new BalanceCalculator.Node(6,  -1, -1)
            };

            BalanceCalculator.DfsAsync(tree, tree[0]).Wait();

            tree[0].Balance.Should().Be(3);
            tree[1].Balance.Should().Be(-1);
            tree[2].Balance.Should().Be(0);
            tree[3].Balance.Should().Be(0);
            tree[4].Balance.Should().Be(0);
            tree[5].Balance.Should().Be(0);
        }
        public void TestBalanceCalculator()
        {
            BalanceCalculator bc = new BalanceCalculator();

            Assert.AreEqual(105, bc.EndBalance(100, 0.05m));
        }