public void TestCalculateInterestToDate()
        {
            ReadifyBank testBank = new ReadifyBank();
            IAccount    john     = testBank.OpenHomeLoanAccount("John");

            testBank.PerformDeposit(john, 1000, "deposit 1000.");
            IAccount jack = testBank.OpenSavingsAccount("jack");

            testBank.PerformDeposit(jack, 1000, "deposit 1000.");

            // Test for invalid toDate
            DateTimeOffset invalidToDate   = DateTimeOffset.Now.LocalDateTime.AddDays(-60);
            decimal        interestForJohn = testBank.CalculateInterestToDate(john, invalidToDate);
            decimal        interestForJack = testBank.CalculateInterestToDate(jack, invalidToDate);

            Assert.Equal(-1, interestForJohn);
            Assert.Equal(-1, interestForJack);

            // Test for valid toDate
            const int      ADD_DAYS = 60;
            DateTimeOffset toDate   = DateTimeOffset.Now.LocalDateTime.AddDays(ADD_DAYS);

            interestForJohn = testBank.CalculateInterestToDate(john, toDate);
            decimal LNInterestRate = interestForJohn * 365 / ADD_DAYS / 1000;

            Assert.True(LNInterestRate - 0.0399m < 0.0001m);
            interestForJack = testBank.CalculateInterestToDate(jack, toDate);
            decimal SVInterestRate = interestForJack * 365 / 12 / ADD_DAYS / 1000;

            Assert.True(SVInterestRate - 0.06m < 0.0001m);

            // Test for invalid account
            decimal interestForNull = testBank.CalculateInterestToDate(null, toDate);

            Assert.Equal(-1, interestForNull);
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            ReadifyBank bank = new ReadifyBank();
            IAccount    john = bank.OpenSavingsAccount("John");
            IAccount    jack = bank.OpenHomeLoanAccount("Jack");

            foreach (int i in Enumerable.Range(1, 9))
            {
                bank.OpenSavingsAccount("SCVustomer");
                bank.OpenHomeLoanAccount("LNCustomer");
            }
            Console.WriteLine(string.Format("After open 20 account. Total account number: {0}\n",
                                            bank.AccountList.Count));

            showCustomerInfo(john, bank);
            showCustomerInfo(jack, bank);
            foreach (int i in Enumerable.Range(1, 10))
            {
                bank.PerformDeposit(john, 100, "deposit 100");
                bank.PerformDeposit(jack, 50, "deposit 50");
            }
            Console.WriteLine("After deposit:");
            showCustomerInfo(john, bank);
            showCustomerInfo(jack, bank);

            foreach (int i in Enumerable.Range(1, 10))
            {
                bank.PerformWithdrawal(john, 20, "withdraw 20");
                bank.PerformWithdrawal(jack, 10, "withdraw 10");
            }
            Console.WriteLine("After withdrawal:");
            showCustomerInfo(john, bank);
            showCustomerInfo(jack, bank);

            bank.PerformTransfer(john, jack, 50, "lunch fee.");
            Console.WriteLine("After John transfer 50 to Jack:");
            showCustomerInfo(john, bank);
            showCustomerInfo(jack, bank);

            Console.WriteLine("When John transfor amount exceeds balance:");
            bank.PerformTransfer(john, jack, 800, "bill.");
            showCustomerInfo(john, bank);
            showCustomerInfo(jack, bank);

            Console.WriteLine("Calculate interest for 60 days for John and Jack:");
            DateTimeOffset toDate          = DateTimeOffset.Now.LocalDateTime.AddDays(60);
            decimal        interestForJohn = bank.CalculateInterestToDate(john, toDate);
            decimal        interestForJack = bank.CalculateInterestToDate(jack, toDate);

            Console.WriteLine(string.Format("The interest for John to 60 days later is: {0:C4}", interestForJohn));
            Console.WriteLine(string.Format("The interest for Jack to 60 days later is: {0:C4}\n", interestForJack));

            IEnumerable <IStatementRow> miniStatementOfJohn = bank.GetMiniStatement(john);
            IEnumerable <IStatementRow> miniStatementOfJack = bank.GetMiniStatement(jack);

            Console.WriteLine("Mini statement of John:");
            foreach (IStatementRow transaction in miniStatementOfJohn)
            {
                showTransactionInfo(transaction, bank);
            }
            Console.WriteLine("\nMini statement of Jack:");
            foreach (IStatementRow transaction in miniStatementOfJack)
            {
                showTransactionInfo(transaction, bank);
            }

            Console.WriteLine("\nNow close the account John:");
            IEnumerable <IStatementRow> allTransactionOfJohn = bank.CloseAccount(john);

            foreach (IStatementRow transaction in allTransactionOfJohn)
            {
                showTransactionInfo(transaction, bank);
            }
        }