public void Init() { var initiatedAt = new DateTime(2019, 1, 1); var downpayment = 82000.00M; var mortgageAmount = 328000.00M; var preferredInterestRate = 0.0319M; var initialCash = 10000.00M; var initialDebt = 5000.00M; CashFlow = new DummyCashFlow(89.86M); Subject = new Activity(initialCash, initialDebt, CashFlow, initiatedAt); { var purchasedAt = initiatedAt; var mortgage = new FixedRateMortgage( mortgageAmount, preferredInterestRate, 300, purchasedAt ); FirstHome = new Home( "first home", purchasedAt, downpayment + mortgageAmount, downpayment, mortgage ); Subject.Buy(FirstHome, purchasedAt); } // Sell the first home { var soldAt = new DateTime(2020, 1, 3); Subject.Sell(FirstHome, 500000.00M, soldAt); } { var purchasedAt = new DateTime(2020, 2, 3); var mortgage = new FixedRateMortgage( mortgageAmount, preferredInterestRate, 300, purchasedAt ); SecondHome = new Home( "second home", purchasedAt, downpayment + mortgageAmount, downpayment, mortgage ); Subject.Buy(SecondHome, purchasedAt); } }
public void Test_PeriodicMonthlyInterestRate(decimal interestRate, int amortisationPeriodInMonths, decimal expected) { var purchasedAt = new DateTime(2019, 1, 1); var subject = new FixedRateMortgage(new Money(100000, purchasedAt), interestRate, 300, purchasedAt); Assert.That( decimal.Round(Convert.ToDecimal(subject.PeriodicMonthlyInterestRate), 12), Is.EqualTo(expected) ); }
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 = new Money(0.00M, date); var mortgage = new FixedRateMortgage(money, 0.0314M, 300, date); 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 void Init() { var purchasedAt = new DateTime(2019, 1, 1); var mortgageAmount = 328000.00M; var preferredInterestRate = 0.0319M; Mortgage = new FixedRateMortgage(mortgageAmount, preferredInterestRate, 300, purchasedAt); Subject = new Financier.Common.Liabilities.PrepayableMortgage(Mortgage, 0.10M); Subject.AddPrepayment(new DateTime(2019, 12, 31), 32800.00M); Subject.AddPrepayment(new DateTime(2020, 12, 31), 32800.00M); }
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 downpayment = 100.00M; var baseMortgage = new FixedRateMortgage(downpayment, 0.0314M, 300, date); var mortgage = new InsuredMortgage(baseMortgage, 20.00M); 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 void Test_InsuranceValue(decimal downPaymentPercentage, decimal expected) { var purchasedAt = new DateTime(2019, 1, 1); var homePrice = 500000.00M; var downPayment = downPaymentPercentage * homePrice; var mortgageAmount = (1 - downPaymentPercentage) * homePrice; var preferredInterestRate = 0.0319M; var baseMortgage = new FixedRateMortgage(mortgageAmount, preferredInterestRate, 300, purchasedAt); var subject = new InsuredMortgage(baseMortgage, downPayment); Assert.That( subject.Insurance, Is.EqualTo(expected).Within(15.00M).Percent ); }
public OneHomeQuery() { Field <DecimalGraphType>( "buyAndSellCondo", arguments: new QueryArguments( new QueryArgument <NonNullGraphType <DateGraphType> > { Name = Keys.InitiatedAt }, new QueryArgument <NonNullGraphType <DecimalGraphType> > { Name = Keys.DownPayment }, new QueryArgument <NonNullGraphType <DecimalGraphType> > { Name = Keys.PurchasePrice }, new QueryArgument <IntGraphType> { Name = Keys.AmortisationPeriodInMonths, DefaultValue = 300 }, new QueryArgument <NonNullGraphType <DecimalGraphType> > { Name = Keys.InterestRate } ), resolve: context => { var purchasedAt = GetInitiatedAt(context); var purchasePrice = GetPurchasePrice(context); var downPayment = GetDownPayment(context); var interestRate = GetInterestRate(context); var amortisationPeriodInMonths = GetAmortizationPeriodInMonths(context); var soldAt = purchasedAt.AddMonths(amortisationPeriodInMonths); var salePrice = Inflations.CondoPriceIndex.GetValueAt(purchasePrice, purchasedAt, soldAt); // START Validation // END Validation var mortgage = new FixedRateMortgage(purchasePrice - downPayment, interestRate, amortisationPeriodInMonths, purchasedAt); var home = new Home("foobar", purchasedAt, purchasePrice, downPayment, mortgage); var activity = new Activity(purchasedAt); activity.Buy(home, purchasedAt); activity.Sell(home, salePrice, soldAt); // var year = context.GetArgument<int>(Keys.Year); // var month = context.GetArgument<int>(Keys.Month); // var day = context.GetArgument<int>(Keys.Day); // // var at = new DateTime(year, month, day); return(activity.GetNetWorthAt(Inflations.NoopInflation, soldAt.AddDays(1))); } ); Field <DecimalGraphType>( "rentApartment", arguments: new QueryArguments( new QueryArgument <NonNullGraphType <DateGraphType> > { Name = Keys.InitiatedAt }, new QueryArgument <IntGraphType> { Name = Keys.AmortisationPeriodInMonths, DefaultValue = 300, Description = "Rental Period (in months)" }, new QueryArgument <NonNullGraphType <DecimalGraphType> > { Name = Keys.MonthlyRentalRate } ), resolve: context => { var startAt = GetInitiatedAt(context); var rentalPeriod = GetAmortizationPeriodInMonths(context); var rentalMonthlyRate = GetMonthlyRentalRate(context); var endAt = startAt.AddMonths(rentalPeriod); var rental = new RentalHome("foobar", startAt, rentalMonthlyRate); // START Validation // END Validation var activity = new Activity(startAt); activity.Buy(rental, startAt); activity.Sell(rental, 0.00M, endAt); return(activity.GetNetWorthAt(Inflations.NoopInflation, endAt.AddDays(1))); } ); }