Example #1
0
        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));
        }
Example #2
0
        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();
        }
Example #4
0
        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");
            }
        }
Example #5
0
        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();
        }
Example #6
0
        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();
        }