public void GetLoanPaymentOverwiew_ExpectedBehavior() { // Arrange var loanPaymentCalculatorInternal = new LoanPaymentCalculatorInternal(); var loanParameters = new LoanParameters { LoanAmount = 500000, DurationOfLoanInYears = 10, }; var loanTerms = new LoanTerms { AnnualInterestRate = 0.05m, PaymentsPerYear = 12, AdminFeeRelative = 0.01m, MaxAdminFee = 10000, }; // Act var result = loanPaymentCalculatorInternal.GetLoanPaymentOverwiew( loanParameters, loanTerms); // Assert Assert.Equal(500000, result.LoanAmount); Assert.Equal(10, result.DurationOfLoanInYears); Assert.Equal(5303.28m, result.MonthlyPayment); Assert.Equal(136393.09m, result.AmountPaidAsInterest); Assert.Equal(5000m, result.AdministrativeFee); }
public OverviewDetails GetLoanPaymentOverwiew(LoanParameters loanParameters, LoanTerms loanTerms) { var loanAmount = loanParameters.LoanAmount; var durationOfLoan = loanParameters.DurationOfLoanInYears; var annualInterestRate = loanTerms.AnnualInterestRate; var paymentsPerYear = loanTerms.PaymentsPerYear; var adminFeeRelative = loanTerms.AdminFeeRelative; var maxAdminFee = loanTerms.MaxAdminFee; var amountOfPayments = durationOfLoan * paymentsPerYear; var interestRatePerPayment = annualInterestRate / paymentsPerYear; var monthlyPayment = this.GetMonthlyPayment((double)loanAmount, amountOfPayments, (double)interestRatePerPayment); var totalAmmountPayed = monthlyPayment * amountOfPayments; var amountPaidAsInterest = totalAmmountPayed - loanAmount; var administrativeFee = this.GetAdministrativeFee(loanAmount, adminFeeRelative, maxAdminFee); return(new OverviewDetails { LoanAmount = loanAmount, DurationOfLoanInYears = durationOfLoan, MonthlyPayment = Math.Round(monthlyPayment, 2), AmountPaidAsInterest = Math.Round(amountPaidAsInterest, 2), AdministrativeFee = Math.Round(administrativeFee, 2), }); }
public PaymentOverview CalculatePaymentOverview(LoanParameters parameters, LoanTerms terms) { var totalNumberOfPayments = parameters.DurationInYears * terms.PaymentsInYear; var administrativeFee = _loanCalculations.CalculateAdministrativeFee( parameters.MoneyToLoan.Amount, terms.AdministrativeFeeRate, terms.AdministrativeFeeMaxCap ); var singlePayment = _loanCalculations.CalculateSinglePayment( parameters.MoneyToLoan.Amount, terms.AnnualInterestRate, terms.PaymentsInYear, totalNumberOfPayments ); var totalPayment = _loanCalculations.CalculateTotalPayment( singlePayment, totalNumberOfPayments ); var totalInterest = _loanCalculations.CalculateTotalInterest( totalPayment, parameters.MoneyToLoan.Amount ); var aop = _loanCalculations.CalculateAop( totalPayment, administrativeFee, parameters.MoneyToLoan.Amount, parameters.DurationInYears ); return(new PaymentOverview( new Money(singlePayment), new Money(totalPayment), new Money(totalInterest), new Money(administrativeFee), new Percent(aop), parameters, terms )); }
public void ShowLoanTerms(LoanTerms loanTerms) { Console.WriteLine($"\nLoan terms:"); Console.WriteLine(loanTerms.ToString()); }