コード例 #1
0
        public IMortgageCalculationResult ParseHtmlIntoResult(string html)
        {
            _logger.LogDebug($"{nameof(ParseHtmlIntoResult)} is being executed");
            var htmlPage = new HtmlDocument();

            htmlPage.LoadHtml(html);
            var mortgageInfoTable = htmlPage.DocumentNode.SelectSingleNode("//html[1]/body[1]/div[3]/div[1]/table[1]/tr[1]/td[2]/table[1]/tr[1]/td[1]/table[1]");

            if (mortgageInfoTable == null)
            {
                return(new MortgageCalculationResult(_request, null, new List <string>()
                {
                    _errorMessageLocalizer["MortgageInfoTableMissing"]
                }));
            }

            var mortgageInfoRows = mortgageInfoTable.SelectNodes("./tr");

            if (mortgageInfoRows.Any())
            {
                var mortgageCalculationResult = new MortgageCalculationResult(_request, null, null);
                mortgageCalculationResult.MortgagePaymentyMonthly           = decimal.Parse(mortgageInfoRows[1].SelectSingleNode("./td[2]").InnerText, NumberStyles.Currency);
                mortgageCalculationResult.PropertyTaxPaymentMonthly         = decimal.Parse(mortgageInfoRows[2].SelectSingleNode("./td[2]").InnerText, NumberStyles.Currency);
                mortgageCalculationResult.HomeownersInsurancePaymentMonthly = decimal.Parse(mortgageInfoRows[3].SelectSingleNode("./td[2]").InnerText, NumberStyles.Currency);
                if (mortgageCalculationResult.Request.HOAMonthly > 0)
                {
                    mortgageCalculationResult.DownPayment      = decimal.Parse(mortgageInfoRows[9].SelectSingleNode("./td[2]").InnerText, NumberStyles.Currency);
                    mortgageCalculationResult.TermInterestPaid = decimal.Parse(mortgageInfoRows[11].SelectSingleNode("./td[2]").InnerText, NumberStyles.Currency);
                }
                else
                {
                    mortgageCalculationResult.DownPayment      = decimal.Parse(mortgageInfoRows[8].SelectSingleNode("./td[2]").InnerText, NumberStyles.Currency);
                    mortgageCalculationResult.TermInterestPaid = decimal.Parse(mortgageInfoRows[10].SelectSingleNode("./td[2]").InnerText, NumberStyles.Currency);
                }
                return(mortgageCalculationResult);
            }
            return(new MortgageCalculationResult(_request, null, new List <string>()
            {
                _errorMessageLocalizer["MortgageInfoTableHadNoData"]
            }));
        }
コード例 #2
0
        private void AssertThatResponseDataAreMatching(MortgageCalculationResult expectedResult, MortgageCalculationResult actualResult)
        {
            //Request
            actualResult.Request.Should().NotBeNull();
            actualResult.Request.RequestId.Should().NotBeEmpty();
            actualResult.IsSuccessful.Should().Be(expectedResult.IsSuccessful);
            actualResult.Request.APR.Should().Be(expectedResult.Request.APR);
            actualResult.Request.DownPaymentPercent.Should().Be(expectedResult.Request.DownPaymentPercent);
            actualResult.Request.HOAMonthly.Should().Be(expectedResult.Request.HOAMonthly);
            actualResult.Request.HomeownerInsuranceRate.Should().Be(expectedResult.Request.HomeownerInsuranceRate);
            actualResult.Request.LoanTermYears.Should().Be(expectedResult.Request.LoanTermYears);
            actualResult.Request.PropertyTaxRate.Should().Be(expectedResult.Request.PropertyTaxRate);
            actualResult.Request.PurchasePrice.Should().Be(expectedResult.Request.PurchasePrice);

            //Calculation data
            actualResult.DownPayment.Should().Be(expectedResult.DownPayment);
            actualResult.Errors?.Count.Should().Be(expectedResult.Errors?.Count);
            foreach (var expectedError in expectedResult.Errors)
            {
                actualResult.Errors.SingleOrDefault(e => string.Equals(expectedError, e))
                .Should().NotBeNull($"the error '{expectedError}' should be in the error list");
            }
            actualResult.HOAAnnual.Should().Be(actualResult.Request.HOAMonthly * 12, "annual should be 12x monthly");
            actualResult.HOAAnnual.Should().Be(expectedResult.HOAAnnual);
            actualResult.HomeownersInsurancePaymentMonthly.Should().Be(expectedResult.HomeownersInsurancePaymentMonthly);
            actualResult.MortgagePaymentyMonthly.Should().Be(expectedResult.MortgagePaymentyMonthly);
            actualResult.PropertyTaxPaymentMonthly.Should().Be(expectedResult.PropertyTaxPaymentMonthly);
            actualResult.TermInterestPaid.Should().Be(expectedResult.TermInterestPaid);
            actualResult.TotalCostOfLoan.Should().Be(actualResult.Request.PurchasePrice - actualResult.DownPayment + actualResult.TermInterestPaid);
            actualResult.TotalCostOfLoan.Should().Be(expectedResult.TotalCostOfLoan);
            actualResult.TotalMonthlyPayment.Should().Be(expectedResult.TotalMonthlyPayment);
            actualResult.ValidationErrors?.Count.Should().Be(expectedResult.ValidationErrors?.Count);
            foreach (var expectedError in expectedResult.ValidationErrors)
            {
                actualResult.ValidationErrors.SingleOrDefault(e => string.Equals(expectedError, e))
                .Should().NotBeNull($"the error '{expectedError}' should be in the validation error list");
            }
        }