public int CreateApplication(ApprenticeshipApplicationDetail apprenticeshipApplicationDetail) { var legacyCandidateId = GetLegacyCandidateId(apprenticeshipApplicationDetail.CandidateId); var request = CreateRequest(apprenticeshipApplicationDetail, legacyCandidateId); return(InternalCreateApplication(apprenticeshipApplicationDetail.CandidateId, request)); }
public void ShouldUpdateClosingDate( int oldClosingDateOffset, int newClosingDateOffset, bool expected) { // Arrange. var today = DateTime.Today; var detail = new ApprenticeshipApplicationDetail { Vacancy = new ApprenticeshipSummary { ClosingDate = today.AddDays(oldClosingDateOffset) } }; var summary = new ApplicationStatusSummary { ClosingDate = today.AddDays(newClosingDateOffset) }; // Act. var actual = detail.UpdateApprenticeshipApplicationDetail(summary, _mockReadRepository.Object, _mockWriteRepository.Object); // Assert. actual.Should().Be(expected); detail.Vacancy.ClosingDate.Should().Be(summary.ClosingDate); }
public ApprenticeshipApplicationDetail Build() { RegistrationBuilder = new RegistrationBuilder(_emailAddress); ApprenticeshipApplicationDetail = new ApprenticeshipApplicationDetail { CandidateId = _candidateId, CandidateInformation = new ApplicationTemplate(), Status = _applicationStatus, DateApplied = _dateApplied, VacancyStatus = VacancyStatuses.Live, Vacancy = new ApprenticeshipSummary { Id = _vacancyId, Title = "Vacancy " + _vacancyId, ClosingDate = _expirationDate } }; var repo = WebTestRegistry.Container.GetInstance <IApprenticeshipApplicationWriteRepository>(); ApprenticeshipApplicationDetail.CandidateDetails = RegistrationBuilder.Build(); repo.Save(ApprenticeshipApplicationDetail); return(ApprenticeshipApplicationDetail); }
private ApprenticeshipApplicationDetail UnarchiveApplication(ApprenticeshipApplicationDetail apprenticeshipApplicationDetail) { apprenticeshipApplicationDetail.IsArchived = false; _apprenticeshipApplicationWriteRepository.Save(apprenticeshipApplicationDetail); return(_apprenticeshipApplicationReadRepository.Get(apprenticeshipApplicationDetail.EntityId)); }
public void ShouldSendAlertWhenApprenticeshipApplicationOrVacancyUpdated(bool updated) { // Arrange. var today = DateTime.Today; var tomorrow = DateTime.Today.AddDays(1); var apprenticeshipApplicationDetail = new ApprenticeshipApplicationDetail { EntityId = Guid.NewGuid(), Status = ApplicationStatuses.Submitted, Vacancy = new ApprenticeshipSummary { ClosingDate = tomorrow } }; var applicationStatusSummary = new ApplicationStatusSummary { ClosingDate = updated ? today : tomorrow }; // Act. _strategy.Update(apprenticeshipApplicationDetail, applicationStatusSummary); // Assert. var times = updated ? 1 : 0; _mockApplicationStatusAlertStrategy.Verify(mock => mock .Send(apprenticeshipApplicationDetail.Status, applicationStatusSummary), Times.Exactly(times)); }
public static bool UpdateApprenticeshipApplicationDetail( this ApprenticeshipApplicationDetail apprenticeshipApplication, ApplicationStatusSummary applicationStatusSummary, IApprenticeshipApplicationReadRepository apprenticeshipApplicationReadRepository, IApprenticeshipApplicationWriteRepository apprenticeshipApplicationWriteRepository) { var updated = false; if (applicationStatusSummary.IsLegacySystemUpdate()) { // Only update application status etc. if update originated from Legacy system. if (apprenticeshipApplication.Status != applicationStatusSummary.ApplicationStatus) { var ignoreOwnershipCheck = applicationStatusSummary.UpdateSource == ApplicationStatusSummary.Source.Raa; updated = apprenticeshipApplicationWriteRepository.UpdateApplicationStatus(apprenticeshipApplication, applicationStatusSummary.ApplicationStatus, ignoreOwnershipCheck); if (updated) { //Ensure passed in entity is up to date with any changes var updatedApplication = apprenticeshipApplicationReadRepository.Get(apprenticeshipApplication.EntityId); apprenticeshipApplication.Status = updatedApplication.Status; apprenticeshipApplication.IsArchived = updatedApplication.IsArchived; apprenticeshipApplication.DateUpdated = updatedApplication.DateUpdated; apprenticeshipApplication.SuccessfulDateTime = updatedApplication.SuccessfulDateTime; apprenticeshipApplication.UnsuccessfulDateTime = updatedApplication.UnsuccessfulDateTime; } } if (apprenticeshipApplication.LegacyApplicationId != applicationStatusSummary.LegacyApplicationId) { // Ensure the application is linked to the legacy application. apprenticeshipApplication.LegacyApplicationId = applicationStatusSummary.LegacyApplicationId; updated = true; } if (apprenticeshipApplication.UnsuccessfulReason != applicationStatusSummary.UnsuccessfulReason && apprenticeshipApplication.Status == ApplicationStatuses.Unsuccessful) { apprenticeshipApplication.UnsuccessfulReason = applicationStatusSummary.UnsuccessfulReason; updated = true; } } if (apprenticeshipApplication.VacancyStatus != applicationStatusSummary.VacancyStatus) { apprenticeshipApplication.VacancyStatus = applicationStatusSummary.VacancyStatus; updated = true; } if (apprenticeshipApplication.Vacancy.ClosingDate != applicationStatusSummary.ClosingDate) { apprenticeshipApplication.Vacancy.ClosingDate = applicationStatusSummary.ClosingDate; updated = true; } return(updated); }
public void SaveApplication(Guid candidateId, int vacancyId, ApprenticeshipApplicationDetail apprenticeshipApplication) { Condition.Requires(apprenticeshipApplication); _logger.Debug( "Calling CandidateService to save the apprenticeship application of the user with Id={0} to the vacancy with Id={1}.", candidateId, vacancyId); _saveApplicationStrategy.SaveApplication(candidateId, vacancyId, apprenticeshipApplication); }
public ApprenticeshipApplicationDetail Build() { var detail = new ApprenticeshipApplicationDetail { CandidateId = _candidateId, Vacancy = new ApprenticeshipSummaryBuilder(_vacancyId).Build() }; return(detail); }
private void SyncToCandidatesApplicationTemplate(ApprenticeshipApplicationDetail apprenticeshipApplicationDetail) { var candidate = _candidateReadRepository.Get(apprenticeshipApplicationDetail.CandidateId); candidate.ApplicationTemplate.AboutYou = apprenticeshipApplicationDetail.CandidateInformation.AboutYou; candidate.ApplicationTemplate.EducationHistory = apprenticeshipApplicationDetail.CandidateInformation.EducationHistory; candidate.ApplicationTemplate.Qualifications = apprenticeshipApplicationDetail.CandidateInformation.Qualifications; candidate.ApplicationTemplate.WorkExperience = apprenticeshipApplicationDetail.CandidateInformation.WorkExperience; _candidateWriteRepository.Save(candidate); }
public void Update( ApprenticeshipApplicationDetail apprenticeshipApplication, ApplicationStatusSummary applicationStatusSummary) { var originalLegacyApplicationId = apprenticeshipApplication.LegacyApplicationId; var originalStatus = apprenticeshipApplication.Status; var originalVacancyStatus = apprenticeshipApplication.VacancyStatus; var originalClosingDate = apprenticeshipApplication.Vacancy.ClosingDate; var originalUnsuccessfulReason = apprenticeshipApplication.UnsuccessfulReason; var originalUnSuccessfulDateTime = apprenticeshipApplication.UnsuccessfulDateTime; // invoked because the status of the apprenticeshipApplication / vacancy *may* have changed if (apprenticeshipApplication.UpdateApprenticeshipApplicationDetail(applicationStatusSummary, _apprenticeshipApplicationReadRepository, _apprenticeshipApplicationWriteRepository)) { const string format = "Updating apprenticeship application (id='{0}', vacancy id='{1}', candidate='{2})" + " from legacy application id='{3}' to '{4}'," + " application status='{5}' to '{6}'," + " vacancy status='{7}' to '{8}'," + " closing date='{9}' to '{10}'," + " unsuccessful reason='{11}' to '{12}'"; _logger.Info( format, apprenticeshipApplication.EntityId, // 0 apprenticeshipApplication.Vacancy.Id, // 1 apprenticeshipApplication.CandidateDetails.EmailAddress, // 2 originalLegacyApplicationId, // 3 applicationStatusSummary.LegacyApplicationId, // 4 originalStatus, // 5 applicationStatusSummary.ApplicationStatus, // 6 originalVacancyStatus, // 7 applicationStatusSummary.VacancyStatus, // 8 originalClosingDate, // 9 applicationStatusSummary.ClosingDate, // 10 originalUnsuccessfulReason, // 11 applicationStatusSummary.UnsuccessfulReason, //12 originalUnSuccessfulDateTime, //13 applicationStatusSummary.UnsuccessfulDateTime); // 14 _apprenticeshipApplicationWriteRepository.Save(apprenticeshipApplication); _applicationStatusAlertStrategy.Send(originalStatus, applicationStatusSummary); } }
public ApprenticeshipApplicationDetail Save(ApprenticeshipApplicationDetail entity) { _logger.Debug("Calling repository to save ApprenticeshipApplicationDetail Id={0}, Status={1}", entity.EntityId, entity.Status); var mongoEntity = _mapper.Map <ApprenticeshipApplicationDetail, MongoApprenticeshipApplicationDetail>(entity); UpdateEntityTimestamps(mongoEntity); Collection.Save(mongoEntity); _logger.Debug("Saved ApprenticeshipApplicationDetail to repository with Id={0}", entity.EntityId); return(_mapper.Map <MongoApprenticeshipApplicationDetail, ApprenticeshipApplicationDetail>(mongoEntity)); }
private static School MapSchool(ApprenticeshipApplicationDetail apprenticeshipApplicationDetail) { var educationHistory = apprenticeshipApplicationDetail.CandidateInformation.EducationHistory; if (educationHistory == null) { return(null); } return(new School { Name = educationHistory.Institution, Town = null, AttendedFrom = MapYearToDate(educationHistory.FromYear), AttendedTo = MapYearToDate(educationHistory.ToYear) }); }
public bool UpdateApplicationStatus(ApprenticeshipApplicationDetail entity, ApplicationStatuses updatedStatus, bool ignoreOwnershipCheck) { var applicationId = entity.EntityId; var now = _dataTimeService.UtcNow; _logger.Info("Calling repository to try to update apprenticeship application status={1} for application with Id={0}", applicationId, updatedStatus); var idMatchQuery = Query <MongoApprenticeshipApplicationDetail> .EQ(e => e.Id, applicationId); //Only update if not owned by RAA (using the setting of DateLastViewed as a proxy for that ownership) or if ownership should be ignored //http://stackoverflow.com/questions/4057196/how-do-you-query-this-in-mongo-is-not-null var isNotOwnedByRaaQuery = Query <MongoApprenticeshipApplicationDetail> .EQ(e => e.DateLastViewed, null); var query = ignoreOwnershipCheck ? idMatchQuery : new QueryBuilder <MongoApprenticeshipApplicationDetail>().And(idMatchQuery, isNotOwnedByRaaQuery); var update = Update <MongoApprenticeshipApplicationDetail> .Set(e => e.Status, updatedStatus) .Set(e => e.IsArchived, false) // Application status has changed, ensure it appears on the candidate's dashboard. .Set(e => e.DateUpdated, now); switch (updatedStatus) { case ApplicationStatuses.Successful: update = update.Set(e => e.SuccessfulDateTime, now); break; case ApplicationStatuses.Unsuccessful: update = update.Set(e => e.UnsuccessfulDateTime, now); break; } var result = Collection.Update(query, update); if (result.Ok) { _logger.Info("Called repository to update apprenticeship application status={1} for application with Id={0} successfully with code={2}. Documents affected={3}", applicationId, updatedStatus, result.Code, result.DocumentsAffected); return(result.DocumentsAffected == 1); } var message = $"Call to repository to update apprenticeship application status={updatedStatus} for application with Id={applicationId} failed! Exit code={result.Code}, error message={result.ErrorMessage}"; _logger.Error(message); throw new Exception(message); }
private void PublishMessage(ApprenticeshipApplicationDetail apprenticeshipApplicationDetail) { try { var message = new SubmitApprenticeshipApplicationRequest { ApplicationId = apprenticeshipApplicationDetail.EntityId }; _messageBus.PublishMessage(message); } catch { apprenticeshipApplicationDetail.RevertStateToDraft(); _apprenticeshipApplicationWriteRepository.Save(apprenticeshipApplicationDetail); throw; } }
private void SyncToCandidateApplicationTemplate(Guid candidateId, ApprenticeshipApplicationDetail apprenticeshipApplication) { var candidate = _candidateReadRepository.Get(candidateId); candidate.ApplicationTemplate.AboutYou = apprenticeshipApplication.CandidateInformation.AboutYou; candidate.ApplicationTemplate.EducationHistory = apprenticeshipApplication.CandidateInformation.EducationHistory; candidate.ApplicationTemplate.Qualifications = apprenticeshipApplication.CandidateInformation.Qualifications; candidate.ApplicationTemplate.WorkExperience = apprenticeshipApplication.CandidateInformation.WorkExperience; candidate.ApplicationTemplate.TrainingCourses = apprenticeshipApplication.CandidateInformation.TrainingCourses; if (!candidate.MonitoringInformation.DisabilityStatus.HasValue && apprenticeshipApplication.CandidateInformation.DisabilityStatus.HasValue) { candidate.MonitoringInformation.DisabilityStatus = apprenticeshipApplication.CandidateInformation.DisabilityStatus; } _candidateWriteRepository.Save(candidate); }
internal static bool UpdateApprenticeshipApplicationDetail(this ApprenticeshipApplicationDetail apprenticeshipApplication, ApplicationStatusSummary applicationStatusSummary) { var updated = false; if (applicationStatusSummary.IsLegacySystemUpdate()) { // Only update application status etc. if update originated from Legacy system. if (apprenticeshipApplication.Status != applicationStatusSummary.ApplicationStatus) { apprenticeshipApplication.Status = applicationStatusSummary.ApplicationStatus; // Application status has changed, ensure it appears on the candidate's dashboard. apprenticeshipApplication.IsArchived = false; updated = true; } if (apprenticeshipApplication.LegacyApplicationId != applicationStatusSummary.LegacyApplicationId) { // Ensure the application is linked to the legacy application. apprenticeshipApplication.LegacyApplicationId = applicationStatusSummary.LegacyApplicationId; updated = true; } if (apprenticeshipApplication.UnsuccessfulReason != applicationStatusSummary.UnsuccessfulReason) { apprenticeshipApplication.UnsuccessfulReason = applicationStatusSummary.UnsuccessfulReason; updated = true; } } if (apprenticeshipApplication.VacancyStatus != applicationStatusSummary.VacancyStatus) { apprenticeshipApplication.VacancyStatus = applicationStatusSummary.VacancyStatus; updated = true; } if (apprenticeshipApplication.Vacancy.ClosingDate != applicationStatusSummary.ClosingDate) { apprenticeshipApplication.Vacancy.ClosingDate = applicationStatusSummary.ClosingDate; updated = true; } return(updated); }
public void ShouldUpdateApplicationStatus( ApplicationStatuses oldStatus, ApplicationStatuses newStatus, ApplicationStatusSummary.Source source, bool expected) { // Arrange. var detail = new ApprenticeshipApplicationDetail { Status = oldStatus, IsArchived = true }; var summary = new ApplicationStatusSummary { ApplicationId = Guid.Empty, ApplicationStatus = newStatus }; var ignoreOwnershipCheck = summary.UpdateSource == ApplicationStatusSummary.Source.Raa; _mockReadRepository.Setup(mock => mock.Get(detail.EntityId)).Returns(new ApprenticeshipApplicationDetail { Status = newStatus }); _mockWriteRepository.Setup(mock => mock .UpdateApplicationStatus(detail, newStatus, ignoreOwnershipCheck)) .Returns(expected); // Act. var actual = detail.UpdateApprenticeshipApplicationDetail(summary, _mockReadRepository.Object, _mockWriteRepository.Object); // Assert. actual.Should().Be(expected); detail.IsArchived.Should().Be(!expected); detail.Status.Should().Be(summary.ApplicationStatus); _mockWriteRepository.Verify(mock => mock .UpdateApplicationStatus(detail, newStatus, ignoreOwnershipCheck), Times.Exactly(expected ? 1 : 0)); }
public void SetUp() { _apprenticeshipApplicationReadRepository = new Mock <IApprenticeshipApplicationReadRepository>(); _apprenticeshipApplicationWriteRepository = new Mock <IApprenticeshipApplicationWriteRepository>(); _candidateReadRepository = new Mock <ICandidateReadRepository>(); _candidateWriteRepository = new Mock <ICandidateWriteRepository>(); _candidateId = Guid.NewGuid(); _strategy = new SaveApprenticeshipApplicationStrategy( _apprenticeshipApplicationReadRepository.Object, _apprenticeshipApplicationWriteRepository.Object, _candidateReadRepository.Object, _candidateWriteRepository.Object); _oldApplication = new Fixture() .Build <ApprenticeshipApplicationDetail>() .With(fixture => fixture.CandidateId, _candidateId) .With(fixture => fixture.Status, ApplicationStatuses.Draft) .Create(); _newCandidateInformation = new Fixture() .Build <ApplicationTemplate>() .Create(); _candidate = new Fixture() .Build <Candidate>() .Create(); _newApplication = new Fixture() .Build <ApprenticeshipApplicationDetail>() .With(fixture => fixture.CandidateId, _candidateId) .With(fixture => fixture.AdditionalQuestion1Answer, AdditionalQuestion1Answer) .With(fixture => fixture.AdditionalQuestion2Answer, AdditionalQuestion2Answer) .With(fixture => fixture.CandidateInformation, _newCandidateInformation) .With(fixture => fixture.Vacancy, new Fixture() .Build <ApprenticeshipSummary>() .With(fixture => fixture.Id, VacancyId) .Create()) .Create(); }
public void ShouldUpdateLegacyApplicationId(int oldId, int newId, bool expected) { // Arrange. var detail = new ApprenticeshipApplicationDetail { LegacyApplicationId = oldId }; var summary = new ApplicationStatusSummary { ApplicationId = Guid.Empty, LegacyApplicationId = newId }; // Act. var actual = detail.UpdateApprenticeshipApplicationDetail(summary, _mockReadRepository.Object, _mockWriteRepository.Object); // Assert. actual.Should().Be(expected); detail.LegacyApplicationId.Should().Be(summary.LegacyApplicationId); }
private static CreateApplicationRequest CreateRequest( ApprenticeshipApplicationDetail apprenticeshipApplicationDetail, int legacyCandidateId) { return(new CreateApplicationRequest { Application = new Application { VacancyId = apprenticeshipApplicationDetail.Vacancy.Id, VacancyRef = null, // not required if VacancyId is supplied. CandidateId = legacyCandidateId, School = MapSchool(apprenticeshipApplicationDetail), EducationResults = MapQualifications(apprenticeshipApplicationDetail.CandidateInformation.Qualifications), WorkExperiences = MapWorkExperience(apprenticeshipApplicationDetail.CandidateInformation.WorkExperience), AdditionalQuestion1Answer = apprenticeshipApplicationDetail.AdditionalQuestion1Answer ?? string.Empty, AdditionalQuestion2Answer = apprenticeshipApplicationDetail.AdditionalQuestion2Answer ?? string.Empty, Strengths = apprenticeshipApplicationDetail.CandidateInformation.AboutYou.Strengths ?? string.Empty, Improvements = apprenticeshipApplicationDetail.CandidateInformation.AboutYou.Improvements ?? string.Empty, HobbiesAndInterests = apprenticeshipApplicationDetail.CandidateInformation.AboutYou.HobbiesAndInterests ?? string.Empty, InterviewSupport = apprenticeshipApplicationDetail.CandidateInformation.AboutYou.Support ?? string.Empty } }); }
public void ShouldUpdateVacancyStatus( VacancyStatuses oldStatus, VacancyStatuses newStatus, bool expected) { // Arrange. var detail = new ApprenticeshipApplicationDetail { VacancyStatus = oldStatus }; var summary = new ApplicationStatusSummary { VacancyStatus = newStatus }; // Act. var actual = detail.UpdateApprenticeshipApplicationDetail(summary, _mockReadRepository.Object, _mockWriteRepository.Object); // Assert. actual.Should().Be(expected); detail.VacancyStatus.Should().Be(summary.VacancyStatus); }
public void ShouldUpdateUnsuccessfulReason(string oldReason, string newReason, bool expected) { // Arrange. var detail = new ApprenticeshipApplicationDetail { Status = ApplicationStatuses.Unsuccessful, UnsuccessfulReason = oldReason }; var summary = new ApplicationStatusSummary { ApplicationId = Guid.Empty, ApplicationStatus = ApplicationStatuses.Unsuccessful, UnsuccessfulReason = newReason }; // Act. var actual = detail.UpdateApprenticeshipApplicationDetail(summary, _mockReadRepository.Object, _mockWriteRepository.Object); // Assert. actual.Should().Be(expected); detail.UnsuccessfulReason.Should().Be(summary.UnsuccessfulReason); }
public void UpdateLegacyApplicationId(ApprenticeshipApplicationDetail applicationDetail, int legacyApplicationId) { Collection.Update(Query.EQ("EntityId", applicationDetail.EntityId), new UpdateDocument { { "$set", new BsonDocument("LegacyApplicationId", legacyApplicationId) } }); }
public void UpdateApplicationStatus(ApprenticeshipApplicationDetail applicationDetail, ApplicationStatuses newApplicationStatus) { Collection.Update(Query.EQ("EntityId", applicationDetail.EntityId), new UpdateDocument { { "$set", new BsonDocument("Status", newApplicationStatus) } }); }
private ApprenticeshipApplicationViewModel ConvertToApprenticeshipApplicationViewModel(ApprenticeshipApplicationDetail application, VacancyViewModel vacancyDetail) { var webSettings = _configurationService.Get <CommonWebConfiguration>(); var domainUrl = webSettings.SiteDomainName; var vacancy = _vacancyPostingService.GetVacancy(application.Vacancy.Id); var vacancyOwnerRelationship = _providerService.GetVacancyOwnerRelationship(vacancy.VacancyOwnerRelationshipId, false); // Closed vacancies can certainly have non-current vacancy parties var employer = _employerService.GetEmployer(vacancyOwnerRelationship.EmployerId, false); var viewModel = _mapper.Map <ApprenticeshipApplicationDetail, ApprenticeshipApplicationViewModel>(application); viewModel.Vacancy = _mapper.Map <Vacancy, ApplicationVacancyViewModel>(vacancy); viewModel.Vacancy.EmployerName = employer.FullName; viewModel.NextStepsUrl = string.Format($"https://{domainUrl}/nextsteps"); viewModel.UnSuccessfulReason = application.UnsuccessfulReason; viewModel.UnsuccessfulDateTime = application.UnsuccessfulDateTime; viewModel.ProviderName = vacancyDetail.Provider.TradingName; viewModel.Contact = vacancyDetail.Contact; return(viewModel); }
public void ShouldSetSuccessfulOutcome(ApplicationStatuses applicationStatus) { // Arrange. var applicationId = Guid.NewGuid(); const int nextLegacyApplicationId = 2; string feedback = "Does not have permission to work in the UK"; var apprenticeshipApplicationDetail = new ApprenticeshipApplicationDetail { VacancyStatus = VacancyStatuses.Live, Vacancy = new ApprenticeshipSummary { ClosingDate = DateTime.Today.AddDays(90) } }; _mockApprenticeshipApplicationReadRepository.Setup(mock => mock.Get(applicationId)).Returns(apprenticeshipApplicationDetail); var actualApplicationStatusSummary = default(ApplicationStatusSummary); _mockReferenceNumberRepository.Setup(mock => mock.GetNextLegacyApplicationId()) .Returns(nextLegacyApplicationId); _mockApplicationStatusUpdateStrategy.Setup(mock => mock.Update(apprenticeshipApplicationDetail, It.IsAny <ApplicationStatusSummary>())) .Callback <ApprenticeshipApplicationDetail, ApplicationStatusSummary>( (aad, ass) => { actualApplicationStatusSummary = ass; }); // Act. switch (applicationStatus) { case ApplicationStatuses.Successful: _apprenticeshipApplicationService.SetSuccessfulDecision(applicationId); break; case ApplicationStatuses.Unsuccessful: _apprenticeshipApplicationService.SetUnsuccessfulDecision(applicationId, feedback); break; } // Assert. _mockApplicationStatusUpdateStrategy.Verify(mock => mock.Update(apprenticeshipApplicationDetail, It.IsAny <ApplicationStatusSummary>()), Times.Once); actualApplicationStatusSummary.Should().NotBeNull(); if (applicationStatus == ApplicationStatuses.Unsuccessful) { actualApplicationStatusSummary.ShouldBeEquivalentTo(new ApplicationStatusSummary { ApplicationId = Guid.Empty, ApplicationStatus = applicationStatus, LegacyApplicationId = nextLegacyApplicationId, LegacyCandidateId = 0, LegacyVacancyId = 0, VacancyStatus = apprenticeshipApplicationDetail.VacancyStatus, ClosingDate = apprenticeshipApplicationDetail.Vacancy.ClosingDate, UpdateSource = ApplicationStatusSummary.Source.Raa, UnsuccessfulReason = feedback }); } else { actualApplicationStatusSummary.ShouldBeEquivalentTo(new ApplicationStatusSummary { ApplicationId = Guid.Empty, ApplicationStatus = applicationStatus, LegacyApplicationId = nextLegacyApplicationId, LegacyCandidateId = 0, LegacyVacancyId = 0, VacancyStatus = apprenticeshipApplicationDetail.VacancyStatus, ClosingDate = apprenticeshipApplicationDetail.Vacancy.ClosingDate, UpdateSource = ApplicationStatusSummary.Source.Raa }); } }
private void HandleCustomException(SubmitApprenticeshipApplicationRequest request, CustomException ex, ApprenticeshipApplicationDetail apprenticeshipApplication) { switch (ex.Code) { case ApplicationsErrorCodes.ApplicationDuplicatedError: _logger.Info("Apprenticeship application has already been submitted to legacy system: Application Id: \"{0}\"", request.ApplicationId); SetApplicationStateSubmitted(apprenticeshipApplication); break; case CandidatesErrorCodes.CandidateStateError: _logger.Error("Legacy candidate is in an invalid state. Apprenticeship application cannot be processed: Application Id: \"{0}\"", request.ApplicationId); break; case CandidatesErrorCodes.CandidateNotFoundError: _logger.Error("Legacy candidate was not found. Apprenticeship application cannot be processed: Application Id: \"{0}\"", request.ApplicationId); break; case VacanciesErrorCodes.LegacyVacancyStateError: _logger.Info("Legacy vacancy was in an invalid state. Apprenticeship application cannot be processed: Application Id: \"{0}\"", request.ApplicationId); SetStateExpiredOrWithdrawn(apprenticeshipApplication); break; case CommonErrorCodes.EntityStateError: _logger.Error(string.Format("Apprenticeship application is in an invalid state: Application Id: \"{0}\"", request.ApplicationId), ex); break; default: _logger.Warn(string.Format("Submit apprenticeship application with Id = {0} request async process failed.", request.ApplicationId), ex); Requeue(request); break; } }
private static void EnsureApplicationCanBeCreated(ApprenticeshipApplicationDetail apprenticeshipApplicationDetail) { apprenticeshipApplicationDetail.AssertState("Create apprenticeship application", ApplicationStatuses.Submitting); }
private void SetStateExpiredOrWithdrawn(ApprenticeshipApplicationDetail apprenticeshipApplication) { apprenticeshipApplication.SetStateExpiredOrWithdrawn(); _apprenticeshipApplicationWriteRepository.Save(apprenticeshipApplication); }
private void SetApplicationStateSubmitted(ApprenticeshipApplicationDetail apprenticeshipApplication) { apprenticeshipApplication.SetStateSubmitted(); _apprenticeshipApplicationWriteRepository.Save(apprenticeshipApplication); }