Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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)
                );
        }
Exemple #3
0
        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));
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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();
        }
Exemple #6
0
        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));
        }
Exemple #7
0
        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
                );
        }
Exemple #8
0
        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)));
            }
                );
        }