public SearchEngineResultsDto PerformBingSearch(GetSearchResultsQuery request) { var pos = 0; var occurrenceList = new List <int>(); for (var i = 1; i < 10; i++) { var html = $"https://infotrack-tests.infotrack.com.au/Bing/Page0{i}.html"; var htmlDoc = _webHtmlExtractor.Load(html); htmlDoc.OptionEmptyCollection = true; var interestedNodes = htmlDoc.DocumentNode.SelectNodes("//*[@id=\"b_results\"]/li[*]/div/div/cite"); foreach (var node in interestedNodes) { pos++; if (pos > MaxPosition) { return(new SearchEngineResultsDto(occurrenceList, occurrenceList.Count)); } if (node.InnerHtml.Contains(request.Address)) { occurrenceList.Add(pos); } } } return(new SearchEngineResultsDto(occurrenceList, occurrenceList.Count)); }
public async Task <ActionResult <IEnumerable <SearchResultDto> > > GetSearchResults([FromQuery] SearchQueryDto searchQueryDto) { var query = new GetSearchResultsQuery(searchQueryDto); var result = await _mediator.Send(query); return(Ok(result)); }
public async void GetSearchResultsHandler_ReturnsNoResult() { //Arrange var searchServiceMock = new Mock <ISearchService>(); GetSearchResultsHandler handler = new GetSearchResultsHandler(searchServiceMock.Object, _mapper); SearchQueryDto searchQueryDto = new SearchQueryDto(); GetSearchResultsQuery query = new GetSearchResultsQuery(searchQueryDto); //Act var result = await handler.Handle(query, new System.Threading.CancellationToken()); //Assert Assert.Empty(result); }
public async Task <ActionResult> GetSearchResults([FromQuery(Name = "q")] string searchTerm) { if (!this.cacheWrapper.TryGetValue(searchTerm, out List <SearchResponse> searchResponse)) { var query = new GetSearchResultsQuery() { SearchTerm = searchTerm }; try { var searchResults = await mediator.Send(query); searchResponse = searchResults.Select(x => new SearchResponse() { Title = x.Title, Url = x.Url, Caption = x.Caption }).ToList(); this.cacheWrapper.Set(searchTerm, searchResponse); } catch (SearchTermValidationException ex) { return(BadRequest(ex.Message)); } catch (AggregateException ae) { var errorMessage = ""; foreach (var ex in ae.Flatten().InnerExceptions) { errorMessage += ex.Message + Environment.NewLine; } //TODO: log exception details return(StatusCode(StatusCodes.Status500InternalServerError, errorMessage)); } catch (Exception ex) { //TODO: log exception details return(StatusCode(StatusCodes.Status500InternalServerError, "There was an unexpected error when searching for the search term. " + "Please contact IT quoting the search term.")); } } return(Ok(searchResponse)); }
public async void GetSearchResultsHandler_ReturnsNotNullResult() { //Arrange var searchServiceMock = new Mock <ISearchService>(); searchServiceMock.Setup(a => a.GetSearchResultsAsync(It.IsAny <SearchQueryDto>())).Returns(GetSearchResultsFromFileAsync()).Verifiable(); GetSearchResultsHandler handler = new GetSearchResultsHandler(searchServiceMock.Object, _mapper); SearchQueryDto searchQueryDto = new SearchQueryDto(); GetSearchResultsQuery query = new GetSearchResultsQuery(searchQueryDto); //Act var result = await handler.Handle(query, new System.Threading.CancellationToken()); //Assert Assert.NotEmpty(result); }
public async Task <IEnumerable <SearchResultDto> > Handle(GetSearchResultsQuery request, CancellationToken cancellationToken) { var searchResults = await _searchService.GetSearchResultsAsync(request._searchQueryDto); return(_mapper.Map <IEnumerable <SearchResult>, IEnumerable <SearchResultDto> >(searchResults)); }