Exemplo n.º 1
0
        public void ShouldUpdateTheVacancyIfWeAcceptTheWarningsAndTheyAreEqualFromThePreviousOnes(VacancyApplicationsState state, string expectedCode)
        {
            const int vacancyReferenceNumber = 1;
            const int oldWarningHash         = 128335101;

            var closingDate       = new DateViewModel(DateTime.Now.AddDays(20));
            var possibleStartDate = new DateViewModel(DateTime.Now.AddDays(21));

            var viewModel = new VacancyViewModelBuilder().With(new VacancyDatesViewModel
            {
                ClosingDate       = closingDate,
                PossibleStartDate = possibleStartDate
            }).BuildValid(VacancyStatus.Live, VacancyType.Apprenticeship).FurtherVacancyDetailsViewModel;

            viewModel.VacancyReferenceNumber   = vacancyReferenceNumber;
            viewModel.WarningsHash             = oldWarningHash;
            viewModel.VacancyApplicationsState = state;

            var mediator = GetMediator();

            VacancyPostingProvider.Setup(p => p.UpdateVacancyDates(It.IsAny <FurtherVacancyDetailsViewModel>())).Returns(viewModel);

            var result = mediator.UpdateVacancyDates(viewModel, true);

            result.Code.Should().Be(expectedCode);
            VacancyPostingProvider.Verify(
                p =>
                p.UpdateVacancyDates(
                    It.Is <FurtherVacancyDetailsViewModel>(
                        v =>
                        v.VacancyReferenceNumber == vacancyReferenceNumber &&
                        v.VacancyDatesViewModel.ClosingDate == closingDate &&
                        v.VacancyDatesViewModel.PossibleStartDate == possibleStartDate)));
        }
        public void CanHaveApplications_NoApplicationsRouteTest(VacancyStatus status, bool shouldHaveArchiveMessage)
        {
            //Arrange
            var vacancyViewModel = new VacancyViewModelBuilder().BuildValid(status, VacancyType.Apprenticeship);

            vacancyViewModel.ApplicationCount = 0;
            VacancyPostingProvider.Setup(p => p.GetVacancy(It.IsAny <int>())).Returns(vacancyViewModel);
            var mediator = GetMediator();

            //Act
            var result = mediator.GetPreviewVacancyViewModel(0);

            //Assert
            if (shouldHaveArchiveMessage)
            {
                result.AssertMessage(VacancyPostingMediatorCodes.GetPreviewVacancyViewModel.Ok, VacancyViewModelMessages.VacancyHasBeenArchived + "<br/>" + VacancyViewModelMessages.NoApplications, UserMessageLevel.Info);
            }
            else
            {
                result.AssertMessage(VacancyPostingMediatorCodes.GetPreviewVacancyViewModel.Ok,
                                     status == VacancyStatus.Closed
                        ? VacancyViewModelMessages.Closed
                        : VacancyViewModelMessages.NoApplications, UserMessageLevel.Info);
            }
        }
        public void ShouldReturnOnlineVacancyOkIfCalledFromTheSaveAndContinueActionAndTheVacancyIsAnOnlineOne()
        {
            var newVacancyViewModel = new VacancyViewModel
            {
                NewVacancyViewModel = new NewVacancyViewModel
                {
                    OfflineVacancy = false
                }
            };

            var vacancyRequirementsAndProspects = new VacancyRequirementsProspectsViewModel();

            VacancyPostingProvider.Setup(p => p.GetVacancy(_viewModel.VacancyReferenceNumber))
            .Returns(newVacancyViewModel);
            VacancyPostingProvider.Setup(p => p.UpdateVacancy(It.IsAny <VacancyRequirementsProspectsViewModel>()))
            .Returns(vacancyRequirementsAndProspects);

            var mediator = GetMediator();

            var result = mediator.UpdateVacancy(_viewModel);

            result.Should()
            .Match(
                (MediatorResponse <VacancyRequirementsProspectsViewModel> p) =>
                p.Code == VacancyPostingMediatorCodes.UpdateVacancy.OnlineVacancyOk);
        }
        public void ClosingDateWarnings()
        {
            //Arrange
            var yesterday = DateTime.Today.AddDays(-1);

            var viewModel = new FurtherVacancyDetailsViewModel
            {
                VacancyDatesViewModel = new VacancyDatesViewModel
                {
                    ClosingDate       = new DateViewModel(yesterday),
                    PossibleStartDate = new DateViewModel(yesterday)
                },
                Wage = new WageViewModel()
            };
            var vacancyViewModel = new VacancyViewModelBuilder().With(viewModel).Build();

            VacancyPostingProvider.Setup(p => p.GetVacancy(It.IsAny <int>())).Returns(vacancyViewModel);
            var mediator = GetMediator();

            //Act
            var result = mediator.GetPreviewVacancyViewModel(0);

            //Assert
            result.Code.Should().Be(VacancyPostingMediatorCodes.GetPreviewVacancyViewModel.FailedValidation);
            result.ValidationResult.Errors.Count(e => e.PropertyName == "FurtherVacancyDetailsViewModel.VacancyDatesViewModel.ClosingDate").Should().Be(2);
            result.ValidationResult.Errors.Count(e => e.PropertyName == "FurtherVacancyDetailsViewModel.VacancyDatesViewModel.PossibleStartDate").Should().Be(2);
        }
Exemplo n.º 5
0
        public void ShouldReturnAWarningHashIfTheModelHasOnlyWarnings()
        {
            const int vacancyReferenceNumber = 1;

            var viewModel = new FurtherVacancyDetailsViewModel
            {
                Wage = new WageViewModel()
                {
                    Type = WageType.NationalMinimum, Classification = WageClassification.NationalMinimum, CustomType = CustomWageType.NotApplicable, Amount = null, AmountLowerBound = null, AmountUpperBound = null, Text = null, Unit = WageUnit.Weekly, HoursPerWeek = 30
                },
                VacancyDatesViewModel = new VacancyDatesViewModel
                {
                    ClosingDate       = new DateViewModel(DateTime.Now.AddDays(7)),
                    PossibleStartDate = new DateViewModel(DateTime.Now.AddDays(7))
                }
            };

            VacancyPostingProvider.Setup(p => p.GetVacancySummaryViewModel(vacancyReferenceNumber)).Returns(viewModel);
            var mediator = GetMediator();

            var result = mediator.GetVacancySummaryViewModel(vacancyReferenceNumber, true, false);

            result.Code.Should().Be(VacancyPostingMediatorCodes.GetVacancySummaryViewModel.FailedValidation);
            result.ViewModel.WarningsHash.Should().NotBe(0);
            result.ViewModel.Should().Be(viewModel);
        }
Exemplo n.º 6
0
        public void ShouldSubmitVacancy()
        {
            var vvm = new VacancyViewModelBuilder().BuildValid(VacancyStatus.Draft, VacancyType.Apprenticeship);

            VacancyPostingProvider.Setup(p => p.GetVacancy(vvm.VacancyReferenceNumber)).Returns(vvm);
            VacancyPostingProvider.Setup(p => p.SubmitVacancy(It.IsAny <int>())).Returns(vvm);
            var mediator = GetMediator();

            var result = mediator.SubmitVacancy(vvm.VacancyReferenceNumber, false);

            result.Code.Should().Be(VacancyPostingMediatorCodes.SubmitVacancy.SubmitOk);
        }
Exemplo n.º 7
0
        public void ShouldReturnVacancyInIncorrectStateErrorCodeIfVacancyIsInReferredStatus()
        {
            int vacancyReferenceNumber = 1;

            VacancyPostingProvider.Setup(p => p.GetVacancy(vacancyReferenceNumber)).Returns(new VacancyViewModel {
                Status = VacancyStatus.Referred
            });
            var mediator = GetMediator();

            var result = mediator.CloneVacancy(vacancyReferenceNumber);

            result.Code.Should().Be(VacancyPostingMediatorCodes.CloneVacancy.VacancyInIncorrectState);
        }
        public void CannotHaveApplications(VacancyStatus status)
        {
            //Arrange
            var vacancyViewModel = new VacancyViewModelBuilder().BuildValid(status, VacancyType.Apprenticeship);

            VacancyPostingProvider.Setup(p => p.GetVacancy(It.IsAny <int>())).Returns(vacancyViewModel);
            var mediator = GetMediator();

            //Act
            var result = mediator.GetPreviewVacancyViewModel(0);

            //Assert
            result.AssertCodeAndMessage(VacancyPostingMediatorCodes.GetPreviewVacancyViewModel.Ok);
        }
Exemplo n.º 9
0
        public void ShouldReturnValidationErrorIfNotOptedIn()
        {
            var vvm = new VacancyViewModelBuilder().BuildValid(VacancyStatus.Referred, VacancyType.Apprenticeship);

            vvm.ResubmitOption = false;

            VacancyPostingProvider.Setup(p => p.GetVacancy(vvm.VacancyReferenceNumber)).Returns(vvm);
            var mediator = GetMediator();

            var result = mediator.SubmitVacancy(vvm.VacancyReferenceNumber, false);

            result.Code.Should().Be(VacancyPostingMediatorCodes.SubmitVacancy.FailedValidation);
            result.ValidationResult.Errors.Should().NotBeNull();
            result.ValidationResult.Errors.Count.Should().Be(1);
        }
        public void CanHaveApplications_OneApplicationRouteTest(VacancyStatus status, bool messageShouldBeNull)
        {
            //Arrange
            var vacancyViewModel = new VacancyViewModelBuilder().BuildValid(status, VacancyType.Apprenticeship);

            vacancyViewModel.ApplicationCount = 1;
            VacancyPostingProvider.Setup(p => p.GetVacancy(It.IsAny <int>())).Returns(vacancyViewModel);
            var mediator = GetMediator();

            //Act
            var result = mediator.GetPreviewVacancyViewModel(0);

            //Assert
            result.AssertCodeAndMessage(VacancyPostingMediatorCodes.GetPreviewVacancyViewModel.Ok, false, messageShouldBeNull);
        }
Exemplo n.º 11
0
        public void ShouldReturnErrorIfPostCodeAnywhereNotAccessible()
        {
            const string ukprn = "123567";

            var viewModel = new Fixture().Create <LocationSearchViewModel>();

            VacancyPostingProvider
            .Setup(p => p.AddLocations(viewModel))
            .Throws(new CustomException(ErrorCodes.GeoCodeLookupProviderFailed));

            var mediator = GetMediator();

            var result = mediator.AddLocations(viewModel, ukprn);

            result.AssertMessage(VacancyPostingMediatorCodes.CreateVacancy.FailedGeoCodeLookup, ApplicationPageMessages.PostcodeLookupFailed, UserMessageLevel.Error);
        }
Exemplo n.º 12
0
        public void ShouldReturnNoLocationSelectedIfItsAMultilocationVacancyWithoutAnyLocationSet()
        {
            const int vacancyReferenceNumber = 1234;

            VacancyPostingProvider.Setup(p => p.GetNewVacancyViewModel(vacancyReferenceNumber)).Returns(new NewVacancyViewModel
            {
                IsEmployerLocationMainApprenticeshipLocation = false,
                LocationAddresses = new List <VacancyLocationAddressViewModel>()
            });


            var mediator = GetMediator();
            var result   = mediator.GetNewVacancyViewModel(vacancyReferenceNumber, true, null);

            result.AssertCodeAndMessage(VacancyPostingMediatorCodes.GetNewVacancyViewModel.LocationNotSet);
        }
Exemplo n.º 13
0
        public void ShouldReturnAViewModelWithTheCurrentPageAsOne()
        {
            var          vacancyGuid    = Guid.NewGuid();
            const string ukprn          = "ukprn";
            const int    employerId     = 5;
            const int    providerSiteId = 44;

            VacancyPostingProvider.Setup(
                p =>
                p.LocationAddressesViewModel(It.IsAny <string>(), It.IsAny <int>(), It.IsAny <int>(),
                                             It.IsAny <Guid>(), It.IsAny <bool>())).Returns(new LocationSearchViewModel());

            var mediator = GetMediator();

            var result = mediator.GetLocationAddressesViewModel(providerSiteId, employerId, ukprn, vacancyGuid, false, false);

            result.ViewModel.CurrentPage.Should().Be(1);
        }
Exemplo n.º 14
0
        public void ShouldReturnOkIfThereIsntAnyValidationError()
        {
            var vacancyReferenceNumber = 1;

            var viewModel = new VacancyViewModelBuilder().With(new VacancyDatesViewModel
            {
                ClosingDate       = new DateViewModel(DateTime.Now.AddDays(20)),
                PossibleStartDate = new DateViewModel(DateTime.Now.AddDays(21))
            }).BuildValid(VacancyStatus.Live, VacancyType.Apprenticeship).FurtherVacancyDetailsViewModel;

            VacancyPostingProvider.Setup(p => p.GetVacancySummaryViewModel(vacancyReferenceNumber)).Returns(viewModel);
            var mediator = GetMediator();

            var result = mediator.GetVacancySummaryViewModel(vacancyReferenceNumber, true, false);

            result.Code.Should().Be(VacancyPostingMediatorCodes.GetVacancySummaryViewModel.Ok);
            result.ViewModel.Should().Be(viewModel);
        }
Exemplo n.º 15
0
        public void FailedMinimumWageValidation()
        {
            var closingDate           = DateTime.Now.AddDays(7);
            var minimumWageChangeDate = new DateTime(2016, 10, 1);

            if (closingDate < minimumWageChangeDate)
            {
                closingDate = minimumWageChangeDate;
            }

            var viewModel = new FurtherVacancyDetailsViewModel
            {
                VacancyDatesViewModel = new VacancyDatesViewModel
                {
                    ClosingDate       = new DateViewModel(closingDate),
                    PossibleStartDate = new DateViewModel(closingDate.AddDays(7))
                }
            };

            var existingViewModel = new VacancyViewModelBuilder().BuildValid(VacancyStatus.Live, VacancyType.Apprenticeship).FurtherVacancyDetailsViewModel;

            existingViewModel.ComeFromPreview = false;
            //Invalid after Sept 30th
            existingViewModel.Wage.Type           = WageType.Custom;
            existingViewModel.Wage.Classification = WageClassification.Custom;
            existingViewModel.Wage.CustomType     = CustomWageType.Fixed;
            existingViewModel.Wage.Amount         = 99;
            existingViewModel.Wage.Unit           = WageUnit.Weekly;
            existingViewModel.Wage.HoursPerWeek   = 30;

            VacancyPostingProvider.Setup(p => p.GetVacancySummaryViewModel(It.IsAny <int>())).Returns(existingViewModel);

            var mediator = GetMediator();

            var result = mediator.UpdateVacancyDates(viewModel, false);

            result.ViewModel.ComeFromPreview.Should().BeTrue();
            result.Code.Should().Be(VacancyPostingMediatorCodes.ManageDates.FailedCrossFieldValidation);
            result.Message.Level.Should().Be(UserMessageLevel.Warning);
            result.Message.Text.Should().Be(VacancyViewModelMessages.FailedCrossFieldValidation);
        }
        public void ShouldReturnErrorIfFailsGeocodingTheVacancy()
        {
            // Arrange
            const string ukprn         = "1234";
            var          vacancyGuid   = Guid.NewGuid();
            const int    vacanyPartyId = 1;
            const bool   isEmployerLocationMainApprenticeshipLocation = true;
            int?         numberOfPositions   = 2;
            const string employerWebsiteUrl  = "www.google.com";
            const string employerDescription = "description";

            var viewModel = new VacancyOwnerRelationshipViewModel
            {
                IsEmployerLocationMainApprenticeshipLocation = isEmployerLocationMainApprenticeshipLocation,
                NumberOfPositions = numberOfPositions,
                ProviderSiteId    = 42,
                Employer          = new EmployerViewModel
                {
                    EmployerId = 7
                },
                EmployerDescription        = employerDescription,
                EmployerWebsiteUrl         = employerWebsiteUrl,
                VacancyOwnerRelationshipId = vacanyPartyId,
                VacancyGuid         = vacancyGuid,
                IsAnonymousEmployer = false
            };

            ProviderProvider.Setup(p => p.ConfirmVacancyOwnerRelationship(viewModel)).Returns(viewModel);

            VacancyPostingProvider
            .Setup(p => p.CreateVacancy(It.IsAny <VacancyMinimumData>()))
            .Throws(new CustomException(ErrorCodes.GeoCodeLookupProviderFailed));

            // Act.
            var mediator = GetMediator();
            var result   = mediator.ConfirmEmployer(viewModel, ukprn);

            // Assert.
            result.AssertMessage(VacancyPostingMediatorCodes.ConfirmEmployer.FailedGeoCodeLookup, ApplicationPageMessages.PostcodeLookupFailed, UserMessageLevel.Error);
        }
Exemplo n.º 17
0
        public void ShouldMergeRequestAndExistingFurtherVacancyDetails()
        {
            const int vacancyReferenceNumber = 1;

            var viewModel = new FurtherVacancyDetailsViewModel
            {
                VacancyReferenceNumber = vacancyReferenceNumber,
                Wage = new WageViewModel()
                {
                    CustomType = CustomWageType.Fixed,
                    Amount     = 99, AmountLowerBound = null, AmountUpperBound = null, Text = null, Unit = WageUnit.Weekly, HoursPerWeek = 30
                },
                VacancyDatesViewModel = new VacancyDatesViewModel
                {
                    ClosingDate       = new DateViewModel(DateTime.Now.AddDays(7)),
                    PossibleStartDate = new DateViewModel(DateTime.Now.AddDays(7))
                }
            };

            var existingViewModel = new VacancyViewModelBuilder().With(new WageViewModel()
            {
                Type = WageType.NationalMinimum, Classification = WageClassification.NationalMinimum, CustomType = CustomWageType.NotApplicable, Amount = null, AmountLowerBound = null, AmountUpperBound = null, Text = null, Unit = WageUnit.Weekly, HoursPerWeek = 37.5m
            }).BuildValid(VacancyStatus.Live, VacancyType.Apprenticeship).FurtherVacancyDetailsViewModel;

            VacancyPostingProvider.Setup(p => p.GetVacancySummaryViewModel(vacancyReferenceNumber)).Returns(existingViewModel);

            var mediator = GetMediator();

            var result = mediator.UpdateVacancyDates(viewModel, false);

            VacancyPostingProvider.Verify(p => p.GetVacancySummaryViewModel(vacancyReferenceNumber));

            result.ViewModel.Wage.Type.Should().Be(viewModel.Wage.Type);
            result.ViewModel.Wage.Amount.Should().Be(viewModel.Wage.Amount);
            result.ViewModel.Wage.Text.Should().Be(existingViewModel.Wage.Text);
            result.ViewModel.Wage.Unit.Should().Be(viewModel.Wage.Unit);
            result.ViewModel.Wage.HoursPerWeek.Should().Be(existingViewModel.Wage.HoursPerWeek);
            result.ViewModel.VacancyDatesViewModel.ClosingDate.Should().Be(viewModel.VacancyDatesViewModel.ClosingDate);
            result.ViewModel.VacancyDatesViewModel.PossibleStartDate.Should().Be(viewModel.VacancyDatesViewModel.PossibleStartDate);
        }
        public void ShouldntWarnUserIfSwitchingFromOnlineToOfflineVacancyWithoutHavingAnyQuestionFilled()
        {
            VacancyPostingProvider.Setup(p => p.GetVacancy(It.IsAny <int>())).Returns(AVacancyWithNoQuestionsFilled());
            var mediator = GetMediator();

            var result = mediator.CreateVacancy(new NewVacancyViewModel
            {
                VacancyOwnerRelationship = new VacancyOwnerRelationshipViewModel
                {
                    Employer = new EmployerViewModel()
                },
                OfflineVacancy                 = true,
                OfflineApplicationUrl          = AWebPage,
                OfflineApplicationInstructions = AString,
                Title                  = AString,
                ShortDescription       = AString,
                VacancyReferenceNumber = AnInt
            }, Ukprn);

            result.Should()
            .Match((MediatorResponse <NewVacancyViewModel> p) => p.Message == null);
        }
        public void ShouldWarnUserIfSwitchingFromOnlineToOfflineVacancyHavingTextInQuestionTwo()
        {
            VacancyPostingProvider.Setup(p => p.GetVacancy(It.IsAny <int>())).Returns(AVacancyWithQuestionTwoFilled());
            var mediator = GetMediator();

            var result = mediator.CreateVacancy(new NewVacancyViewModel
            {
                VacancyOwnerRelationship = new VacancyOwnerRelationshipViewModel
                {
                    Employer = new EmployerViewModel()
                },
                OfflineVacancy                 = true,
                OfflineApplicationUrl          = AWebPage,
                OfflineApplicationInstructions = AString,
                Title                  = AString,
                ShortDescription       = AString,
                VacancyReferenceNumber = AnInt,
                VacancyType            = VacancyType.Apprenticeship
            }, Ukprn);

            result.Should()
            .Match((MediatorResponse <NewVacancyViewModel> p) => p.Message.Level == UserMessageLevel.Info &&
                   !string.IsNullOrWhiteSpace(p.Message.Text));
        }