public async void CandidateSearchTest() { // Arrange var candidates = GetCandidateList(); var searchRequest = new CandidateSearchRequest { Name = "Jason" }; var mockRepo = new Mock <IRepository <Candidate> >(); mockRepo.Setup(m => m.SearchAsync(It.IsAny <Expression <Func <Candidate, bool> > >())) .ReturnsAsync((Expression <Func <Candidate, bool> > predicate) => { return(candidates.Where(predicate.Compile())); }); var candidateService = new CandidateService(mockRepo.Object); // Act var res = await candidateService.SearchAsync(searchRequest); // Assert Assert.Single(res.ToList()); }
private async void BtnSearch_Click(object sender, EventArgs e) { var search = new CandidateSearchRequest { FirstName = txtSearch.Text, Username = txtSearch.Text }; var result = await _apiService.GetAll <List <Model.Candidate> >(search); dgvCandidatesData.AutoGenerateColumns = false; dgvCandidatesData.DataSource = result; }
public CandidateSearchResultsViewModel SearchCandidates(CandidateSearchViewModel searchViewModel, string ukprn) { var dateOfBirth = string.IsNullOrEmpty(searchViewModel.DateOfBirth) ? (DateTime?)null : DateTime.Parse(searchViewModel.DateOfBirth, _dateCultureInfo); IEnumerable <int> providerSiteIds = null; if (!string.IsNullOrEmpty(ukprn)) { var providerId = _providerService.GetProvider(ukprn).ProviderId; var ownedProviderSites = _providerService.GetOwnedProviderSites(providerId); providerSiteIds = ownedProviderSites.Select(ps => ps.ProviderSiteId).ToList(); } var request = new CandidateSearchRequest(searchViewModel.FirstName, searchViewModel.LastName, dateOfBirth, searchViewModel.Postcode, CandidateSearchExtensions.GetCandidateGuidPrefix(searchViewModel.ApplicantId), CandidateSearchExtensions.GetCandidateId(searchViewModel.ApplicantId), providerSiteIds, !string.IsNullOrEmpty(ukprn)); var candidates = _candidateSearchService.SearchCandidates(request) ?? new List <CandidateSummary>(); var results = new CandidateSearchResultsViewModel { SearchViewModel = searchViewModel, Candidates = new PageableViewModel <CandidateSummaryViewModel> { Page = candidates.OrderBy(c => c.LastName) .ThenBy(c => c.FirstName) .ThenBy(c => c.Address.Postcode) .ThenBy(c => c.Address.AddressLine1) .Skip((searchViewModel.CurrentPage - 1) * searchViewModel.PageSize) .Take(searchViewModel.PageSize) .Select(c => _mapper.Map <CandidateSummary, CandidateSummaryViewModel>(c)) .ToList(), ResultsCount = candidates.Count, CurrentPage = searchViewModel.CurrentPage, TotalNumberOfPages = candidates.Count == 0 ? 1 : (int)Math.Ceiling((double)candidates.Count / searchViewModel.PageSize) } }; return(results); }
public List <CandidateSummary> SearchCandidates(CandidateSearchRequest request) { _logger.Debug("Calling repository to find candidates matching search request {0}", request); if (string.IsNullOrEmpty(request.FirstName) && string.IsNullOrEmpty(request.LastName) && request.DateOfBirth == null && string.IsNullOrEmpty(request.Postcode)) { throw new ArgumentException("You must specify at least one search parameter"); } var query = new List <IMongoQuery>(); if (!string.IsNullOrEmpty(request.FirstName)) { query.Add(Query <MongoCandidate> .Matches(c => c.RegistrationDetails.FirstName, $@"/^{request.FirstName}$/i")); } if (!string.IsNullOrEmpty(request.LastName)) { query.Add(Query <MongoCandidate> .Matches(c => c.RegistrationDetails.LastName, $@"/^{request.LastName}$/i")); } if (request.DateOfBirth.HasValue) { query.Add(Query <MongoCandidate> .EQ(c => c.RegistrationDetails.DateOfBirth, request.DateOfBirth)); } if (!string.IsNullOrEmpty(request.Postcode)) { query.Add(Query <MongoCandidate> .Matches(c => c.RegistrationDetails.Address.Postcode, $@"/^{request.Postcode}$/i")); } var candidates = Collection .Find(Query.And(query)) .SetFields(Fields <MongoCandidate> .Include(c => c.RegistrationDetails)) .Select(c => _mapper.Map <MongoCandidate, CandidateSummary>(c)) .ToList(); _logger.Debug("Found {1} candidates matching search request {0}", request, candidates.Count); return(candidates); }
public List <CandidateSummary> SearchCandidates(CandidateSearchRequest request) { _logger.Debug("Calling CandidateReadRepository to search for candidates that match {0}.", request); return(_candidateReadRepository.SearchCandidates(request)); }
public List <CandidateSummary> SearchCandidates(CandidateSearchRequest request) { Condition.Requires(request); return(_searchCandidatesStrategy.SearchCandidates(request)); }
public List <CandidateSummary> SearchCandidates(CandidateSearchRequest request) { _logService.Debug("Calling repository to find candidates matching search request {0}", request); if (string.IsNullOrEmpty(request.FirstName) && string.IsNullOrEmpty(request.LastName) && request.DateOfBirth == null && string.IsNullOrEmpty(request.Postcode) && string.IsNullOrEmpty(request.CandidateGuidPrefix) && !request.CandidateId.HasValue) { throw new ArgumentException("You must specify at least one search parameter"); } var query = new List <string>(4); if (!string.IsNullOrEmpty(request.FirstName)) { query.Add("p.FirstName LIKE @FirstName + '%'"); } if (!string.IsNullOrEmpty(request.LastName)) { query.Add("p.Surname LIKE @LastName + '%'"); } if (request.DateOfBirth.HasValue) { query.Add("c.DateofBirth = @DateOfBirth"); } if (!string.IsNullOrEmpty(request.Postcode)) { query.Add("c.Postcode LIKE @Postcode + '%'"); } if (!string.IsNullOrEmpty(request.CandidateGuidPrefix)) { query.Add("c.CandidateGuid LIKE @CandidateGuidPrefix + '%'"); } if (request.CandidateId.HasValue) { query.Add("c.CandidateId = @CandidateId"); } if (request.ProviderSiteIds != null) { query.Add("(VacancyManagerId IN @providerSiteIds OR DeliveryOrganisationId IN @providerSiteIds)"); } if (request.HasSubmittedApplications) { query.Add("a.ApplicationStatusTypeId >= 2"); } var sql = @"SELECT DISTINCT c.CandidateId, c.CandidateGuid, p.FirstName, p.MiddleNames, p.Surname, c.DateofBirth, c.AddressLine1, c.AddressLine2, c.AddressLine3, c.AddressLine4, c.Postcode, c.Town, ct.FullName As County, c.Latitude, c.Longitude FROM Person p JOIN Candidate c ON p.PersonId = c.PersonId JOIN County ct on c.CountyId = ct.CountyId LEFT JOIN [Application] a ON c.CandidateId = a.CandidateId LEFT JOIN Vacancy v ON a.VacancyId = v.VacancyId WHERE " + string.Join(" AND ", query); var candidates = CandidateMapper.Map <IEnumerable <DbCandidateSummary>, IEnumerable <CandidateSummary> >( _getOpenConnection.Query <DbCandidateSummary>(sql, new { request.FirstName, request.LastName, request.DateOfBirth, request.Postcode, request.CandidateGuidPrefix, request.CandidateId, request.ProviderSiteIds })).ToList(); _logService.Debug("Found {1} candidates matching search request {0}", request, candidates.Count); return(candidates); }
public async Task <IEnumerable <Candidate> > SearchAsync(CandidateSearchRequest candidateSearchRequest) { return(await _repository.SearchAsync(candidate => candidate.Name.Contains(candidateSearchRequest.Name) )); }