コード例 #1
0
        public void Test_ComputeZopaLoanPool()
        {
            var zopaLoanPoolService = new ZopaLoanPoolService(_lenderData);

            var totalLoanAvailable = zopaLoanPoolService.ComputeZopaLoanPool();

            Assert.AreEqual(totalLoanAvailable, 1030);
        }
コード例 #2
0
        public void Test_CanZopaFulFillLoan_Given_Loan_Is_1400_Can_not_Fullfill()
        {
            var zopaLoanPoolService = new ZopaLoanPoolService(_lenderData);
            var loanRequest         = 1400;

            var isSatisfiable = zopaLoanPoolService.CanZopaFulFillLoan(loanRequest);

            Assert.IsFalse(isSatisfiable);
        }
コード例 #3
0
        static void Main(string[] args)
        {
            try
            {
                IZopaPrintAndIO    zopaPrintAndIOService = new ZopaPrintAndIOService();
                IList <LenderData> lenderData            = zopaPrintAndIOService.ReadCvsFile("market_data.txt");

                /*
                 * new List<LenderData>
                 * {
                 *  new LenderData {Available = 150, Lender = "Joe Blogs", Rate = (float) 0.052},
                 *  new LenderData {Available = 230, Lender = "Martin Okello", Rate = (float) 0.022},
                 *  new LenderData {Available = 650, Lender = "Joshua Lent", Rate = (float) 0.032}
                 * };*/

                decimal loanAmountRequest       = 1010;//decimal.Parse(args[1]);
                var     monthsDurationOfPayment = 36;

                if (args.Length > 0)
                {
                    lenderData        = zopaPrintAndIOService.ReadCvsFile(args[0]);
                    loanAmountRequest = decimal.Parse(args[1]);
                }


                IZopaLoanPool zopaLoanService = new ZopaLoanPoolService(lenderData);

                var canZopaSatisfy = zopaLoanService.CanZopaFulFillLoan(loanAmountRequest);
                if (canZopaSatisfy)
                {
                    ILowLoanLender lowLoanLenderService = new LowLenderService();


                    var lenderLowLenderSatisiyingList = lowLoanLenderService.GetLenderContributors(loanAmountRequest, lenderData);

                    IRepayment repaymentService = new RepaymentService(lowLoanLenderService);

                    var repaymentAmount = repaymentService.ComputeTotalRepaymentAmount(lenderLowLenderSatisiyingList);
                    var interestRate    = repaymentService.ComputeTotalRateOfRepayment(lenderLowLenderSatisiyingList);
                    var monthlyPayments = repaymentService.ComputeMonthlyRepaymentAmount(lenderLowLenderSatisiyingList, monthsDurationOfPayment);

                    zopaPrintAndIOService.PrintLine((decimal)repaymentService.RoundToTheNearest((double)loanAmountRequest, 2), (double)repaymentService.RoundToTheNearest(interestRate, 1), (decimal)repaymentService.RoundToTheNearest((double)monthlyPayments, 2), (decimal)repaymentService.RoundToTheNearest((double)repaymentAmount, 2));
                }
                else
                {
                    Console.Out.WriteLine(string.Format("Zopa cannot satisfy the loan request for £{0} Pounds",
                                                        loanAmountRequest));
                }
            }
            catch (Exception ex)
            {
                Console.Out.WriteLine("Your data may be inadequate for the machine. check the Program inputs");
            }
        }
コード例 #4
0
        public void Test_CanZopaFulFillLoan_Given_Loan_Is_15001_Or_999_Can_not_Fullfill()
        {
            var zopaLoanPoolService = new ZopaLoanPoolService(_lenderData);
            var loanRequest1        = 15001;
            var loanRequest2        = 999;

            var isSatisfiableloan1 = zopaLoanPoolService.CanZopaFulFillLoan(loanRequest1);
            var isSatisfiableloan2 = zopaLoanPoolService.CanZopaFulFillLoan(loanRequest1);

            Assert.IsFalse(isSatisfiableloan1 && isSatisfiableloan2);
        }