public void ShouldSaveWhenTraineeshipApplicationOrVacancyUpdated(bool updated) { // Arrange. var today = DateTime.Today; var tomorrow = DateTime.Today.AddDays(1); var traineeshipApplicationDetail = new TraineeshipApplicationDetail { EntityId = Guid.NewGuid(), Vacancy = new TraineeshipSummary { ClosingDate = tomorrow } }; var applicationStatusSummary = new ApplicationStatusSummary { ClosingDate = updated ? today : tomorrow }; // Act. _strategy.Update(traineeshipApplicationDetail, applicationStatusSummary); // Assert. var times = updated ? 1 : 0; _mockTraineeshipApplicationWriteRepository.Verify(mock => mock .Save(traineeshipApplicationDetail), Times.Exactly(times)); }
public void SetUp() { _traineeshipApplicationWriteRepository = new Mock <ITraineeshipApplicationWriteRepository>(); _candidateReadRepository = new Mock <ICandidateReadRepository>(); _candidateWriteRepository = new Mock <ICandidateWriteRepository>(); _candidateId = Guid.NewGuid(); _strategy = new SaveTraineeshipApplicationStrategy( _traineeshipApplicationWriteRepository.Object, _candidateReadRepository.Object, _candidateWriteRepository.Object); _newCandidateInformation = new Fixture() .Build <ApplicationTemplate>() .Create(); _candidate = new Fixture() .Build <Candidate>() .Create(); _application = new Fixture() .Build <TraineeshipApplicationDetail>() .With(fixture => fixture.CandidateId, _candidateId) .With(fixture => fixture.DateApplied, null) .With(fixture => fixture.AdditionalQuestion1Answer, AdditionalQuestion1Answer) .With(fixture => fixture.AdditionalQuestion2Answer, AdditionalQuestion2Answer) .With(fixture => fixture.CandidateInformation, _newCandidateInformation) .With(fixture => fixture.Vacancy, new Fixture() .Build <TraineeshipSummary>() .With(fixture => fixture.Id, VacancyId) .Create()) .Create(); }
public int CreateApplication(TraineeshipApplicationDetail traineeshipApplicationDetail) { var legacyCandidateId = GetLegacyCandidateId(traineeshipApplicationDetail.CandidateId); var request = CreateRequest(traineeshipApplicationDetail, legacyCandidateId); return(InternalCreateApplication(traineeshipApplicationDetail.CandidateId, request)); }
public TraineeshipApplicationDetail Build() { RegistrationBuilder = new RegistrationBuilder(_emailAddress); TraineeshipApplicationDetail = new TraineeshipApplicationDetail { CandidateId = _candidateId, CandidateInformation = new ApplicationTemplate(), DateApplied = DateTime.UtcNow.AddDays(-1), VacancyStatus = VacancyStatuses.Live, Vacancy = new TraineeshipSummary { Id = _vacancyId, ClosingDate = _closingDate } }; var repo = WebTestRegistry.Container.GetInstance <ITraineeshipApplicationWriteRepository>(); TraineeshipApplicationDetail.CandidateDetails = RegistrationBuilder.Build(); repo.Save(TraineeshipApplicationDetail); return(TraineeshipApplicationDetail); }
private void NotifyCandidate(TraineeshipApplicationDetail traineeshipApplicationDetail) { _communicationService.SendMessageToCandidate(traineeshipApplicationDetail.CandidateId, MessageTypes.TraineeshipApplicationSubmitted, new[] { new CommunicationToken(CommunicationTokens.ApplicationId, traineeshipApplicationDetail.EntityId.ToString()) }); }
private void SyncToCandidatesApplicationTemplate(TraineeshipApplicationDetail traineeshipApplicationDetail) { var candidate = _candidateReadRepository.Get(traineeshipApplicationDetail.CandidateId); candidate.ApplicationTemplate.Qualifications = traineeshipApplicationDetail.CandidateInformation.Qualifications; candidate.ApplicationTemplate.WorkExperience = traineeshipApplicationDetail.CandidateInformation.WorkExperience; _candidateWriteRepository.Save(candidate); }
public TraineeshipApplicationDetail SaveApplication(TraineeshipApplicationDetail traineeshipApplicationDetail) { traineeshipApplicationDetail.DateApplied = DateTime.Now; var savedApplication = _traineeshipApplicationWriteRepository.Save(traineeshipApplicationDetail); SyncToCandidatesApplicationTemplate(savedApplication); return(savedApplication); }
public void SubmitTraineeshipApplication( Guid candidateId, int vacancyId, TraineeshipApplicationDetail traineeshipApplicationDetail) { Condition.Requires(candidateId); _logger.Debug( "Calling CandidateService to submit the traineeship application of the user with Id={0} to the vacancy with Id={1}.", candidateId, vacancyId); var traineeshipDetails = _saveTraineeshipApplicationStrategy.SaveApplication(candidateId, vacancyId, traineeshipApplicationDetail); _submitTraineeshipApplicationStrategy.SubmitApplication(traineeshipDetails.EntityId); }
public TraineeshipApplicationDetail SaveApplication( Guid candidateId, int vacancyId, TraineeshipApplicationDetail traineeshipApplication) { // Set date applied when saving a traineeship application. Unlike apprenticeship applications, there are no intermediate states, // Draft, Submitting etc. traineeshipApplication.DateApplied = DateTime.UtcNow; var savedApplication = _traineeshipApplicationWriteRepository.Save(traineeshipApplication); SyncToCandidatesApplicationTemplate(candidateId, savedApplication); return(savedApplication); }
public TraineeshipApplicationDetail Save(TraineeshipApplicationDetail entity) { _logger.Debug("Calling repository to save TraineeshipApplicationDetail Id={0}", entity.EntityId); var mongoEntity = _mapper.Map <TraineeshipApplicationDetail, MongoTraineeshipApplicationDetail>(entity); UpdateEntityTimestamps(mongoEntity); Collection.Save(mongoEntity); _logger.Debug("Saved TraineeshipApplicationDetail to repository with Id={0}", entity.EntityId); return(_mapper.Map <MongoTraineeshipApplicationDetail, TraineeshipApplicationDetail>(mongoEntity)); }
private void SyncToCandidatesApplicationTemplate(Guid candidateId, TraineeshipApplicationDetail traineeshipApplication) { var candidate = _candidateReadRepository.Get(candidateId); candidate.ApplicationTemplate.Qualifications = traineeshipApplication.CandidateInformation.Qualifications; candidate.ApplicationTemplate.WorkExperience = traineeshipApplication.CandidateInformation.WorkExperience; candidate.ApplicationTemplate.TrainingCourses = traineeshipApplication.CandidateInformation.TrainingCourses; if (!candidate.MonitoringInformation.DisabilityStatus.HasValue && traineeshipApplication.CandidateInformation.DisabilityStatus.HasValue) { candidate.MonitoringInformation.DisabilityStatus = traineeshipApplication.CandidateInformation.DisabilityStatus; } _candidateWriteRepository.Save(candidate); }
private void PublishMessage(TraineeshipApplicationDetail traineeshipApplicationDetail) { try { var message = new SubmitTraineeshipApplicationRequest { ApplicationId = traineeshipApplicationDetail.EntityId }; _messageBus.PublishMessage(message); } catch { // Compensate for failure to enqueue application submission by deleting the application. _traineeshipApplicationWriteRepository.Delete(traineeshipApplicationDetail.EntityId); throw; } }
private static CreateApplicationRequest CreateRequest( TraineeshipApplicationDetail traineeshipApplicationDetail, int legacyCandidateId) { return(new CreateApplicationRequest { Application = new Application { VacancyId = traineeshipApplicationDetail.Vacancy.Id, VacancyRef = null, // not required if VacancyId is supplied. CandidateId = legacyCandidateId, School = MapSchool(), EducationResults = MapQualifications(traineeshipApplicationDetail.CandidateInformation.Qualifications), WorkExperiences = MapWorkExperience(traineeshipApplicationDetail.CandidateInformation.WorkExperience), AdditionalQuestion1Answer = traineeshipApplicationDetail.AdditionalQuestion1Answer ?? string.Empty, AdditionalQuestion2Answer = traineeshipApplicationDetail.AdditionalQuestion2Answer ?? string.Empty } }); }
public void Update(TraineeshipApplicationDetail traineeeshipApplication, ApplicationStatusSummary applicationStatusSummary) { var originalLegacyApplicationId = traineeeshipApplication.LegacyApplicationId; var originalStatus = traineeeshipApplication.Status; var originalVacancyStatus = traineeeshipApplication.VacancyStatus; var originalClosingDate = traineeeshipApplication.Vacancy.ClosingDate; //todo: 1.6: remove this? we won't ever receive these updates while integrating with the legacy system for traineeships // invoked because the status of the apprenticeshipApplication / vacancy *may* have changed if (traineeeshipApplication.UpdateTraineeshipApplicationDetail(applicationStatusSummary)) { // note, this flow will be extended to include a call to outbound communication later (when we do notifications) // note, may subsequently consolidate status updates for a candidate (when we do notifications) but may be done in another component const string format = "Updating traineeship 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}'"; _logger.Info( format, traineeeshipApplication.EntityId, // 0 traineeeshipApplication.Vacancy.Id, // 1 traineeeshipApplication.CandidateDetails.EmailAddress, // 2 originalLegacyApplicationId, // 3 applicationStatusSummary.LegacyApplicationId, // 4 originalStatus, // 5 applicationStatusSummary.ApplicationStatus, // 6 originalVacancyStatus, // 7 applicationStatusSummary.VacancyStatus, // 8 originalClosingDate, // 9 applicationStatusSummary.ClosingDate); // 10 _traineeshipApplicationWriteRepository.Save(traineeeshipApplication); } }
public static bool UpdateTraineeshipApplicationDetail(this TraineeshipApplicationDetail traineeshipApplication, ApplicationStatusSummary applicationStatusSummary) { var updated = false; if (applicationStatusSummary.IsLegacySystemUpdate()) { // Only update application status etc. if update originated from Legacy system. if (traineeshipApplication.Status != applicationStatusSummary.ApplicationStatus) { traineeshipApplication.Status = applicationStatusSummary.ApplicationStatus; // Application status has changed, ensure it appears on the candidate's dashboard. traineeshipApplication.IsArchived = false; updated = true; } if (traineeshipApplication.LegacyApplicationId != applicationStatusSummary.LegacyApplicationId) { // Ensure the application is linked to the legacy application. traineeshipApplication.LegacyApplicationId = applicationStatusSummary.LegacyApplicationId; updated = true; } } if (traineeshipApplication.VacancyStatus != applicationStatusSummary.VacancyStatus) { traineeshipApplication.VacancyStatus = applicationStatusSummary.VacancyStatus; updated = true; } if (traineeshipApplication.Vacancy.ClosingDate != applicationStatusSummary.ClosingDate) { traineeshipApplication.Vacancy.ClosingDate = applicationStatusSummary.ClosingDate; updated = true; } return(updated); }
public void UpdateLegacyApplicationId(TraineeshipApplicationDetail applicationDetail, int legacyApplicationId) { Collection.Update(Query.EQ("EntityId", applicationDetail.EntityId), new UpdateDocument { { "$set", new BsonDocument("LegacyApplicationId", legacyApplicationId) } }); }
private TraineeshipApplicationViewModel ConvertToTraineeshipApplicationViewModel(TraineeshipApplicationDetail application) { 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 <TraineeshipApplicationDetail, TraineeshipApplicationViewModel>(application); viewModel.Vacancy = _mapper.Map <Vacancy, ApplicationVacancyViewModel>(vacancy); viewModel.Vacancy.EmployerName = employer.FullName; return(viewModel); }