public BuildTest() { var purchasedAt = new DateTime(2019, 1, 1); var mortgageAmount = 328000.00M; var mortgageAmountMoney = new Money(mortgageAmount, purchasedAt); var preferredInterestRate = 0.0319M; BaseMortgage = new FixedRateMortgage(mortgageAmountMoney, preferredInterestRate, 300, purchasedAt); Subject = new PrepayableMortgageBuilder(BaseMortgage); Result = Subject.Build(); }
public void Test_Constructor(int year, int month, int day, int expectedYear, int expectedMonth, int expectedDay) { var date = new DateTime(year, month, day); var money = 100.00M; var baseMortgage = new FixedRateMortgage(money, 0.0314M, 300, date); var mortgage = new PrepayableMortgage(baseMortgage); Assert.That(mortgage.InitiatedAt.Year, Is.EqualTo(expectedYear)); Assert.That(mortgage.InitiatedAt.Month, Is.EqualTo(expectedMonth)); Assert.That(mortgage.InitiatedAt.Day, Is.EqualTo(expectedDay)); }
public PrepayableMortgage Build() { var result = new PrepayableMortgage(Mortgage, MaximumAllowedPrepaymentPercentage); decimal mortgageBalance = result.InitialValue; var startAt = result.InitiatedAt; var at = startAt; while (mortgageBalance > 0.00M) { // TODO: verify whether 0:00:00.00 - 1 milliseconds // is the previous day var endOfMonth = new DateTime(at.Year, at.Month, 1) .AddMonths(1) .AddMilliseconds(-1); // FIXME: Is this API to retrieve the 12th month? if (endOfMonth.Month == 12) { // FIXME: Figure out correct amount var prepayment = CreatePrepayment( result.GetBalance(at), result.Prepayments.MaximumAnnualTotal ); result.AddPrepayment( endOfMonth, prepayment ); startAt = endOfMonth; mortgageBalance = result.GetBalance(endOfMonth); } else { mortgageBalance = result.GetBalance(at); } at = at.AddMonths(1); } return(result); }