public async Task <IActionResult> Index(NewCreditCardApplicationDetails applicationDetails) { if (!ModelState.IsValid) { return(View(applicationDetails)); } var creditCardApplication = new CreditCardApplication { FirstName = applicationDetails.FirstName, LastName = applicationDetails.LastName, FrequentFlyerNumber = applicationDetails.FrequentFlyerNumber, Age = applicationDetails.Age.Value, GrossAnnualIncome = applicationDetails.GrossAnnualIncome.Value, RelationshipStatus = applicationDetails.RelationshipStatus, BusinessSource = applicationDetails.BusinessSource }; // There is no front-end validation required on the frequent flyer number. // If it is invalid the decision will be referred to a human. // This is so we don't miss out on potential sales due to people thinking // there frequent flyer number should be valid when it is not. var evaluator = new CreditCardApplicationEvaluator(new FrequentFlyerNumberValidator()); CreditCardApplicationDecision decision = evaluator.Evaluate(creditCardApplication); creditCardApplication.Decision = decision; await _applicationRepository.AddAsync(creditCardApplication); return(View("ApplicationComplete", creditCardApplication)); }
public async Task <IActionResult> Index(NewCreditCardApplicationDetails appDetail) { if (!ModelState.IsValid) { return(View()); } var creditCartApp = new CreditCardApplication { FirstName = appDetail.FirstName, LastName = appDetail.LastName, Age = appDetail.Age.Value, FrequentFlyerNumber = appDetail.FrequentFlyerNumber, GrossAnnualIncome = appDetail.GrossAnnualIncome.Value }; if (_evaluator.Evaluate(creditCartApp) == CreditCardApplicationDecision.AutoDeclined) { ViewData["Decision"] = $"<label id='decision'>Auto Declined</label>"; return(View(creditCartApp)); } else { ViewData["Decision"] = ""; } await _application.AddAsync(creditCartApp); return(View("ApplicationComplete", creditCartApp)); }
public async Task <IActionResult> Index(NewCreditCardApplicationDetails applicationDetails) { if (!ModelState.IsValid) { return(View(applicationDetails)); } var creditCardApplication = new CreditCardApplication { FirstName = applicationDetails.FirstName, LastName = applicationDetails.LastName, FrequentFlyerNumber = applicationDetails.FrequentFlyerNumber, Age = applicationDetails.Age.Value, GrossAnnualIncome = applicationDetails.GrossAnnualIncome.Value }; // Not mock-able var evaluator = new CreditCardApplicationEvaluator(new FrequentFlyerNumberValidator()); creditCardApplication.Decision = evaluator.Evaluate(creditCardApplication); await _applicationRepository.AddAsync(creditCardApplication); return(View("ApplicationComplete", creditCardApplication)); }
public async Task NotSaveApplicationModelError() { _sut.ModelState.AddModelError("x", "test Error"); var application = new NewCreditCardApplicationDetails(); await _sut.Index(application); _mockRepository.Verify(x => x.AddAsync(It.IsAny <CreditCardApplication>()), Times.Never); }
public async Task ReturnViewWhenInvalidModelState() { _sut.ModelState.AddModelError("x", "Test Error"); var application = new NewCreditCardApplicationDetails { FirstName = "Erick" }; IActionResult result = await _sut.Index(application); ViewResult viewResult = Assert.IsType <ViewResult>(result); var model = Assert.IsType <NewCreditCardApplicationDetails>(viewResult.Model); Assert.Equal(application.FirstName, model.FirstName); }
public async Task NotSaveApplicationWhenModelError() { // Add a model error _sut.ModelState.AddModelError("x", "Test Error"); // Build expected object var application = new NewCreditCardApplicationDetails(); // Call index method using expected object await _sut.Index(application); // If invalid model, controller should not save application to database // Verify that AddAsync has never been called _mockRepository.Verify(x => x.AddAsync(It.IsAny <CreditCardApplication>()), Times.Never); }
public ActionResult Index(NewCreditCardApplicationDetails applicationDetails) { if (ModelState.IsValid) { return(View(applicationDetails)); } var CreditCardApplication = new CreditCardApplication { FirstName = applicationDetails.FirstName, LastName = applicationDetails.LastName, Age = applicationDetails.Age.Value, GrossAnnualIncome = applicationDetails.GrossAnnualIncome.Value, FrequentFlyerNumber = applicationDetails.FrequentFlyerNumber }; return(View()); }
public async Task <IActionResult> Index(NewCreditCardApplicationDetails applicationDetails) { if (!ModelState.IsValid) { return(View(applicationDetails)); } var creditCardApplication = new CreditCardApplication { FirstName = applicationDetails.FirstName, LastName = applicationDetails.LastName, Age = applicationDetails.Age.Value, GrossAnnualIncome = applicationDetails.GrossAnnualIncome.Value }; await _applicationRepository.AddAsync(creditCardApplication); return(View("ApplicationComplete", creditCardApplication)); }
public async Task <IActionResult> Index(NewCreditCardApplicationDetails applicationDetails) { if (ModelState.IsValid == false) { return(View(applicationDetails)); } var creditCardApplication = new CreditCardApplication { FirstName = applicationDetails.FirstName, LastName = applicationDetails.LastName, Age = applicationDetails.Age.Value, GrossAnnualIncome = applicationDetails.GrossAnnualIncome.Value, }; await _applicationRepository.AddAsync(creditCardApplication); var applicationId = _dataProtector.Protect(creditCardApplication.Id.ToString()); return(RedirectToAction(nameof(ApplicationComplete), new { id = applicationId })); }
public async Task ReturnViewWhenInvalidModelState() { // Add a model error _sut.ModelState.AddModelError("x", "Test Error"); // Build expected object var application = new NewCreditCardApplicationDetails { FirstName = "Sarah" }; // Call index method using expected object var result = await _sut.Index(application); // If result of assert is successful return the converted type var viewResult = Assert.IsType <ViewResult>(result); // if successful, get credit card application details as model var model = Assert.IsType <NewCreditCardApplicationDetails>(viewResult.Model); // Assert that the expected value equals the first name in the returned model Assert.Equal(application.FirstName, model.FirstName); }
public IActionResult Index() { var model = new NewCreditCardApplicationDetails(); return(View(model)); }