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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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)); }