public async Task <ActionResult> Apply(int id, TraineeshipApplicationViewModel model) { return(await Task.Run <ActionResult>(() => { var response = _traineeshipApplicationMediator.Submit(UserContext.CandidateId, id, model); switch (response.Code) { case TraineeshipApplicationMediatorCodes.Submit.IncorrectState: return RedirectToRoute(CandidateRouteNames.MyApplications); case TraineeshipApplicationMediatorCodes.Submit.Error: ModelState.Clear(); SetUserMessage(response.Message.Text, response.Message.Level); return View(response.ViewModel); case TraineeshipApplicationMediatorCodes.Submit.Ok: return RedirectToRoute(CandidateRouteNames.TraineeshipWhatNext, response.Parameters); case TraineeshipApplicationMediatorCodes.Submit.ValidationError: ModelState.Clear(); response.ValidationResult.AddToModelState(ModelState, string.Empty); return View(response.ViewModel); } throw new InvalidMediatorCodeException(response.Code); })); }
private ActionResult SetToSubmitted(TraineeshipApplicationViewModel traineeshipApplicationViewModel) { var response = _traineeshipApplicationMediator.ReviewSetToSubmitted(traineeshipApplicationViewModel); var viewModel = response.ViewModel; ModelState.Clear(); if (response.Message != null) { SetUserMessage(response.Message); } switch (response.Code) { case TraineeshipApplicationMediatorCodes.ReviewSaveAndContinue.Error: return(View("Review", response.ViewModel)); case TraineeshipApplicationMediatorCodes.ReviewSaveAndContinue.FailedValidation: response.ValidationResult.AddToModelStateWithSeverity(ModelState, string.Empty); return(RedirectToRoute(RecruitmentRouteNames.ReviewApprenticeshipApplication, viewModel)); case TraineeshipApplicationMediatorCodes.ReviewSaveAndContinue.Ok: return(RedirectToRoute(RecruitmentRouteNames.VacancyApplications, viewModel.ApplicationSelection.RouteValues)); default: throw new InvalidMediatorCodeException(response.Code); } }
public void SubmitApplicationError() { var viewModel = new TraineeshipApplicationViewModel { Candidate = new TraineeshipCandidateViewModel(), VacancyDetail = new TraineeshipVacancyDetailViewModel(), ViewModelStatus = ApplicationViewModelStatus.Error }; TraineeshipApplicationProvider.Setup(p => p.GetApplicationViewModel(It.IsAny <Guid>(), ValidVacancyId)) .Returns(new TraineeshipApplicationViewModel { ViewModelStatus = ApplicationViewModelStatus.Error }); TraineeshipApplicationProvider.Setup( p => p.PatchApplicationViewModel(It.IsAny <Guid>(), It.IsAny <TraineeshipApplicationViewModel>(), It.IsAny <TraineeshipApplicationViewModel>())) .Returns <Guid, TraineeshipApplicationViewModel, TraineeshipApplicationViewModel>((cid, svm, vm) => vm); TraineeshipApplicationProvider.Setup( p => p.SubmitApplication(It.IsAny <Guid>(), It.IsAny <int>(), It.IsAny <TraineeshipApplicationViewModel>())) .Returns <Guid, int, TraineeshipApplicationViewModel>((cid, vid, vm) => vm); var response = Mediator.Submit(Guid.NewGuid(), ValidVacancyId, viewModel); response.AssertMessage(TraineeshipApplicationMediatorCodes.Submit.Error, ApplicationPageMessages.SubmitApplicationFailed, UserMessageLevel.Warning, true, true); }
public void IncorrectState() { var viewModel = new TraineeshipApplicationViewModel { Candidate = new TraineeshipCandidateViewModel(), VacancyDetail = new TraineeshipVacancyDetailViewModel(), ViewModelStatus = ApplicationViewModelStatus.ApplicationInIncorrectState }; TraineeshipApplicationProvider.Setup(p => p.GetApplicationViewModel(It.IsAny <Guid>(), ValidVacancyId)) .Returns(new TraineeshipApplicationViewModel { ViewModelStatus = ApplicationViewModelStatus.ApplicationInIncorrectState }); TraineeshipApplicationProvider.Setup( p => p.PatchApplicationViewModel(It.IsAny <Guid>(), It.IsAny <TraineeshipApplicationViewModel>(), It.IsAny <TraineeshipApplicationViewModel>())) .Returns <Guid, TraineeshipApplicationViewModel, TraineeshipApplicationViewModel>((cid, svm, vm) => vm); TraineeshipApplicationProvider.Setup( p => p.SubmitApplication(It.IsAny <Guid>(), It.IsAny <int>(), It.IsAny <TraineeshipApplicationViewModel>())) .Returns <Guid, int, TraineeshipApplicationViewModel>((cid, vid, vm) => vm); var response = Mediator.Submit(Guid.NewGuid(), ValidVacancyId, viewModel); response.AssertCode(TraineeshipApplicationMediatorCodes.Submit.IncorrectState, false); }
public void FailValidation() { var viewModel = new TraineeshipApplicationViewModel { Candidate = new TraineeshipCandidateViewModel { MonitoringInformation = new MonitoringInformationViewModel { AnythingWeCanDoToSupportYourInterview = new string('X', 9999) } } }; TraineeshipApplicationProvider.Setup(p => p.GetApplicationViewModel(It.IsAny <Guid>(), ValidVacancyId)) .Returns(viewModel); TraineeshipApplicationProvider.Setup( p => p.PatchApplicationViewModel(It.IsAny <Guid>(), It.IsAny <TraineeshipApplicationViewModel>(), It.IsAny <TraineeshipApplicationViewModel>())) .Returns <Guid, TraineeshipApplicationViewModel, TraineeshipApplicationViewModel>((cid, svm, vm) => vm); var response = Mediator.Submit(Guid.NewGuid(), ValidVacancyId, viewModel); response.AssertValidationResult(TraineeshipApplicationMediatorCodes.Submit.ValidationError, true, false); }
private TraineeshipApplicationViewModel PatchWithVacancyDetail(Guid candidateId, int vacancyId, TraineeshipApplicationViewModel traineeshipApplicationViewModel) { // TODO: why have a patch method like this? should be done in mapper. var vacancyDetailViewModel = _traineeshipVacancyProvider.GetVacancyDetailViewModel(candidateId, vacancyId); if (vacancyDetailViewModel == null || vacancyDetailViewModel.VacancyStatus == VacancyStatuses.Unavailable) { traineeshipApplicationViewModel.ViewModelMessage = MyApplicationsPageMessages.TraineeshipNoLongerAvailable; return(traineeshipApplicationViewModel); } if (vacancyDetailViewModel.HasError()) { traineeshipApplicationViewModel.ViewModelMessage = vacancyDetailViewModel.ViewModelMessage; return(traineeshipApplicationViewModel); } traineeshipApplicationViewModel.VacancyDetail = vacancyDetailViewModel; traineeshipApplicationViewModel.Candidate.EmployerQuestionAnswers.SupplementaryQuestion1 = vacancyDetailViewModel.SupplementaryQuestion1; traineeshipApplicationViewModel.Candidate.EmployerQuestionAnswers.SupplementaryQuestion2 = vacancyDetailViewModel.SupplementaryQuestion2; return(traineeshipApplicationViewModel); }
public void FailValidationEducationLongerThan15Char() { var viewModel = new TraineeshipApplicationViewModel { Candidate = new TraineeshipCandidateViewModel { MonitoringInformation = new MonitoringInformationViewModel(), HasQualifications = true, Qualifications = new List <QualificationsViewModel> { new QualificationsViewModel { Grade = "Grade is Longer than 15 chars", QualificationType = "QUAL", Year = "2012" } } } }; TraineeshipApplicationProvider.Setup(p => p.GetApplicationViewModel(It.IsAny <Guid>(), ValidVacancyId)) .Returns(viewModel); TraineeshipApplicationProvider.Setup( p => p.PatchApplicationViewModel(It.IsAny <Guid>(), It.IsAny <TraineeshipApplicationViewModel>(), It.IsAny <TraineeshipApplicationViewModel>())) .Returns <Guid, TraineeshipApplicationViewModel, TraineeshipApplicationViewModel>((cid, svm, vm) => vm); var response = Mediator.Submit(Guid.NewGuid(), ValidVacancyId, viewModel); response.AssertValidationResult(TraineeshipApplicationMediatorCodes.Submit.ValidationError, true, false); }
public MediatorResponse <TraineeshipApplicationViewModel> ReviewSetToSubmitted( TraineeshipApplicationViewModel traineeshipApplicationViewModel) { var validationResult = _traineeshipApplicationViewModelServerValidator.Validate(traineeshipApplicationViewModel); if (!validationResult.IsValid) { return(GetMediatorResponse( TraineeshipApplicationMediatorCodes.ReviewSaveAndContinue.FailedValidation, traineeshipApplicationViewModel, validationResult)); } try { _applicationProvider.UpdateTraineeshipApplicationViewModelNotes( traineeshipApplicationViewModel.ApplicationSelection.ApplicationId, traineeshipApplicationViewModel.Notes, false); _applicationProvider.SetTraineeshipStateSubmitted(traineeshipApplicationViewModel.ApplicationSelection); return(GetMediatorResponse(TraineeshipApplicationMediatorCodes.ReviewSaveAndContinue.Ok, traineeshipApplicationViewModel)); } catch (Exception) { var viewModel = GetFailedUpdateTraineeshipApplicationViewModel( traineeshipApplicationViewModel.ApplicationSelection); return(GetMediatorResponse(TraineeshipApplicationMediatorCodes.ReviewSaveAndContinue.Error, viewModel, ApplicationViewModelMessages.UpdateNotesFailed, UserMessageLevel.Error)); } }
public TraineeshipApplicationViewModel PatchApplicationViewModel(Guid candidateId, TraineeshipApplicationViewModel savedModel, TraineeshipApplicationViewModel submittedModel) { _logger.Debug( "Calling TraineeshipApplicationProvider to patch the Application View Model for candidate ID: {0}.", candidateId); try { if (savedModel == null) { return(new TraineeshipApplicationViewModel(ApplicationPageMessages.SubmitApplicationFailed)); } savedModel.Candidate.HasQualifications = submittedModel.Candidate.HasQualifications; savedModel.Candidate.Qualifications = submittedModel.Candidate.Qualifications; savedModel.Candidate.HasWorkExperience = submittedModel.Candidate.HasWorkExperience; savedModel.Candidate.WorkExperience = submittedModel.Candidate.WorkExperience; savedModel.Candidate.EmployerQuestionAnswers = submittedModel.Candidate.EmployerQuestionAnswers; return(savedModel); } catch (Exception e) { var message = string.Format( "Patch traineeship application View Model failed for user {0}.", candidateId); _logger.Error(message, e); throw; } }
public async Task <ActionResult> AddEmptyQualificationRows(int id, TraineeshipApplicationViewModel model) { return(await Task.Run <ActionResult>(() => { var response = _traineeshipApplicationMediator.AddEmptyQualificationRows(model); ModelState.Clear(); return View("Apply", response.ViewModel); })); }
public void Ok() { var viewModel = new TraineeshipApplicationViewModel { Candidate = new TraineeshipCandidateViewModel(), VacancyDetail = new TraineeshipVacancyDetailViewModel() }; var response = Mediator.AddEmptyWorkExperienceRows(viewModel); response.AssertCode(TraineeshipApplicationMediatorCodes.AddEmptyWorkExperienceRows.Ok, true); }
public void Ok() { var viewModel = new TraineeshipApplicationViewModel { Candidate = new TraineeshipCandidateViewModel(), VacancyDetail = new TraineeshipVacancyDetailViewModel() }; var response = Mediator.AddEmptyTrainingCourseRows(viewModel); response.AssertCode(TraineeshipApplicationMediatorCodes.AddEmptyTrainingCourseRows.Ok, true); response.ViewModel.Candidate.HasTrainingCourses.Should().BeFalse(); }
public void WillRemoveEmptyTrainingCourseRows() { var viewModel = new TraineeshipApplicationViewModel { Candidate = CreateCandidateWithOneTrainingCourseRowAndTwoEmptyTrainingCourseRows(), VacancyDetail = new TraineeshipVacancyDetailViewModel() }; var response = Mediator.AddEmptyTrainingCourseRows(viewModel); response.AssertCode(TraineeshipApplicationMediatorCodes.AddEmptyTrainingCourseRows.Ok, true); response.ViewModel.Candidate.TrainingCourses.Should().HaveCount(1); response.ViewModel.Candidate.HasTrainingCourses.Should().BeTrue(); }
public ActionResult ReviewSaveAndExit(TraineeshipApplicationViewModel traineeshipApplicationViewModel) { switch (traineeshipApplicationViewModel.Status) { case ApplicationStatuses.Submitted: return(SetToSubmitted(traineeshipApplicationViewModel)); case ApplicationStatuses.InProgress: return(PromoteToInProgress(traineeshipApplicationViewModel)); default: throw new InvalidOperationException("Invalid status change"); } }
public void WillSetDefaultRowCounts() { var viewModel = new TraineeshipApplicationViewModel { Candidate = new TraineeshipCandidateViewModel(), VacancyDetail = new TraineeshipVacancyDetailViewModel() }; var response = Mediator.AddEmptyTrainingCourseRows(viewModel); response.AssertCode(TraineeshipApplicationMediatorCodes.AddEmptyTrainingCourseRows.Ok, true); response.ViewModel.DefaultQualificationRows.Should().Be(0); response.ViewModel.DefaultWorkExperienceRows.Should().Be(0); response.ViewModel.DefaultTrainingCourseRows.Should().Be(3); }
public TraineeshipApplicationViewModel Build() { var viewModel = new TraineeshipApplicationViewModel(_message) { Candidate = new TraineeshipCandidateViewModel { HasQualifications = _qualifications != null, Qualifications = _qualifications, HasWorkExperience = _workExperience != null, WorkExperience = _workExperience }, VacancyDetail = new VacancyDetailViewModel(), }; return(viewModel); }
public TraineeshipApplicationViewModel SubmitApplication(Guid candidateId, int vacancyId, TraineeshipApplicationViewModel traineeshipApplicationViewModel) { _logger.Debug( "Calling TraineeeshipApplicationProvider to submit the traineeships application for candidate ID: {0}, vacancy ID: {1}.", candidateId, vacancyId); try { var model = GetApplicationViewModel(candidateId, vacancyId); //TODO: check for error (traineeship already submitted)? var traineeshipApplicationDetails = _mapper.Map <TraineeshipApplicationViewModel, TraineeshipApplicationDetail>( traineeshipApplicationViewModel); _candidateService.SubmitTraineeshipApplication(candidateId, vacancyId, traineeshipApplicationDetails); _logger.Info("Traineeship application submitted for candidate ID: {0}, vacancy ID: {1}.", candidateId, vacancyId); return(model); } catch (CustomException e) { var message = string.Format( "Unhandled custom exception while submitting the traineeship application for candidate ID: {0}, vacancy ID: {1}.", candidateId, vacancyId); _logger.Error(message, e); return(FailedApplicationViewModel(vacancyId, candidateId, "Submission of traineeship application", ApplicationPageMessages.SubmitApplicationFailed, e)); } catch (Exception e) { var message = string.Format( "Submit traineeship application failed for candidate ID: {0}, vacancy ID: {1}.", candidateId, vacancyId); _logger.Error(message, e); return(FailedApplicationViewModel(vacancyId, candidateId, "Submission of traineeship application", ApplicationPageMessages.SubmitApplicationFailed, e)); } }
public void OkIsJavascript() { var viewModel = new TraineeshipApplicationViewModel { Candidate = new TraineeshipCandidateViewModel(), VacancyDetail = new VacancyDetailViewModel(), IsJavascript = true }; TraineeshipApplicationProvider.Setup(p => p.GetApplicationViewModel(It.IsAny <Guid>(), ValidVacancyId)).Returns(new TraineeshipApplicationViewModel()); TraineeshipApplicationProvider.Setup(p => p.PatchApplicationViewModel(It.IsAny <Guid>(), It.IsAny <TraineeshipApplicationViewModel>(), It.IsAny <TraineeshipApplicationViewModel>())).Returns <Guid, TraineeshipApplicationViewModel, TraineeshipApplicationViewModel>((cid, svm, vm) => vm); TraineeshipApplicationProvider.Setup(p => p.SubmitApplication(It.IsAny <Guid>(), It.IsAny <int>(), It.IsAny <TraineeshipApplicationViewModel>())).Returns <Guid, int, TraineeshipApplicationViewModel>((cid, vid, vm) => vm); var response = Mediator.Submit(Guid.NewGuid(), ValidVacancyId, viewModel); response.AssertCode(TraineeshipApplicationMediatorCodes.Submit.Ok, false, true); }
public TraineeshipApplicationViewModel PatchApplicationViewModel( Guid candidateId, TraineeshipApplicationViewModel savedModel, TraineeshipApplicationViewModel submittedModel) { _logger.Debug( "Calling TraineeshipApplicationProvider to patch the Application View Model for candidate ID: {0}.", candidateId); try { if (savedModel == null) { return(new TraineeshipApplicationViewModel(ApplicationPageMessages.SubmitApplicationFailed)); } if (submittedModel.IsJavascript && !submittedModel.Candidate.MonitoringInformation.RequiresSupportForInterview) { submittedModel.Candidate.MonitoringInformation.AnythingWeCanDoToSupportYourInterview = string.Empty; } savedModel.Candidate.MonitoringInformation = submittedModel.Candidate.MonitoringInformation; savedModel.Candidate.HasQualifications = submittedModel.Candidate.HasQualifications; savedModel.Candidate.Qualifications = submittedModel.Candidate.Qualifications; savedModel.Candidate.HasWorkExperience = submittedModel.Candidate.HasWorkExperience; savedModel.Candidate.WorkExperience = submittedModel.Candidate.WorkExperience; savedModel.Candidate.HasTrainingCourses = submittedModel.Candidate.HasTrainingCourses; savedModel.Candidate.TrainingCourses = submittedModel.Candidate.TrainingCourses; savedModel.Candidate.EmployerQuestionAnswers = submittedModel.Candidate.EmployerQuestionAnswers; return(savedModel); } catch (Exception e) { var message = string.Format( "Patch traineeship application View Model failed for user {0}.", candidateId); _logger.Error(message, e); throw; } }
public MediatorResponse <TraineeshipApplicationViewModel> Submit(Guid candidateId, int vacancyId, TraineeshipApplicationViewModel viewModel) { viewModel = StripApplicationViewModelBeforeValidation(viewModel); var savedModel = _traineeshipApplicationProvider.GetApplicationViewModel(candidateId, vacancyId); if (savedModel.HasError()) { // TODO: change this to something specific to traineeships? return(GetMediatorResponse(TraineeshipApplicationMediatorCodes.Submit.Error, viewModel, ApplicationPageMessages.SubmitApplicationFailed, UserMessageLevel.Warning, new { id = vacancyId })); } viewModel = _traineeshipApplicationProvider.PatchApplicationViewModel(candidateId, savedModel, viewModel); var submittedApplicationModel = _traineeshipApplicationProvider.SubmitApplication(candidateId, vacancyId, viewModel); if (submittedApplicationModel.ViewModelStatus == ApplicationViewModelStatus.ApplicationInIncorrectState) { return(GetMediatorResponse <TraineeshipApplicationViewModel>(TraineeshipApplicationMediatorCodes.Submit.IncorrectState)); } if (submittedApplicationModel.ViewModelStatus == ApplicationViewModelStatus.Error) { // TODO: change this to something specific to traineeships? return(GetMediatorResponse(TraineeshipApplicationMediatorCodes.Submit.Error, viewModel, ApplicationPageMessages.SubmitApplicationFailed, UserMessageLevel.Warning, new { id = vacancyId })); } var parameters = new { id = vacancyId, vacancyReference = submittedApplicationModel.VacancyDetail.VacancyReference, vacancyTitle = submittedApplicationModel.VacancyDetail.Title }; return(GetMediatorResponse <TraineeshipApplicationViewModel>(TraineeshipApplicationMediatorCodes.Submit.Ok, parameters: parameters)); }
public MediatorResponse <TraineeshipApplicationViewModel> AddEmptyQualificationRows(TraineeshipApplicationViewModel viewModel) { viewModel.Candidate.Qualifications = RemoveEmptyRowsFromQualifications(viewModel.Candidate.Qualifications); viewModel.Candidate.HasQualifications = viewModel.Candidate.Qualifications.Any(); viewModel.DefaultQualificationRows = 5; viewModel.DefaultWorkExperienceRows = 0; viewModel.DefaultTrainingCourseRows = 0; return(GetMediatorResponse(TraineeshipApplicationMediatorCodes.AddEmptyQualificationRows.Ok, viewModel)); }
public MediatorResponse <TraineeshipApplicationViewModel> AddEmptyWorkExperienceRows(TraineeshipApplicationViewModel viewModel) { viewModel.Candidate.WorkExperience = RemoveEmptyRowsFromWorkExperience(viewModel.Candidate.WorkExperience); viewModel.Candidate.HasWorkExperience = viewModel.Candidate.WorkExperience.Count() != 0; viewModel.DefaultQualificationRows = 0; viewModel.DefaultWorkExperienceRows = 3; return(GetMediatorResponse(TraineeshipApplicationMediatorCodes.AddEmptyWorkExperienceRows.Ok, viewModel)); }
private static TraineeshipApplicationViewModel StripApplicationViewModelBeforeValidation(TraineeshipApplicationViewModel model) { model.Candidate.Qualifications = RemoveEmptyRowsFromQualifications(model.Candidate.Qualifications); model.Candidate.WorkExperience = RemoveEmptyRowsFromWorkExperience(model.Candidate.WorkExperience); model.DefaultQualificationRows = 0; model.DefaultWorkExperienceRows = 0; if (model.IsJavascript) { return(model); } model.Candidate.HasQualifications = model.Candidate.Qualifications.Count() != 0; model.Candidate.HasWorkExperience = model.Candidate.WorkExperience.Count() != 0; return(model); }