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"] })); }
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"); } }