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));
         }
     }
 }
Esempio n. 2
0
        public void WhenOffersAreNull_ThrowArgumentNullException()
        {
            var calculator = new QuoteCalculator() as IQuoteCalculator;

            // ReSharper disable once UnusedVariable
            var result = calculator.GetQuote(1, null);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
        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));
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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));
        }
Esempio n. 10
0
        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));
        }
Esempio n. 11
0
        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));
        }
Esempio n. 12
0
        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));
        }
Esempio n. 13
0
        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);
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
        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);
        }
Esempio n. 16
0
        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);
        }
Esempio n. 17
0
        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));
        }
Esempio n. 18
0
        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);
        }
Esempio n. 19
0
        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);
        }
Esempio n. 20
0
        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);
        }
Esempio n. 21
0
        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));
        }
Esempio n. 22
0
        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);
        }
Esempio n. 23
0
        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);
        }
Esempio n. 24
0
        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);
            }
        }
Esempio n. 25
0
        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));
        }
Esempio n. 26
0
        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);
        }
Esempio n. 27
0
 // 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)));
            }
        }