public async Task <IActionResult> SearchTemplates(SearchModel searchModel) { if (searchModel == null || searchModel.PageNumber < 1 || searchModel.Top < 1) { _logger.Error("A null or invalid search model was provided for searching templates"); return(new BadRequestObjectResult("An invalid search model was provided")); } try { IEnumerable <SearchResults <TemplateIndex> > searchResults = await GetSearchResults(searchModel); TemplateSearchResults results = new TemplateSearchResults(); foreach (SearchResults <TemplateIndex> searchResult in searchResults) { ProcessSearchResults(searchResult, results); } return(new OkObjectResult(results)); } catch (FailedToQuerySearchException exception) { _logger.Error(exception, $"Failed to query search with term: {searchModel.SearchTerm}"); return(new StatusCodeResult(500)); } }
public async Task SearchTemplate_GivenValidParameters_ShouldReturnOkResult() { SearchModel model = new SearchModel { PageNumber = 10, Top = 50, IncludeFacets = false }; SearchResults <TemplateIndex> mockSearchResults = new SearchResults <TemplateIndex> { Results = new List <Repositories.Common.Search.SearchResult <TemplateIndex> >() { CreateTemplateResult(new TemplateIndex { Id = "df073a02-bbc5-44ee-a84b-5931c6e7cf1e-v1", Name = "Template", Version = 2, CurrentMajorVersion = 1, CurrentMinorVersion = 2, PublishedMajorVersion = 1, PublishedMinorVersion = 2, LastUpdatedDate = new DateTime(2019, 1, 1), LastUpdatedAuthorName = "user", LastUpdatedAuthorId = "123", FundingPeriodName = "period", FundingPeriodId = "123", FundingStreamName = "stream", FundingStreamId = "321", HasReleasedVersion = "Yes" }) } }; ISearchRepository <TemplateIndex> mockTemplateIndexRepository = CreateSearchRepository(); mockTemplateIndexRepository.Search(Arg.Any <string>(), Arg.Any <SearchParameters>()) .Returns(mockSearchResults); TemplateSearchService sut = CreateTemplateSearchService(searchRepository: mockTemplateIndexRepository); IActionResult actionResult = await sut.SearchTemplates(model); actionResult.Should().BeOfType <OkObjectResult>(); OkObjectResult objectResult = actionResult as OkObjectResult; TemplateSearchResults templateSearchResults = objectResult.Value as TemplateSearchResults; templateSearchResults.Results.Count().Should().Be(1); TemplateSearchResult templateSearchResult = templateSearchResults.Results.First(); templateSearchResult.Id.Should().Be("df073a02-bbc5-44ee-a84b-5931c6e7cf1e-v1"); templateSearchResult.Name.Should().Be("Template"); templateSearchResult.CurrentMajorVersion.Should().Be(1); templateSearchResult.CurrentMinorVersion.Should().Be(2); templateSearchResult.PublishedMajorVersion.Should().Be(1); templateSearchResult.FundingPeriodName.Should().Be("period"); templateSearchResult.FundingPeriodId.Should().Be("123"); templateSearchResult.FundingStreamName.Should().Be("stream"); templateSearchResult.FundingStreamId.Should().Be("321"); templateSearchResult.LastUpdatedAuthorName.Should().Be("user"); templateSearchResult.LastUpdatedAuthorId.Should().Be("123"); templateSearchResult.LastUpdatedDate.Should().Be(new DateTime(2019, 1, 1)); }
private static void ProcessSearchResults(SearchResults <TemplateIndex> searchResult, TemplateSearchResults results) { if (!searchResult.Facets.IsNullOrEmpty()) { results.Facets = results.Facets.Concat(searchResult.Facets); } else { results.TotalCount = (int)(searchResult.TotalCount ?? 0); results.Results = searchResult.Results?.Select(m => new TemplateSearchResult { Id = m.Result.Id, Name = m.Result.Name, FundingPeriodId = m.Result.FundingPeriodId, FundingPeriodName = m.Result.FundingPeriodName, FundingStreamId = m.Result.FundingStreamId, FundingStreamName = m.Result.FundingStreamName, LastUpdatedDate = m.Result.LastUpdatedDate.LocalDateTime, LastUpdatedAuthorId = m.Result.LastUpdatedAuthorId, LastUpdatedAuthorName = m.Result.LastUpdatedAuthorName, Version = m.Result.Version, Status = m.Result.Status, CurrentMajorVersion = m.Result.CurrentMajorVersion, CurrentMinorVersion = m.Result.CurrentMinorVersion, PublishedMajorVersion = m.Result.PublishedMajorVersion, PublishedMinorVersion = m.Result.PublishedMinorVersion, HasReleasedVersion = m.Result.HasReleasedVersion }); } }