public ActionResult EnterCarInfo(string firstname, string lastname, string email, string dob, string caryear, string carmake, string carmodel, string numberspeedingtickets, string fullorliability, string dui) { if (string.IsNullOrEmpty(firstname) || string.IsNullOrEmpty(lastname) || string.IsNullOrEmpty(email) || string.IsNullOrEmpty(carmake) || string.IsNullOrEmpty(carmodel) || string.IsNullOrEmpty(fullorliability) || string.IsNullOrEmpty(dob) || string.IsNullOrEmpty(caryear) || string.IsNullOrEmpty(numberspeedingtickets) || string.IsNullOrEmpty(dui)) { return(View("~/Views/Shared/Error.cshtml")); } else { using (CarQuoteDBEntities db = new CarQuoteDBEntities()) { var carquote = new CarQuote(); carquote.FirstName = firstname; carquote.LastName = lastname; carquote.Email = email; carquote.DOB = Convert.ToDateTime(dob); carquote.CarYear = Convert.ToInt32(caryear); carquote.CarMake = carmake; carquote.CarModel = carmodel; carquote.DUI = Convert.ToBoolean(dui); carquote.NumberSpeedingTickets = Convert.ToInt32(numberspeedingtickets); carquote.FullOrLiability = fullorliability; var quotecalculator = new QuoteCalculator(); carquote.Quote = quotecalculator.GetQuote(carquote); db.CarQuotes.Add(carquote); db.SaveChanges(); return(View("ShowQuote", carquote)); } } }
public void WhenOffersAreNull_ThrowArgumentNullException() { var calculator = new QuoteCalculator() as IQuoteCalculator; // ReSharper disable once UnusedVariable var result = calculator.GetQuote(1, null); }
public void ShouldReturnNullIfNotSufficientOffers() { // arrange var requestedAmount = 1000m; var lenderOffers = new[] { new LenderOffer { Rate = 0.104m, Available = 170 }, new LenderOffer { Rate = 0.081m, Available = 320 }, new LenderOffer { Rate = 0.074m, Available = 140 }, new LenderOffer { Rate = 0.071m, Available = 60 }, }; var repaymentCalculationStrategy = new RepaymentCalculationStrategy(); IQuoteCalculator quoteCalculator = new QuoteCalculator(repaymentCalculationStrategy); // act var resultQuote = quoteCalculator.Calculate(lenderOffers, requestedAmount, NumberOfMonths); // assert Assert.That(resultQuote, Is.Null); }
public void ShouldReturnAggregatedQuoteForMulipleLenderOffers() { // arrange var requestedAmount = 1000m; var lenderOffers = new[] { new LenderOffer { Available = 480, Rate = 0.069m }, new LenderOffer { Available = 520, Rate = 0.071m }, }; var repaymentCalculationStrategy = new RepaymentCalculationStrategy(); IQuoteCalculator quoteCalculator = new QuoteCalculator(repaymentCalculationStrategy); // act var resultQuote = quoteCalculator.Calculate(lenderOffers, requestedAmount, NumberOfMonths); // assert Assert.That(Math.Round(resultQuote.Rate * 100, 1), Is.EqualTo(7)); Assert.That(Math.Round(resultQuote.MonthlyRepayment, 2), Is.EqualTo(30.78m)); Assert.That(Math.Round(resultQuote.TotalRepayment, 2), Is.EqualTo(1108.10m)); }
public void Test_GetQuote_NoDrivers() { List <Driver> drivers = new List <Driver>(); List <DateTime> claims = new List <DateTime>(); QuoteCalculator.GetQuote(now, drivers); Assert.AreEqual("Policy Declined:\n There are no drivers on the policy", QuoteCalculator.GetQuote(now, drivers)); }
public void Test_GetQuote_ValidWithChauffeurAndYoungestUnder26() { List <Driver> drivers = new List <Driver>(); List <DateTime> claims = new List <DateTime>(); drivers.Add(new Driver("Jim", "Chauffeur", now.AddYears(-25), claims)); Assert.AreEqual("Your calculated premium is £660", QuoteCalculator.GetQuote(now, drivers)); }
public decimal ShouldCalculateTotalRepaymentForRequestedLoanAmount(int loanAmount, IList <Offer> offers) { var calculator = new QuoteCalculator() as IQuoteCalculator; var result = calculator.GetQuote(loanAmount, offers); Assert.IsNotNull(result); return(result.TotalRepayment); }
public decimal ShouldCalculateLowestQuoteRateFromOffersForRequestedLoanAmount(int loanAmount, IList <Offer> offers) { var calculator = new QuoteCalculator() as IQuoteCalculator; var result = calculator.GetQuote(loanAmount, offers); Assert.IsNotNull(result); return(result.Quote); }
public void Test_GetQuote_ValidWithAccountantAndYoungestOver25() { List <Driver> drivers = new List <Driver>(); List <DateTime> claims = new List <DateTime>(); drivers.Add(new Driver("Jim", "Accountant", now.AddYears(-26), claims)); QuoteCalculator.GetQuote(now, drivers); Assert.AreEqual("Your calculated premium is £405", QuoteCalculator.GetQuote(now, drivers)); }
public void Test_GetQuote_ValidWithChaufferAndSixMonthClaim() { List <Driver> drivers = new List <Driver>(); List <DateTime> claims = new List <DateTime>(); claims.Add(now.AddMonths(-6)); drivers.Add(new Driver("Jim", "Chauffeur", now.AddYears(-27), claims)); Assert.AreEqual("Your calculated premium is £594", QuoteCalculator.GetQuote(now, drivers)); }
public void Test_GetQuote_DriverOver75() { List <Driver> drivers = new List <Driver>(); List <DateTime> claims = new List <DateTime>(); drivers.Add(new Driver("Jim", "Accountant", now.AddYears(-76), claims)); QuoteCalculator.GetQuote(now, drivers); Assert.AreEqual("Policy Declined:\n Age of Oldest Driver", QuoteCalculator.GetQuote(now, drivers)); }
public void Test_GetQuote_StartDateInPast() { List <Driver> drivers = new List <Driver>(); List <DateTime> claims = new List <DateTime>(); drivers.Add(new Driver("Jim", "Accountant", now.AddYears(-28), claims)); QuoteCalculator.GetQuote(now, drivers); Assert.AreEqual("Policy Declined:\n Start Date of Policy", QuoteCalculator.GetQuote(now.AddDays(-1), drivers)); }
public void Quote_GreaterThen15000() { var mockIMarketDataRepository = new Mock <IMarketDataRepository>(); var mockIMarketCalculator = new Mock <IMarketCalculator>(); IQuoteCalculator quoteCalculator = new QuoteCalculator(mockIMarketDataRepository.Object, mockIMarketCalculator.Object); QuoteResult result = quoteCalculator.GetQuote(15100); Assert.AreEqual(QuoteResultCode.Fail, result.QuoteResultCode); Assert.AreEqual("Loan amount cannot be more than 15000", result.Message); }
public void WhenThereIsNotEnoughOffersToSatisfyTheRequestedLoanAmount_ReturnNull() { var calculator = new QuoteCalculator() as IQuoteCalculator; var result = calculator.GetQuote(2000, new List <Offer> { new Offer { Rate = 0.5m, CashAvailable = 1000 } }); Assert.IsNull(result); }
public void Quote_InsufficientFunds() { var mockIMarketDataRepository = new Mock <IMarketDataRepository>(); var mockIMarketCalculator = new Mock <IMarketCalculator>(); IQuoteCalculator quoteCalculator = new QuoteCalculator(mockIMarketDataRepository.Object, mockIMarketCalculator.Object); QuoteResult result = quoteCalculator.GetQuote(15000); Assert.AreEqual(QuoteResultCode.Fail, result.QuoteResultCode); Assert.AreEqual("Insuffiecnet funds avaialble for the requested amount", result.Message); }
public void Quote_InrementOf100() { var mockIMarketDataRepository = new Mock <IMarketDataRepository>(); var mockIMarketCalculator = new Mock <IMarketCalculator>(); IQuoteCalculator quoteCalculator = new QuoteCalculator(mockIMarketDataRepository.Object, mockIMarketCalculator.Object); QuoteResult result = quoteCalculator.GetQuote(1036); Assert.AreEqual(QuoteResultCode.Fail, result.QuoteResultCode); Assert.AreEqual("Loan amount must be an increment of 100", result.Message); }
public void Test_GetQuote_DriverMoreThanTwoClaims() { List <Driver> drivers = new List <Driver>(); List <DateTime> claims = new List <DateTime>(); claims.Add(now); claims.Add(now); claims.Add(now); drivers.Add(new Driver("Jim", "Accountant", now.AddYears(-25), claims)); QuoteCalculator.GetQuote(now, drivers); Assert.AreEqual("Policy Declined:\n Driver has more than 2 claims (Jim)", QuoteCalculator.GetQuote(now, drivers)); }
public void ShouldReturnLoanAmount() { var calculator = new QuoteCalculator() as IQuoteCalculator; var result = calculator.GetQuote(1000, new List <Offer> { new Offer { CashAvailable = 1000 } }); Assert.IsNotNull(result); Assert.AreEqual(1000, result.LoanAmount); }
public void GivenLoanAMoubt_WhenRequestedQuote_ShouldReturntheSameAmount() { var calculator = new QuoteCalculator(); var result = calculator.ProcessQuoteCalculation(1000, new List <Lenders> { new Lenders() { Amount = 1000 } }, 36); Assert.AreEqual(1000, result.LoanAmount); }
public void GivenListofQuotes_WhenLoanRequested_ThenShouldCalculateCorrectTotalPayments() { var calculator = new QuoteCalculator(); var result = calculator.ProcessQuoteCalculation(1000, new List <Lenders> { new Lenders() { Amount = 520, Rate = 0.075m }, new Lenders() { Amount = 480, Rate = 0.077m } }, 36); Assert.AreEqual(1075.96m, result.TotalRepayment); }
public void Quote_Successfull() { var mockIMarketDataRepository = new Mock <IMarketDataRepository>(); var marketCalculator = new MarketCalculator(); mockIMarketDataRepository.Setup(x => x.GetMarketData()).Returns(TestData.MarketData); IQuoteCalculator quoteCalculator = new QuoteCalculator(mockIMarketDataRepository.Object, marketCalculator); QuoteResult result = quoteCalculator.GetQuote(1000); Assert.AreEqual(QuoteResultCode.Success, result.QuoteResultCode); Assert.AreEqual(30.78, Math.Round(result.Quote.MonthlyRepayment, 2)); Assert.AreEqual(7, Math.Round(result.Quote.Rate * 100, 1)); Assert.AreEqual(1000, result.Quote.RequestedAmount); Assert.AreEqual(1108.1, Math.Round(result.Quote.TotalRepayment, 2)); }
public void GivenListofQuotes_WhenLoanRequested_ThenShouldCalculateLowestQuoteRateFromOffers() { var calculator = new QuoteCalculator(); var result = calculator.ProcessQuoteCalculation(1000, new List <Lenders> { new Lenders() { Amount = 1000, Rate = 0.075m }, new Lenders() { Amount = 1000, Rate = 0.077m } }, 36); Assert.AreEqual(0.075m, result.QuoteRate); }
static void Main(string[] args) { int exitCode = 0; int loanAmount = 0; try { if (args.Length < 2) { Console.WriteLine("Not enough parameters - expected [market_file] [loan_amount]"); } else if (!int.TryParse(args[1], out loanAmount)) { Console.WriteLine("Loan Amount must be a valid integer"); } else { var marketData = args[0]; if (!int.TryParse(args[1], out loanAmount)) { Console.WriteLine("Loan Amount must be a valid integer"); } IMarketCalculator marketCalculator = new MarketCalculator(); IMarketDataRepository marketDataRepository = new MarketDataRepository(marketData); IQuoteCalculator quoteCalculator = new QuoteCalculator(marketDataRepository, marketCalculator); IQuoteResultFormatter resultFormatter = new QuoteResultFormatter(); var quoteResult = quoteCalculator.GetQuote(loanAmount); Console.WriteLine(resultFormatter.Format(quoteResult)); } } catch (Exception exception) { Console.WriteLine("Oops! an error occured retrieving your quote"); Console.WriteLine(exception.Message); exitCode = 1; } Console.ReadKey(); Environment.Exit(exitCode); }
static void Main(string[] args) { //Havent used any library for Dependecy Injection. Wanted to keep it simple and small IReader reader = new CSVFileReader(); IOutputStream output = new ConsoleOutputStream(); ICalculator calculator = new QuoteCalculator(); CalculateRateApp calc = new CalculateRateApp(reader, output, calculator, 36); try { calc.Run(args); } catch (Exception exception) { Console.WriteLine(exception.Message); } }
public void ShouldChooseOffersWithTheLowestRates() { // arrange var requestedAmount = 1000m; var lenderOffers = new[] { new LenderOffer { Rate = 0.075m, Available = 640 }, new LenderOffer { Rate = 0.069m, Available = 480 }, new LenderOffer { Rate = 0.071m, Available = 520 }, new LenderOffer { Rate = 0.104m, Available = 170 }, new LenderOffer { Rate = 0.081m, Available = 320 }, new LenderOffer { Rate = 0.074m, Available = 140 }, new LenderOffer { Rate = 0.071m, Available = 60 }, }; var repaymentCalculationStrategy = new RepaymentCalculationStrategy(); IQuoteCalculator quoteCalculator = new QuoteCalculator(repaymentCalculationStrategy); // act var resultQuote = quoteCalculator.Calculate(lenderOffers, requestedAmount, NumberOfMonths); // assert Assert.That(Math.Round(resultQuote.MonthlyRepayment, 2), Is.EqualTo(30.78m)); Assert.That(Math.Round(resultQuote.TotalRepayment, 2), Is.EqualTo(1108.10m)); }
public void CalculateQuoteWithValidInputs_Should_ReturnValidQuotes() { var mockLogger = new Mock <ILogger <QuoteCalculator> >(); var quoteCalculator = new QuoteCalculator(mockLogger.Object); var loanRequest = 1000.00m; var offers = new List <Offer> { new Offer("Bob", 0.075m, 640.00m), new Offer("Jane", 0.069m, 480.00m), new Offer("Fred", 0.071m, 520.00m), new Offer("Mary", 0.104m, 170.00m), new Offer("John", 0.081m, 320.00m), new Offer("Dave", 0.074m, 140.00m), new Offer("Angela", 0.071m, 60.00m) }; var quote = quoteCalculator.CalculateQuote(loanRequest, offers); Assert.AreEqual(0.07284m, quote.Rate); Assert.AreEqual(34.539230845287222222222222222m, quote.MonthlyRepayment); Assert.AreEqual(1243.41231043034m, quote.TotalRepayment); }
// Retrievin a quote using entered information. protected void btnGetQuote_Clicked(object sender, EventArgs e) { lblQuoteResults.Text = QuoteCalculator.GetQuote(cldStartDate.GetDate(), drivers); frmQuoteResults.Visible = true; }
public ActionResult Quote(string firstName, string lastName, string emailAddress, DateTime dob, int carYear, string carMake, string carModel, int tickets, Boolean fullCoverage = false, Boolean dui = false) { QuoteSubmission quoteApp = new QuoteSubmission(); quoteApp.firstName = firstName; quoteApp.lastName = lastName; quoteApp.emailAddress = emailAddress; quoteApp.dob = dob; quoteApp.carYear = carYear; quoteApp.carMake = carMake; quoteApp.carModel = carModel; quoteApp.dui = dui; quoteApp.tickets = tickets; quoteApp.fullCoverage = fullCoverage; //Make sure all necessary fields are filled if (string.IsNullOrEmpty(firstName) || string.IsNullOrEmpty(lastName) || string.IsNullOrEmpty(emailAddress) || dob.Equals(null) || string.IsNullOrEmpty(carMake) || string.IsNullOrEmpty(carModel)) { return(View("/Views/Shared/Error.cshtml")); } //Check that they aren't trying to cheat the system with negative values if (tickets < 0 || carYear < 1800) { return(View("/Views/Shared/Error.cshtml")); } //calculate quote with submission else { quoteApp.quotedPrice = QuoteCalculator.calculateQuote(quoteApp); string queryString = @"INSERT INTO quotes (firstName, lastName, emailAddress, dob, carYear, carMake, carModel, dui, tickets, fullCoverage, quotedPrice) VALUES (@firstName, @lastName, @emailAddress, @dob, @carYear, @carMake, @carModel, @dui, @tickets, @fullCoverage, @quotedPrice)"; using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand command = new SqlCommand(queryString, connection); command.Parameters.Add("@firstName", SqlDbType.VarChar); command.Parameters.Add("@lastName", SqlDbType.VarChar); command.Parameters.Add("@emailAddress", SqlDbType.VarChar); command.Parameters.Add("@dob", SqlDbType.Date); command.Parameters.Add("@carYear", SqlDbType.Int); command.Parameters.Add("@carMake", SqlDbType.VarChar); command.Parameters.Add("@carModel", SqlDbType.VarChar); command.Parameters.Add("@dui", SqlDbType.Bit); command.Parameters.Add("@tickets", SqlDbType.Int); command.Parameters.Add("@fullCoverage", SqlDbType.Bit); command.Parameters.Add("@quotedPrice", SqlDbType.Decimal); command.Parameters["@firstName"].Value = firstName; command.Parameters["@lastName"].Value = lastName; command.Parameters["@emailAddress"].Value = emailAddress; command.Parameters["@dob"].Value = dob; command.Parameters["@carYear"].Value = carYear; command.Parameters["@carMake"].Value = carMake; command.Parameters["@carModel"].Value = carModel; command.Parameters["@dui"].Value = dui; command.Parameters["@tickets"].Value = tickets; command.Parameters["@fullCoverage"].Value = fullCoverage; command.Parameters["@quotedPrice"].Value = Math.Round(quoteApp.quotedPrice, 2); connection.Open(); command.ExecuteNonQuery(); connection.Close(); } return(View(new QuoteVM(quoteApp.quotedPrice))); } }