コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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));
        }
コード例 #3
0
 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
         });
     }
 }