public async Task <Unit> Handle(CreateApplicationReviewCommand message, CancellationToken cancellationToken) { _logger.LogInformation("Submitting application for vacancyId: {vacancyReference} for candidateId: {candidateId}", message.Application.VacancyReference, message.Application.CandidateId); var vacancy = await _vacancyRepository.GetVacancyAsync(message.Application.VacancyReference); var existingReview = await _applicationReviewRepository.GetAsync(vacancy.VacancyReference.Value, message.Application.CandidateId); if (existingReview != null) { _logger.LogWarning("Application review already exists for vacancyReference:{vacancyReference} and candidateId:{candidateId}. Found applicationReviewId:{applicationReviewId}", vacancy.VacancyReference.Value, message.Application.CandidateId, existingReview.Id); return(Unit.Value); } var review = new ApplicationReview { Id = Guid.NewGuid(), VacancyReference = vacancy.VacancyReference.Value, Application = message.Application, CandidateId = message.Application.CandidateId, CreatedDate = _timeProvider.Now, Status = ApplicationReviewStatus.New, SubmittedDate = message.Application.ApplicationDate }; await _applicationReviewRepository.CreateAsync(review); await _messaging.PublishEvent(new ApplicationReviewCreatedEvent { VacancyReference = vacancy.VacancyReference.Value }); return(Unit.Value); }
public async Task <IActionResult> OnGetAsync(int?id) { if (id == null) { return(NotFound()); } LoanApplication = await Context.LoanApplications.FirstOrDefaultAsync(m => m.Id == id); if (LoanApplication == null) { return(NotFound()); } var isAuthorized = await AuthorizationService.AuthorizeAsync(User, LoanApplication, LoanOperations.Review); if (!isAuthorized.Succeeded) { return(Forbid()); } ApplicationReview = await Context.ApplicationReviews.FirstOrDefaultAsync(m => m.Application.Id == id); if (ApplicationReview == null) { ApplicationReview = new ApplicationReview { ApplicationId = LoanApplication.Id }; } return(Page()); }
public Task CreateAsync(ApplicationReview review) { var collection = GetCollection <ApplicationReview>(); return(RetryPolicy.Execute(_ => collection.InsertOneAsync(review), new Context(nameof(CreateAsync)))); }
private void Validate(ApplicationReview applicationReview) { var validationResult = _applicationReviewValidator.Validate(applicationReview); if (!validationResult.IsValid) { throw new ValidationException(validationResult.Errors); } }
public Task UpdateAsync(ApplicationReview applicationReview) { var filter = Builders <ApplicationReview> .Filter.Eq(r => r.Id, applicationReview.Id); var collection = GetCollection <ApplicationReview>(); return(RetryPolicy.Execute(_ => collection.ReplaceOneAsync(filter, applicationReview), new Context(nameof(UpdateAsync)))); }
public async Task OnPostApprovalAsync_ReturnsARedirectToPageResult_WhenModelStateIsValid() { // Arrange var authorizationService = new Mock <IAuthorizationService>(); authorizationService.Setup(x => x.AuthorizeAsync(It.IsAny <ClaimsPrincipal>(), It.IsAny <object>(), It.IsAny <IEnumerable <IAuthorizationRequirement> >())) .ReturnsAsync(AuthorizationResult.Success()); var store = new Mock <IUserStore <IdentityUser> >(); var mgr = new Mock <UserManager <IdentityUser> >(store.Object, null, null, null, null, null, null, null, null); var httpContext = new DefaultHttpContext(); var modelState = new ModelStateDictionary(); var actionContext = new ActionContext(httpContext, new RouteData(), new PageActionDescriptor(), modelState); var modelMetadataProvider = new EmptyModelMetadataProvider(); var viewData = new ViewDataDictionary(modelMetadataProvider, modelState); var tempData = new TempDataDictionary(httpContext, Mock.Of <ITempDataProvider>()); var pageContext = new PageContext(actionContext) { ViewData = viewData }; var loanId = 1; var loanApplication = await AppDbContext.LoanApplications.AsNoTracking().FirstOrDefaultAsync(m => m.Id == loanId); var applicationReview = await AppDbContext.ApplicationReviews.FirstOrDefaultAsync(m => m.Application.Id == loanId); if (applicationReview == null) { applicationReview = new ApplicationReview { ApplicationId = loanId }; } var pageModel = new ReviewModel(AppDbContext, authorizationService.Object, mgr.Object) { PageContext = pageContext, TempData = tempData, Url = new UrlHelper(actionContext), LoanApplication = loanApplication, ApplicationReview = applicationReview }; // Act // A new ModelStateDictionary is valid by default. var result = await pageModel.OnPostApprovalAsync(); var approvalApplication = await AppDbContext.LoanApplications.FirstOrDefaultAsync(m => m.Id == loanId); // Assert Assert.IsType <RedirectToPageResult>(result); Assert.Equal(LoanStatus.AwaitingManagersApproval, approvalApplication.Status); }
public static ApplicationReviewViewModel ToViewModel(this ApplicationReview r) { return(new ApplicationReviewViewModel { Email = r.Application.Email, Name = r.Application.FullName, TrainingCourses = r.Application.TrainingCourses?.Select(c => new TrainingCoursesViewModel { Title = c.Title, FromDate = c.FromDate, Provider = c.Provider, ToDate = c.ToDate }).ToList() ?? new List <TrainingCoursesViewModel>(), Postcode = r.Application.Postcode, AddressLine1 = r.Application.AddressLine1, AddressLine2 = r.Application.AddressLine2, AddressLine3 = r.Application.AddressLine3, AddressLine4 = r.Application.AddressLine4, CandidateFeedback = r.CandidateFeedback, DisabilityStatus = r.Application.DisabilityStatus ?? ApplicationReviewDisabilityStatus.Unknown, EducationFromYear = r.Application.EducationFromYear, EducationInstitution = r.Application.EducationInstitution, EducationToYear = r.Application.EducationToYear, FriendlyId = r.GetFriendlyId(), HobbiesAndInterests = r.Application.HobbiesAndInterests, Improvements = r.Application.Improvements, Phone = r.Application.Phone, Qualifications = r.Application.Qualifications?.Select(q => new QualificationViewModel { Grade = q.Grade, IsPredicted = q.IsPredicted, QualificationType = q.QualificationType, Subject = q.Subject, Year = q.Year }).ToList() ?? new List <QualificationViewModel>(), Skills = r.Application.Skills ?? new List <string>(), Status = r.Status, Strengths = r.Application.Strengths, Support = r.Application.Support, WorkExperiences = r.Application.WorkExperiences?.Select(w => new WorkExperienceViewModel { FromDate = w.FromDate, ToDate = w.ToDate, Employer = w.Employer, Description = w.Description, JobTitle = w.JobTitle }).ToList() ?? new List <WorkExperienceViewModel>() }); }
private VacancyApplication MapToVacancyApplication(ApplicationReview review) { var projection = new VacancyApplication { Status = review.Status, SubmittedDate = review.SubmittedDate, ApplicationReviewId = review.Id, IsWithdrawn = review.IsWithdrawn, CandidateName = null, DisabilityStatus = ApplicationReviewDisabilityStatus.Unknown }; if (review.IsWithdrawn == false) { projection.CandidateName = review.Application.FullName; projection.DisabilityStatus = review.Application.DisabilityStatus ?? ApplicationReviewDisabilityStatus.Unknown; } return(projection); }
private VacancyApplication MapToVacancyApplication(ApplicationReview review) { var projection = new VacancyApplication { CandidateId = review.CandidateId, Status = review.Status, SubmittedDate = review.SubmittedDate, ApplicationReviewId = review.Id, IsWithdrawn = review.IsWithdrawn, DisabilityStatus = ApplicationReviewDisabilityStatus.Unknown }; if (review.IsWithdrawn == false) { projection.FirstName = review.Application.FirstName; projection.LastName = review.Application.LastName; projection.DateOfBirth = review.Application.BirthDate; projection.DisabilityStatus = review.Application.DisabilityStatus ?? ApplicationReviewDisabilityStatus.Unknown; } return(projection); }
public static string GetFriendlyId(this ApplicationReview applicationReview) { return(GetFriendlyId(applicationReview.Id)); }
public async Task OnPostApproveAsync_ReturnsARedirectToPageResult_WhenModelStateIsValid() { // Arrange var authorizationService = new Mock <IAuthorizationService>(); authorizationService.Setup(x => x.AuthorizeAsync(It.IsAny <ClaimsPrincipal>(), It.IsAny <object>(), It.IsAny <IEnumerable <IAuthorizationRequirement> >())) .ReturnsAsync(AuthorizationResult.Success()); var store = new Mock <IUserStore <IdentityUser> >(); var userManager = new Mock <UserManager <IdentityUser> >(store.Object, null, null, null, null, null, null, null, null); //Create test user var displayName = "User name"; var identity = new GenericIdentity(displayName); var principleMock = new Mock <ClaimsPrincipal>(identity); principleMock.Setup(x => x.IsInRole(Constants.LoanManagersRole)).Returns(true); userManager.Setup(x => x.GetUserId(principleMock.Object)).Returns("test.user"); // use default context with user var httpContext = new DefaultHttpContext() { User = principleMock.Object }; //need these as well for the page context var modelState = new ModelStateDictionary(); var actionContext = new ActionContext(httpContext, new RouteData(), new PageActionDescriptor(), modelState); var modelMetadataProvider = new EmptyModelMetadataProvider(); var viewData = new ViewDataDictionary(modelMetadataProvider, modelState); // need page context for the page model var pageContext = new PageContext(actionContext) { ViewData = viewData }; var loanId = 1; var loanApplication = await AppDbContext.LoanApplications.AsNoTracking().FirstOrDefaultAsync(m => m.Id == loanId); var applicationReview = await AppDbContext.ApplicationReviews.FirstOrDefaultAsync(m => m.Application.Id == loanId); if (applicationReview == null) { applicationReview = new ApplicationReview { ApplicationId = loanId }; } var pageModel = new ReviewModel(AppDbContext, authorizationService.Object, userManager.Object) { PageContext = pageContext, Url = new UrlHelper(actionContext), LoanApplication = loanApplication, ApplicationReview = applicationReview }; // Act // A new ModelStateDictionary is valid by default. var result = await pageModel.OnPostApproveAsync(); var approvalApplication = await AppDbContext.LoanApplications.FirstOrDefaultAsync(m => m.Id == loanId); // Assert Assert.IsType <RedirectToPageResult>(result); Assert.Equal(LoanStatus.Approved, approvalApplication.Status); }