public void SecondQuestionValidation(string secondQuestion, bool expectValid)
        {
            var viewModel = new VacancyQuestionsViewModel
            {
                SecondQuestion = secondQuestion
            };
            var vacancyViewModel = new VacancyViewModelBuilder().With(viewModel).With(_furtherVacancyDetailsViewModel).Build();

            _validator.Validate(viewModel);
            _aggregateValidator.Validate(vacancyViewModel);
            _aggregateValidator.Validate(vacancyViewModel, ruleSet: RuleSets.Errors);
            _aggregateValidator.Validate(vacancyViewModel, ruleSet: RuleSets.Warnings);
            _aggregateValidator.Validate(vacancyViewModel, ruleSet: RuleSets.ErrorsAndWarnings);

            if (expectValid)
            {
                _validator.ShouldNotHaveValidationErrorFor(vm => vm.SecondQuestion, viewModel);
                _aggregateValidator.ShouldNotHaveValidationErrorFor(vm => vm.VacancyQuestionsViewModel, vm => vm.VacancyQuestionsViewModel.SecondQuestion, vacancyViewModel);
                _aggregateValidator.ShouldNotHaveValidationErrorFor(vm => vm.VacancyQuestionsViewModel, vm => vm.VacancyQuestionsViewModel.SecondQuestion, vacancyViewModel, RuleSets.Errors);
                _aggregateValidator.ShouldNotHaveValidationErrorFor(vm => vm.VacancyQuestionsViewModel, vm => vm.VacancyQuestionsViewModel.SecondQuestion, vacancyViewModel, RuleSets.Warnings);
                _aggregateValidator.ShouldNotHaveValidationErrorFor(vm => vm.VacancyQuestionsViewModel, vm => vm.VacancyQuestionsViewModel.SecondQuestion, vacancyViewModel, RuleSets.ErrorsAndWarnings);
            }
            else
            {
                _validator.ShouldHaveValidationErrorFor(vm => vm.SecondQuestion, viewModel);
                _aggregateValidator.ShouldHaveValidationErrorFor(vm => vm.VacancyQuestionsViewModel, vm => vm.VacancyQuestionsViewModel.SecondQuestion, vacancyViewModel);
                _aggregateValidator.ShouldHaveValidationErrorFor(vm => vm.VacancyQuestionsViewModel, vm => vm.VacancyQuestionsViewModel.SecondQuestion, vacancyViewModel, RuleSets.Errors);
                _aggregateValidator.ShouldNotHaveValidationErrorFor(vm => vm.VacancyQuestionsViewModel, vm => vm.VacancyQuestionsViewModel.SecondQuestion, vacancyViewModel, RuleSets.Warnings);
                _aggregateValidator.ShouldHaveValidationErrorFor(vm => vm.VacancyQuestionsViewModel, vm => vm.VacancyQuestionsViewModel.SecondQuestion, vacancyViewModel, RuleSets.ErrorsAndWarnings);
            }
        }
        public ActionResult Questions(VacancyQuestionsViewModel viewModel)
        {
            var response = _vacancyMediator.UpdateVacancy(viewModel);

            ModelState.Clear();

            switch (response.Code)
            {
            case VacancyMediatorCodes.UpdateVacancy.FailedValidation:
                response.ValidationResult.AddToModelState(ModelState, string.Empty);
                return(View(response.ViewModel));

            case VacancyMediatorCodes.UpdateVacancy.Ok:
                return(RedirectToRoute(ManagementRouteNames.ReviewVacancy,
                                       new
                {
                    vacancyReferenceNumber = response.ViewModel.VacancyReferenceNumber
                }));

            case VacancyMediatorCodes.UpdateVacancy.InvalidVacancy:
                SetUserMessage(response.Message);
                return(RedirectToRoute(ManagementRouteNames.Dashboard));

            default:
                throw new InvalidMediatorCodeException(response.Code);
            }
        }
        public void DefaultShouldNotHaveAnyValidationErrors()
        {
            var viewModel = new VacancyQuestionsViewModel();

            var result = _validator.Validate(viewModel);

            result.IsValid.Should().BeTrue();
        }
예제 #4
0
        private static VacancyQuestionsViewModel GetVacancyViewModelWithErrorsInQuestions(
            int vacancyReferenceNumber)
        {
            var viewModel = new VacancyQuestionsViewModel
            {
                FirstQuestion          = "<script></script>",
                VacancyReferenceNumber = vacancyReferenceNumber
            };

            return(viewModel);
        }
        public void ShouldShowSaveAndExitButton()
        {
            var details = new VacancyQuestions();

            var viewModel = new VacancyQuestionsViewModel {
            };

            var view = details.RenderAsHtml(viewModel);

            view.GetElementbyId("VacancyQuestionsAndExit").Should().NotBeNull("Should exists a save and exit button");
        }
예제 #6
0
        private static VacancyQuestionsViewModel GetVacancyQuestionsViewModel(
            int vacancyReferenceNumber)
        {
            var viewModel = new VacancyQuestionsViewModel
            {
                FirstQuestion          = "first question",
                SecondQuestion         = "second question",
                VacancyReferenceNumber = vacancyReferenceNumber
            };

            return(viewModel);
        }
        public MediatorResponse <VacancyQuestionsViewModel> UpdateVacancy(VacancyQuestionsViewModel viewModel)
        {
            var validationResult = _vacancyQuestionsViewModelServerValidator.Validate(viewModel);

            if (!validationResult.IsValid)
            {
                return(GetMediatorResponse(VacancyMediatorCodes.UpdateVacancy.FailedValidation, viewModel, validationResult));
            }

            var updatedViewModel = _vacancyQaProvider.UpdateVacancyWithComments(viewModel);

            return(ReturnResult(updatedViewModel));
        }
예제 #8
0
        public void GetVacancyQuestionsViewModelShouldGetViewmodelFromProvider()
        {
            const int vacancyReferenceNumber = 1;
            var       vacancyProvider        = new Mock <IVacancyQAProvider>();
            var       mediator  = new VacancyMediatorBuilder().With(vacancyProvider).Build();
            var       viewModel = new VacancyQuestionsViewModel();

            vacancyProvider.Setup(vp => vp.GetVacancyQuestionsViewModel(vacancyReferenceNumber)).Returns(viewModel);

            var result = mediator.GetVacancyQuestionsViewModel(vacancyReferenceNumber);

            result.AssertCodeAndMessage(VacancyMediatorCodes.GetVacancyQuestionsViewModel.Ok);
            vacancyProvider.Verify(vp => vp.GetVacancyQuestionsViewModel(vacancyReferenceNumber));
        }
        public static VacancyQuestionsViewModel ConvertToVacancyQuestionsViewModel(this Vacancy vacancy)
        {
            var vacancyViewModel = new VacancyQuestionsViewModel
            {
                VacancyReferenceNumber = vacancy.VacancyReferenceNumber,
                FirstQuestion          = vacancy.FirstQuestion,
                SecondQuestion         = vacancy.SecondQuestion,
                FirstQuestionComment   = vacancy.FirstQuestionComment,
                SecondQuestionComment  = vacancy.SecondQuestionComment,
                Status      = vacancy.Status,
                VacancyType = vacancy.VacancyType
            };

            return(vacancyViewModel);
        }
        public void SecondQuestionInvalidCharacters(string secondQuestion, bool expectValid)
        {
            var viewModel = new VacancyQuestionsViewModel
            {
                SecondQuestion = secondQuestion
            };

            _validator.Validate(viewModel);

            if (expectValid)
            {
                _validator.ShouldNotHaveValidationErrorFor(vm => vm.SecondQuestion, viewModel);
            }
            else
            {
                _validator.ShouldHaveValidationErrorFor(vm => vm.SecondQuestion, viewModel);
            }
        }
예제 #11
0
 public VacancyViewModelBuilder With(VacancyQuestionsViewModel vacancyQuestionsViewModel)
 {
     _vacancyQuestionsViewModel = vacancyQuestionsViewModel;
     return(this);
 }
        public void ShouldReturnOKIfTheUserCanLockTheVacancy()
        {
            //Arrange
            const string userName = "******";
            var          utcNow   = DateTime.UtcNow;
            const int    vacancyReferenceNumber = 1;
            const string aString = "aString";

            var viewModel = new VacancyQuestionsViewModel
            {
                FirstQuestion            = aString,
                SecondQuestion           = aString,
                FirstQuestionComment     = aString,
                SecondQuestionComment    = aString,
                VacancyReferenceNumber   = vacancyReferenceNumber,
                AutoSaveTimeoutInSeconds = 60
            };

            var vacancy = new Fixture().Build <Vacancy>()
                          .With(av => av.VacancyReferenceNumber, vacancyReferenceNumber)
                          .With(av => av.FirstQuestion, aString)
                          .With(av => av.SecondQuestion, aString)
                          .With(av => av.FirstQuestionComment, aString)
                          .With(av => av.SecondQuestionComment, aString)
                          .Create();

            var vacancyPostingService = new Mock <IVacancyPostingService>();
            var currentUserService    = new Mock <ICurrentUserService>();

            currentUserService.Setup(cus => cus.CurrentUserName).Returns(userName);
            var dateTimeService = new Mock <IDateTimeService>();

            dateTimeService.Setup(dts => dts.UtcNow).Returns(utcNow);
            var vacancylockingService = new Mock <IVacancyLockingService>();

            vacancylockingService.Setup(vls => vls.IsVacancyAvailableToQABy(userName, vacancy)).Returns(true);
            var configurationService = new Mock <IConfigurationService>();

            configurationService.Setup(x => x.Get <RecruitWebConfiguration>())
            .Returns(new RecruitWebConfiguration {
                AutoSaveTimeoutInSeconds = 60
            });

            //Arrange: get AV, update retrieved AV with NVVM, save modified AV returning same modified AV, map AV to new NVVM with same properties as input
            vacancyPostingService.Setup(
                vps => vps.GetVacancyByReferenceNumber(vacancyReferenceNumber)).Returns(vacancy);

            vacancyPostingService.Setup(vps => vps.UpdateVacancy(It.IsAny <Vacancy>())).Returns((Vacancy av) => av);

            var mapper = new Mock <IMapper>();

            mapper.Setup(m => m.Map <Vacancy, VacancyQuestionsViewModel>(It.IsAny <Vacancy>()))
            .Returns((Vacancy av) => viewModel);

            var vacancyProvider =
                new VacancyProviderBuilder().With(vacancyPostingService)
                .With(mapper)
                .With(currentUserService)
                .With(dateTimeService)
                .With(vacancylockingService)
                .With(configurationService)
                .Build();

            var expectedResult = new QAActionResult <VacancyQuestionsViewModel>(QAActionResultCode.Ok, viewModel);

            //Act
            var result = vacancyProvider.UpdateVacancyWithComments(viewModel);

            //Assert
            vacancyPostingService.Verify(
                vps => vps.GetVacancyByReferenceNumber(viewModel.VacancyReferenceNumber), Times.Once);
            vacancyPostingService.Verify(
                vps =>
                vps.UpdateVacancy(
                    It.Is <Vacancy>(av => av.VacancyReferenceNumber == viewModel.VacancyReferenceNumber &&
                                    av.QAUserName == userName && av.DateStartedToQA == utcNow)));
            result.ShouldBeEquivalentTo(expectedResult);
        }