コード例 #1
0
        public ShareApplicationsViewModel GetShareApplicationsViewModel(int vacancyReferenceNumber)
        {
            var vacancy = _vacancyPostingService.GetVacancyByReferenceNumber(vacancyReferenceNumber);
            var vacancyOwnerRelationship = _providerService.GetVacancyOwnerRelationship(vacancy.VacancyOwnerRelationshipId, false);  // Closed vacancies can certainly have non-current vacancy parties
            var employer  = _employerService.GetEmployer(vacancyOwnerRelationship.EmployerId, false);
            var ukprn     = _currentUserService.GetClaimValue("ukprn");
            var provider  = _providerService.GetProvider(ukprn);
            var viewModel = new ShareApplicationsViewModel();

            viewModel.EmployerName           = employer.FullName;
            viewModel.ProviderName           = provider.TradingName;
            viewModel.VacancyType            = vacancy.VacancyType;
            viewModel.VacancyReferenceNumber = vacancyReferenceNumber;

            List <ApplicationSummary> applications = vacancy.VacancyType == VacancyType.Traineeship
                ? _traineeshipApplicationService.GetSubmittedApplicationSummaries(vacancy.VacancyId).Select(a => (ApplicationSummary)a).ToList()
                : _apprenticeshipApplicationService.GetSubmittedApplicationSummaries(vacancy.VacancyId).Select(a => (ApplicationSummary)a).ToList();

            var @new         = applications.Where(v => v.Status == ApplicationStatuses.Submitted).ToList();
            var viewed       = applications.Where(v => v.Status == ApplicationStatuses.InProgress).ToList();
            var successful   = applications.Where(v => v.Status == ApplicationStatuses.Successful).ToList();
            var unsuccessful = applications.Where(v => v.Status == ApplicationStatuses.Unsuccessful).ToList();

            viewModel.NewApplicationsCount          = @new.Count;
            viewModel.InProgressApplicationsCount   = viewed.Count;
            viewModel.SuccessfulApplicationsCount   = successful.Count;
            viewModel.UnsuccessfulApplicationsCount = unsuccessful.Count;
            viewModel.ApplicationSummaries          = _mapper.Map <List <ApplicationSummary>, List <ApplicationSummaryViewModel> >(applications.OrderBy(a => a.CandidateDetails.LastName).ToList());

            return(viewModel);
        }
コード例 #2
0
        public MediatorResponse <ShareApplicationsViewModel> ShareApplications(ShareApplicationsViewModel viewModel, UrlHelper urlHelper)
        {
            var validationResult = _shareApplicationsViewModelValidator.Validate(viewModel);

            var newViewModel = _applicationProvider.GetShareApplicationsViewModel(viewModel.VacancyReferenceNumber);

            newViewModel.SelectedApplicationIds = viewModel.SelectedApplicationIds;

            if (!validationResult.IsValid)
            {
                return(GetMediatorResponse(ApplicationMediatorCodes.ShareApplications.FailedValidation, newViewModel, validationResult));
            }

            var applicationLinks = new Dictionary <string, string>();

            foreach (var selectedApplicationId in viewModel.SelectedApplicationIds)
            {
                var application = newViewModel.ApplicationSummaries.Single(a => a.ApplicationId == selectedApplicationId);
                var anonymisedApplicationLinkData = new AnonymisedApplicationLink(application.ApplicationId, _dateTimeService.TwoWeeksFromUtcNow);
                var encryptedLinkData             = _encryptionService.Encrypt(anonymisedApplicationLinkData);
                var urlEncodedLinkData            = HttpUtility.UrlEncode(encryptedLinkData);
                var routeName   = newViewModel.VacancyType == VacancyType.Apprenticeship ? RecruitmentRouteNames.ViewAnonymousApprenticeshipApplication : RecruitmentRouteNames.ViewAnonymousTraineeshipApplication;
                var routeValues = new RouteValueDictionary();
                routeValues["application"] = urlEncodedLinkData;
                var link = urlHelper.RouteUrl(routeName, routeValues);
                applicationLinks[application.ApplicantID] = link;
            }

            _applicationProvider.ShareApplications(viewModel.VacancyReferenceNumber, newViewModel.ProviderName, applicationLinks, _dateTimeService.TwoWeeksFromUtcNow, viewModel.RecipientEmailAddress);

            return(GetMediatorResponse(ApplicationMediatorCodes.ShareApplications.Ok, newViewModel));
        }
コード例 #3
0
        public void TestUrlIsEncoded()
        {
            //Arrange
            Mock <IApplicationProvider> mockApplicationProvider = new Mock <IApplicationProvider>();
            Mock <ShareApplicationsViewModelValidator>             mockShareApplicationsViewModelValidator = new Mock <ShareApplicationsViewModelValidator>();
            Mock <IEncryptionService <AnonymisedApplicationLink> > mockEncryptionService = new Mock <IEncryptionService <AnonymisedApplicationLink> >();
            Mock <IDateTimeService> mockDateTimeService  = new Mock <IDateTimeService>();
            Mock <UrlHelper>        mockUrlHelper        = new Mock <UrlHelper>();
            Mock <ValidationResult> mockValidationResult = new Mock <ValidationResult>();
            var    applicationGuid    = Guid.NewGuid();
            string applicantId        = "applicantId";
            var    applicationSummary = new ApplicationSummaryViewModel()
            {
                ApplicationId = applicationGuid, ApplicantID = applicantId
            };

            mockValidationResult.Setup(m => m.IsValid).Returns(true);

            mockShareApplicationsViewModelValidator.Setup(m => m.Validate(It.IsAny <ShareApplicationsViewModel>()))
            .Returns(mockValidationResult.Object);

            mockApplicationProvider.Setup(m => m.GetShareApplicationsViewModel(It.IsAny <int>()))
            .Returns(new ShareApplicationsViewModel()
            {
                VacancyType          = VacancyType.Apprenticeship,
                ApplicationSummaries = { applicationSummary }
            });

            //this is the unencrypted version, that we should not use
            mockEncryptionService.Setup(m => m.Encrypt(It.IsAny <AnonymisedApplicationLink>())).Returns("abcABC+123/123");
            //this is the actual url data value
            mockUrlHelper.Setup(m => m.RouteUrl(It.IsAny <string>(), It.IsAny <RouteValueDictionary>())).Returns("THE_URL");

            var parameters = new ShareApplicationsViewModel();

            parameters.SelectedApplicationIds = new List <Guid>()
            {
                applicationGuid
            };
            parameters.ApplicationSummaries = new List <ApplicationSummaryViewModel>()
            {
                applicationSummary
            };

            var mediator = new ApplicationMediator(mockApplicationProvider.Object, mockShareApplicationsViewModelValidator.Object, mockEncryptionService.Object, mockDateTimeService.Object);

            //Act
            mediator.ShareApplications(parameters, mockUrlHelper.Object);

            //Assert
            mockApplicationProvider.Verify(m => m.ShareApplications(It.IsAny <int>(), It.IsAny <string>(), It.IsAny <Dictionary <string, string> >(), It.IsAny <DateTime>(), It.IsAny <string>()), Times.Once);
            mockApplicationProvider.Verify(m => m.ShareApplications(It.IsAny <int>(), It.IsAny <string>(), It.Is <Dictionary <string, string> >(d => d[applicantId].Equals("THE_URL")), It.IsAny <DateTime>(), It.IsAny <string>()), Times.Once);
            mockUrlHelper.Verify(m => m.RouteUrl(It.IsAny <string>(), It.Is <RouteValueDictionary>(rvd => rvd["application"].ToString().Contains("+"))), Times.Never);
            mockUrlHelper.Verify(m => m.RouteUrl(It.IsAny <string>(), It.Is <RouteValueDictionary>(rvd => rvd["application"].ToString().Contains("/"))), Times.Never);
        }
コード例 #4
0
        public ActionResult ShareApplications(ShareApplicationsViewModel viewModel)
        {
            var response = _applicationMediator.ShareApplications(viewModel, Url);

            switch (response.Code)
            {
            case ApplicationMediatorCodes.ShareApplications.Ok:
                SetUserMessage($"You have shared {response.ViewModel.SelectedApplicationIds.Count()} applications with {viewModel.RecipientEmailAddress}");
                return(View(response.ViewModel));

            case ApplicationMediatorCodes.ShareApplications.FailedValidation:
                response.ValidationResult.AddToModelStateWithSeverity(ModelState, string.Empty);
                return(View(response.ViewModel));

            default:
                throw new InvalidMediatorCodeException(response.Code);
            }
        }