private async Task <IActionResult> LoadViewModel(string view) { var username = GetUsernameFromClaim(); Logger.LogDebug($"Load View Model for CertificateOptionViewModel for {username}"); var viewModel = new CertificateOptionViewModel(); CheckAndSetRedirectToCheck(viewModel); if (!TryGetCertificateSession("CertificateOptionViewModel", username, out CertificateSession certSession)) { return(RedirectToAction("Index", "Search")); } var certificate = await CertificateApiClient.GetCertificate(certSession.CertificateId); if (certSession.Options == null || !certSession.Options.Any()) { return(RedirectToAction("Index", "Search")); } if (certSession.Options.Count == 1) { return(RedirectToAction("Declare", "CertificateDeclaration")); } Logger.LogDebug($"Got Certificate for CertificateOptionViewModel requested by {username} with Id {certificate.Id}"); viewModel.FromCertificate(certificate, certSession.Options); Logger.LogDebug($"Got View Model of type CertificateOptionViewModel requested by {username}"); return(View(view, viewModel)); }
private async Task <IActionResult> LoadViewModel(string view, bool?isFromStandard) { var username = ContextAccessor.HttpContext.User.FindFirst("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn")?.Value; Logger.LogInformation($"Load View Model for CertificateOptionViewModel for {username}"); var viewModel = new CertificateOptionViewModel { IsFromStandard = isFromStandard ?? false }; var query = ContextAccessor.HttpContext.Request.Query; if (query.ContainsKey("redirecttocheck") && bool.Parse(query["redirecttocheck"])) { Logger.LogInformation($"RedirectToCheck for CertificateOptionViewModel is true"); SessionService.Set("redirecttocheck", "true"); viewModel.BackToCheckPage = true; } else { SessionService.Remove("redirecttocheck"); } var sessionString = SessionService.Get("CertificateSession"); if (sessionString == null) { Logger.LogInformation($"Session for CertificateOptionViewModel requested by {username} has been lost. Redirecting to Search Index"); return(RedirectToAction("Index", "Search")); } var certSession = JsonConvert.DeserializeObject <CertificateSession>(sessionString); var certificate = await CertificateApiClient.GetCertificate(certSession.CertificateId); if (!certSession.Options.Any()) { if (ContextAccessor.HttpContext.Request.Query.ContainsKey("fromback")) { if (certificate.IsPrivatelyFunded) { return(RedirectToAction("StandardCode", "CertificatePrivateStandardCode")); } return(RedirectToAction("Declare", "CertificateDeclaration")); } return(RedirectToAction("Grade", "CertificateGrade")); } Logger.LogInformation($"Got Certificate for CertificateOptionViewModel requested by {username} with Id {certificate.Id}"); viewModel.FromCertificate(certificate, certSession.Options); Logger.LogInformation($"Got View Model of type CertificateOptionViewModel requested by {username}"); return(View(view, viewModel)); }
private async Task <IActionResult> SaveViewModel(CertificateOptionViewModel vm, string returnToIfModelNotValid, RedirectToActionResult nextAction, string action) { var username = GetUsernameFromClaim(); Logger.LogDebug($"Save View Model for CertificateOptionViewModel for {username} with values: {GetModelValues(vm)}"); var certificate = await CertificateApiClient.GetCertificate(vm.Id); var certData = JsonConvert.DeserializeObject <CertificateData>(certificate.CertificateData); SessionService.RemoveRedirectedFromVersion(); var sessionString = SessionService.Get(nameof(CertificateSession)); if (sessionString == null) { Logger.LogDebug($"Session for CertificateOptionViewModel requested by {username} has been lost. Redirecting to Search Index"); return(RedirectToAction("Index", "Search")); } var certSession = JsonConvert.DeserializeObject <CertificateSession>(sessionString); if (!ModelState.IsValid) { vm.Options = certSession.Options; Logger.LogDebug($"Model State not valid for CertificateOptionViewModel requested by {username} with Id {certificate.Id}. Errors: {ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage)}"); return(View(returnToIfModelNotValid, vm)); } var updatedCertificate = vm.GetCertificateFromViewModel(certificate, certData); try { await CertificateApiClient.UpdateCertificate(new UpdateCertificateRequest(updatedCertificate) { Username = username, Action = action }); } catch { Logger.LogError($"Unable to update certificate with Id {certificate.Id}."); return(RedirectToAction("Error", "Home")); } Logger.LogDebug($"Certificate for CertificateOptionViewModel requested by {username} with Id {certificate.Id} updated."); if (SessionService.GetRedirectToCheck()) { Logger.LogDebug($"Certificate for CertificateOptionViewModel requested by {username} with Id {certificate.Id} redirecting back to Certificate Check."); return(new RedirectToActionResult("Check", "CertificateCheck", null)); } Logger.LogDebug($"Certificate for CertificateOptionViewModel requested by {username} with Id {certificate.Id} redirecting to {nextAction.ControllerName} {nextAction.ActionName}"); return(nextAction); }
private async Task <IActionResult> SaveViewModel(CertificateOptionViewModel vm, string returnToIfModelNotValid, RedirectToActionResult nextAction, string action) { var username = ContextAccessor.HttpContext.User.FindFirst("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn")?.Value; Logger.LogInformation($"Save View Model for CertificateOptionViewModel for {username} with values: {GetModelValues(vm)}"); var certificate = await CertificateApiClient.GetCertificate(vm.Id); var certData = JsonConvert.DeserializeObject <CertificateData>(certificate.CertificateData); var sessionString = SessionService.Get("CertificateSession"); if (sessionString == null) { Logger.LogInformation($"Session for CertificateOptionViewModel requested by {username} has been lost. Redirecting to Search Index"); return(RedirectToAction("Index", "Search")); } var certSession = JsonConvert.DeserializeObject <CertificateSession>(sessionString); if (!ModelState.IsValid) { vm.FamilyName = certData.LearnerFamilyName; vm.GivenNames = certData.LearnerGivenNames; vm.Options = certSession.Options; Logger.LogInformation($"Model State not valid for CertificateOptionViewModel requested by {username} with Id {certificate.Id}. Errors: {ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage)}"); return(View(returnToIfModelNotValid, vm)); } var updatedCertificate = vm.GetCertificateFromViewModel(certificate, certData); await CertificateApiClient.UpdateCertificate(new UpdateCertificateRequest(updatedCertificate) { Username = username, Action = action }); Logger.LogInformation($"Certificate for CertificateOptionViewModel requested by {username} with Id {certificate.Id} updated."); if (SessionService.Exists("redirecttocheck") && bool.Parse(SessionService.Get("redirecttocheck"))) { Logger.LogInformation($"Certificate for CertificateOptionViewModel requested by {username} with Id {certificate.Id} redirecting back to Certificate Check."); return(new RedirectToActionResult("Check", "CertificateCheck", null)); } Logger.LogInformation($"Certificate for CertificateOptionViewModel requested by {username} with Id {certificate.Id} redirecting to {nextAction.ControllerName} {nextAction.ActionName}"); return(nextAction); }
public async Task WhenPostingOptionSelected_And_UpdateCertificateFails_Then_RedirectToError(CertificateSession session, CertificateOptionViewModel model) { var sessionString = JsonConvert.SerializeObject(session); _mockSessionService.Setup(s => s.Get(nameof(CertificateSession))).Returns(sessionString); _mockCertificateApiClient.Setup(c => c.UpdateCertificate(It.IsAny <UpdateCertificateRequest>())).ThrowsAsync(new Exception()); var result = await _certificateOptionController.Option(model) as RedirectToActionResult; result.ControllerName.Should().Be("Home"); result.ActionName.Should().Be("Error"); }
public async Task WhenPostingBackToOptionsPage_RedirectsToCertificateDeclaration(CertificateSession session, CertificateOptionViewModel model) { session.Options = null; var sessionString = JsonConvert.SerializeObject(session); _mockSessionService.Setup(s => s.Get(nameof(CertificateSession))).Returns(sessionString); var result = await _certificateOptionController.Option(model) as RedirectToActionResult; result.ControllerName.Should().Be("CertificateDeclaration"); result.ActionName.Should().Be("Declare"); }
public async Task <IActionResult> Option(CertificateOptionViewModel vm) { return(await SaveViewModel(vm, returnToIfModelNotValid : "~/Views/Certificate/Option.cshtml", nextAction : RedirectToAction("Declare", "CertificateDeclaration"), action : CertificateActions.Option)); }
public async Task <IActionResult> Option(CertificateOptionViewModel vm) { return(await SaveViewModel(vm, returnToIfModelNotValid : "~/Views/CertificateAmend/Option.cshtml", nextAction : RedirectToAction("Check", "CertificateAmend", new { certificateId = vm.Id }), action : CertificateActions.Option)); }