Ejemplo n.º 1
0
        public async Task <IActionResult> ApproveJobAdvert(ApproveJobAdvertViewModel vm)
        {
            if (!ModelState.IsValid)
            {
                return(View("ApproveJobAdvert"));
            }

            if (vm.ApproveJobAdvert.GetValueOrDefault())
            {
                var response = await _orchestrator.ApproveJobAdvertAsync(vm, User.ToVacancyUser());

                if (!response.Success)
                {
                    response.AddErrorsToModelState(ModelState);
                }

                if (ModelState.IsValid)
                {
                    if (response.Data.IsSubmitted)
                    {
                        return(RedirectToRoute(RouteNames.JobAdvertConfirmation_Get));
                    }

                    if (response.Data.HasLegalEntityAgreement == false)
                    {
                        return(RedirectToRoute(RouteNames.LegalEntityAgreement_HardStop_Get));
                    }

                    throw new Exception("Unknown submit state");
                }
            }
            else
            {
                return(RedirectToRoute(RouteNames.Vacancy_Preview_Get, new { VacancyId = vm.VacancyId, SubmitToEfsa = true }));
            }

            var viewModel = await _orchestrator.GetVacancyPreviewViewModelAsync(vm);

            viewModel.SoftValidationErrors = null;
            viewModel.SetSectionStates(viewModel, ModelState);

            return(View(ViewNames.VacancyPreview, viewModel));
        }
Ejemplo n.º 2
0
        public async Task ApproveJobAdvertAsync_ShouldNotSubmitWhenMissingAgreements(
            bool hasLegalEntityAgreement, bool shouldBeSubmitted)
        {
            //Arrange
            var user = new VacancyUser {
                Email = "*****@*****.**", Name = "advertname", UserId = "advertId"
            };

            var vacancy = new Vacancy
            {
                EmployerAccountId = "ABCDEF",
                AccountLegalEntityPublicHashedId = "XVYABD",
                Id                = Guid.Parse("84af954e-5baf-4942-897d-d00180a0839e"),
                Title             = "has a value",
                NumberOfPositions = 1,
                EmployerLocation  = new Address {
                    Postcode = "has a value"
                },
                ShortDescription = "has a value",
                ProgrammeId      = "has a value",
                Wage             = new Wage {
                    Duration = 1, WageType = WageType.FixedWage
                },
                LegalEntityName    = "legal name",
                EmployerNameOption = EmployerNameOption.RegisteredName,
                StartDate          = DateTime.Now,
                Status             = VacancyStatus.Review
            };

            var approveJobAdvertViewModel = new ApproveJobAdvertViewModel {
                ApproveJobAdvert = true, VacancyId = vacancy.Id, EmployerAccountId = "ABCDEF"
            };

            _mockRecruitVacancyClient.Setup(x => x.GetVacancyAsync(vacancy.Id)).ReturnsAsync(vacancy);
            _mockRecruitVacancyClient.Setup(x => x.GetEmployerDescriptionAsync(vacancy)).ReturnsAsync("employer description");
            _mockRecruitVacancyClient.Setup(x => x.GetEmployerNameAsync(vacancy)).ReturnsAsync("employer name");
            _mockRecruitVacancyClient.Setup(c => c.Validate(vacancy, It.IsAny <VacancyRuleSet>())).Returns(new EntityValidationResult());

            var geocodeImageService = new Mock <IGeocodeImageService>();
            var externalLinks       = new Mock <IOptions <ExternalLinksConfiguration> >();
            var mapper = new DisplayVacancyViewModelMapper(geocodeImageService.Object, externalLinks.Object, _mockRecruitVacancyClient.Object);

            var legalEntityAgreement = new Mock <ILegalEntityAgreementService>();

            legalEntityAgreement.Setup(l => l.HasLegalEntityAgreementAsync(vacancy.EmployerAccountId, vacancy.AccountLegalEntityPublicHashedId))
            .ReturnsAsync(hasLegalEntityAgreement);
            var utility = new Utility(_mockRecruitVacancyClient.Object, Mock.Of <IFeature>());

            var sut = new VacancyPreviewOrchestrator(_mockRecruitVacancyClient.Object,
                                                     Mock.Of <ILogger <VacancyPreviewOrchestrator> >(), mapper,
                                                     _mockReviewSummaryService.Object, legalEntityAgreement.Object,
                                                     _mockmessaging.Object,
                                                     Mock.Of <IOptions <ExternalLinksConfiguration> >(), utility);


            //Act
            var response = await sut.ApproveJobAdvertAsync(approveJobAdvertViewModel, user);

            //Assert
            var submittedTimes = shouldBeSubmitted ? Times.Once() : Times.Never();

            _mockmessaging.Verify(c => c.SendCommandAsync(It.IsAny <ICommand>()), submittedTimes);
            response.Data.IsSubmitted.Should().Be(shouldBeSubmitted);
            response.Data.HasLegalEntityAgreement.Should().Be(hasLegalEntityAgreement);
        }
        public async Task <OrchestratorResponse <SubmitVacancyResponse> > ApproveJobAdvertAsync(ApproveJobAdvertViewModel m, VacancyUser user)
        {
            var vacancy = await _utility.GetAuthorisedVacancyAsync(m, RouteNames.ApproveJobAdvert_Post);

            if (!vacancy.CanReview)
            {
                throw new InvalidStateException(string.Format(ErrMsg.VacancyNotAvailableForEditing, vacancy.Title));
            }

            var employerDescriptionTask = _vacancyClient.GetEmployerDescriptionAsync(vacancy);
            var employerNameTask        = _vacancyClient.GetEmployerNameAsync(vacancy);

            await Task.WhenAll(employerDescriptionTask, employerNameTask);

            vacancy.EmployerDescription = employerDescriptionTask.Result;
            vacancy.EmployerName        = employerNameTask.Result;

            return(await ValidateAndExecute(
                       vacancy,
                       v => ValidateVacancy(v, SubmitValidationRules),
                       v => SubmitActionAsync(v, user)
                       ));
        }