public void ShouldInvokeLoanCalculatorAndReturnResult() { var input = new LoanParameters { Amount = 1, Years = 1 }; var mockResponse = new PaymentPlan(new List<PaymentMonth>()); _calculatorMock.Setup(it => it.CalculateLoan(input)) .Returns(mockResponse) .Verifiable("Should call LoanCalculator with expected input"); var result = _controller.Calculate(input); _calculatorMock.Verify(); Assert.AreSame(mockResponse, result); }
public PaymentPlan CalculateLoan(LoanParameters loanParameters) { var loan = new HousingLoan(loanParameters); var paymentScheme = new SeriesPaymentScheme(); var months = new List<PaymentMonth>(); for (int monthNumber = 1; monthNumber <= loan.NumberOfMonths; monthNumber++) { decimal monthlyPrincipal = paymentScheme.NextMonthlyPrincipal(loan); var monthlyInterest = paymentScheme.NextMonthlyInterest(loan); var monthlyTotal = monthlyPrincipal + monthlyInterest; loan.Remaining -= monthlyPrincipal; //TODO: This doesn't smell right, should be immutable or just a local variable? months.Add(new PaymentMonth(monthNumber, monthlyPrincipal, monthlyInterest, monthlyTotal, loan.Remaining)); } var result = new PaymentPlan(months); return result; }