private async Task ValidateAsync(FindEmployerViewModel viewModel, string currentUser) { var isValidEmployer = await _employerService.ValidateCompanyNameAndCrmIdAsync(viewModel.SelectedEmployerCrmId, viewModel.CompanyName); if (!isValidEmployer) { ModelState.AddModelError(nameof(viewModel.CompanyName), "You must find and choose an employer"); } else { var lockedByUser = await _employerService .GetEmployerOpportunityOwnerAsync(viewModel.SelectedEmployerCrmId); if (!string.IsNullOrEmpty(lockedByUser)) { if (lockedByUser == currentUser) { ModelState.AddModelError(nameof(viewModel.CompanyName), "You are already working on this employer’s opportunities. Please start again and find this employer in your saved opportunities."); } else { ModelState.AddModelError(nameof(viewModel.CompanyName), "Your colleague, " + $"{lockedByUser}, is already working on this employer’s opportunities. " + "Please choose a different employer."); } } } }
public When_Employer_SaveOpportunityCompanyName_Is_Submitted_And_Employer_Is_Already_In_Opportunity() { var employerService = Substitute.For <IEmployerService>(); employerService.ValidateCompanyNameAndCrmIdAsync(Arg.Any <Guid>(), Arg.Any <string>()) .Returns(true); employerService.GetEmployerOpportunityOwnerAsync(Arg.Any <Guid>()) .Returns("Another User"); var opportunityService = Substitute.For <IOpportunityService>(); var referralService = Substitute.For <IReferralService>(); var viewModel = new FindEmployerViewModel { OpportunityId = 1, CompanyName = "Company Name" }; var config = new MapperConfiguration(c => c.AddMaps(typeof(EmployerMapper).Assembly)); var mapper = new Mapper(config); _employerController = new EmployerController(employerService, opportunityService, referralService, mapper); var controllerWithClaims = new ClaimsBuilder <EmployerController>(_employerController) .Add(ClaimTypes.Role, RolesExtensions.StandardUser) .AddUserName("Current User") .Build(); _result = controllerWithClaims.SaveOpportunityCompanyNameAsync(viewModel).GetAwaiter().GetResult(); }
public When_Employer_SaveOpportunityCompanyName_Is_Submitted_Invalid_Employer() { var employerService = Substitute.For <IEmployerService>(); employerService.ValidateCompanyNameAndCrmIdAsync(Arg.Any <Guid>(), Arg.Any <string>()) .Returns(false); var opportunityService = Substitute.For <IOpportunityService>(); var viewModel = new FindEmployerViewModel { CompanyName = "Invalid Business Name" }; var config = new MapperConfiguration(c => c.AddMaps(typeof(EmployerMapper).Assembly)); var referralService = Substitute.For <IReferralService>(); var mapper = new Mapper(config); var employerController = new EmployerController(employerService, opportunityService, referralService, mapper); _employerController = new ClaimsBuilder <EmployerController>(employerController) .Add(ClaimTypes.Role, RolesExtensions.StandardUser) .AddUserName("Username") .Build(); _result = _employerController.SaveOpportunityCompanyNameAsync(viewModel).GetAwaiter().GetResult(); }
public When_EmployerService_Is_Called_To_Get_Opportunity_Employer() { var employerRepository = Substitute.For <IRepository <Domain.Models.Employer> >(); _opportunityRepository = Substitute.For <IOpportunityRepository>(); _opportunityRepository.GetSingleOrDefaultAsync(Arg.Any <Expression <Func <Domain.Models.Opportunity, bool> > >(), Arg.Any <Expression <Func <Domain.Models.Opportunity, FindEmployerViewModel> > >()) .Returns(new FindEmployerViewModelBuilder().BuildWithEmployer()); var employerService = new EmployerService(employerRepository, _opportunityRepository, Substitute.For <IMapper>(), Substitute.For <IValidator <CrmEmployerEventBase> >(), Substitute.For <IMessageQueueService>()); _result = employerService.GetOpportunityEmployerAsync(1, 2).GetAwaiter().GetResult(); }
public async Task <IActionResult> SaveOpportunityCompanyNameAsync(FindEmployerViewModel viewModel) { var username = HttpContext.User.GetUserName(); await ValidateAsync(viewModel, username); if (!ModelState.IsValid) { return(View("FindEmployer", viewModel)); } var dto = _mapper.Map <CompanyNameDto>(viewModel); await _opportunityService.UpdateOpportunityAsync(dto); return(RedirectToRoute("GetEmployerDetails", new { viewModel.OpportunityId, viewModel.OpportunityItemId })); }