Exemple #1
0
        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);
        }
Exemple #6
0
        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;
            }
        }
Exemple #10
0
        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);
        }
Exemple #12
0
        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();
        }
Exemple #13
0
        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");
            }
        }
Exemple #15
0
        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);
        }
Exemple #16
0
        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);
        }
Exemple #17
0
        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));
            }
        }
Exemple #18
0
        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);
        }
Exemple #19
0
        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);
        }