public async Task <IActionResult> SavePlacementInformationAsync(PlacementInformationSaveViewModel viewModel) { await Validate(viewModel); if (!ModelState.IsValid) { return(View("PlacementInformation", viewModel)); } var dto = _mapper.Map <PlacementInformationSaveDto>(viewModel); await _opportunityService.UpdateOpportunityItemAsync(dto); if (viewModel.OpportunityType == OpportunityType.ProvisionGap) { await _opportunityService.UpdateProvisionGapAsync(dto); } var opportunityItemCount = await _opportunityService.GetSavedOpportunityItemCountAsync(viewModel.OpportunityId); //if First Opp (saved opportunity items == 0) then LoadWhoIsEmployer else if referral then check answer of if ProvisionGap then OpportunityBasket return(opportunityItemCount == 0 ? RedirectToRoute("GetOpportunityCompanyName", new { viewModel.OpportunityId, viewModel.OpportunityItemId }) : viewModel.OpportunityType == OpportunityType.Referral ? RedirectToRoute("GetCheckAnswers", new { viewModel.OpportunityItemId }) : await SaveCheckAnswers(viewModel.OpportunityId, viewModel.OpportunityItemId)); }
public When_Placement_Information_Is_Submitted_Above_Max_Placements() { var opportunityService = Substitute.For <IOpportunityService>(); var viewModel = new PlacementInformationSaveViewModel { PlacementsKnown = true, Placements = 1000 }; var config = new MapperConfiguration(c => c.AddMaps(typeof(EmployerMapper).Assembly)); var mapper = new Mapper(config); _opportunityController = new OpportunityController(opportunityService, mapper); _result = _opportunityController.SavePlacementInformationAsync(viewModel).GetAwaiter().GetResult(); }
public When_Placement_Information_Is_Submitted_Successfully_For_Provision_Gap_And_There_Are_Multiple_Opportunities() { var viewModel = new PlacementInformationSaveViewModel { OpportunityId = 1, OpportunityItemId = 2, OpportunityType = OpportunityType.ProvisionGap, JobRole = "Junior Tester", PlacementsKnown = true, Placements = 3, NoSuitableStudent = true }; var httpContextAccessor = Substitute.For <IHttpContextAccessor>(); var config = new MapperConfiguration(c => { c.AddMaps(typeof(PlacementInformationSaveDtoMapper).Assembly); c.ConstructServicesUsing(type => type.Name.Contains("LoggedInUserEmailResolver") ? new LoggedInUserEmailResolver <PlacementInformationSaveViewModel, PlacementInformationSaveDto>(httpContextAccessor) : type.Name.Contains("LoggedInUserNameResolver") ? (object)new LoggedInUserNameResolver <PlacementInformationSaveViewModel, PlacementInformationSaveDto>(httpContextAccessor) : type.Name.Contains("UtcNowResolver") ? new UtcNowResolver <PlacementInformationSaveViewModel, PlacementInformationSaveDto>(new DateTimeProvider()) : null); }); var mapper = new Mapper(config); _opportunityService = Substitute.For <IOpportunityService>(); _opportunityService.GetSavedOpportunityItemCountAsync(1).Returns(2); var opportunityController = new OpportunityController(_opportunityService, mapper); var controllerWithClaims = new ClaimsBuilder <OpportunityController>(opportunityController) .AddUserName("username") .Build(); httpContextAccessor.HttpContext.Returns(controllerWithClaims.HttpContext); _result = controllerWithClaims.SavePlacementInformationAsync(viewModel).GetAwaiter().GetResult(); }
private async Task Validate(PlacementInformationSaveViewModel viewModel) { var opportunityItem = await _opportunityService.GetOpportunityItemAsync(viewModel.OpportunityItemId); if (opportunityItem != null) { viewModel.Postcode = opportunityItem.Postcode; viewModel.SearchRadius = opportunityItem.SearchRadius; viewModel.RouteId = opportunityItem.RouteId; } if (viewModel.SearchResultProviderCount > 0 && viewModel.OpportunityType == OpportunityType.ProvisionGap) { if (!viewModel.NoSuitableStudent && !viewModel.HadBadExperience && !viewModel.ProvidersTooFarAway) { ModelState.AddModelError(nameof(viewModel.NoSuitableStudent), "You must tell us why the employer did not choose a provider"); } } if (!viewModel.PlacementsKnown.HasValue || !viewModel.PlacementsKnown.Value) { return; } if (!viewModel.Placements.HasValue) { ModelState.AddModelError(nameof(viewModel.Placements), "You must estimate how many students the employer wants for this job at this location"); } else if (viewModel.Placements < 1) { ModelState.AddModelError(nameof(viewModel.Placements), "The number of students must be 1 or more"); } else if (viewModel.Placements > 999) { ModelState.AddModelError(nameof(viewModel.Placements), "The number of students must be 999 or less"); } }
public When_Placement_Information_Is_Submitted_For_Provision_Gap_With_No_Reason_And_There_Are_Search_Results() { var opportunityService = Substitute.For <IOpportunityService>(); var viewModel = new PlacementInformationSaveViewModel { OpportunityId = 1, OpportunityItemId = 1, OpportunityType = OpportunityType.ProvisionGap, SearchResultProviderCount = 1, NoSuitableStudent = false, HadBadExperience = false, ProvidersTooFarAway = false }; var config = new MapperConfiguration(c => c.AddMaps(typeof(EmployerMapper).Assembly)); var mapper = new Mapper(config); _opportunityController = new OpportunityController(opportunityService, mapper); _result = _opportunityController.SavePlacementInformationAsync(viewModel).GetAwaiter().GetResult(); }
public When_Placement_Information_Is_Submitted_For_Provision_Gap_With_No_Reason_And_There_Are_No_Search_Results() { _opportunityService = Substitute.For <IOpportunityService>(); _opportunityService.GetSavedOpportunityItemCountAsync(1).Returns(0); var viewModel = new PlacementInformationSaveViewModel { OpportunityId = 1, OpportunityItemId = 2, OpportunityType = OpportunityType.ProvisionGap, SearchResultProviderCount = 0, JobRole = "Junior Tester", PlacementsKnown = false, NoSuitableStudent = false, HadBadExperience = false, ProvidersTooFarAway = false }; var httpContextAccessor = Substitute.For <IHttpContextAccessor>(); var config = new MapperConfiguration(c => { c.AddMaps(typeof(PlacementInformationSaveDtoMapper).Assembly); c.ConstructServicesUsing(type => type.Name.Contains("LoggedInUserEmailResolver") ? new LoggedInUserEmailResolver <PlacementInformationSaveViewModel, PlacementInformationSaveDto>(httpContextAccessor) : type.Name.Contains("LoggedInUserNameResolver") ? (object)new LoggedInUserNameResolver <PlacementInformationSaveViewModel, PlacementInformationSaveDto>(httpContextAccessor) : type.Name.Contains("UtcNowResolver") ? new UtcNowResolver <PlacementInformationSaveViewModel, PlacementInformationSaveDto>(new DateTimeProvider()) : null); }); var mapper = new Mapper(config); _opportunityController = new OpportunityController(_opportunityService, mapper); _result = _opportunityController.SavePlacementInformationAsync(viewModel).GetAwaiter().GetResult(); }