public async Task SearchSpecificationDatasetRelationships_GivenSearchReturnsResultsAndDataDefinitionsHasItems_ReturnsOKResult() { //Arrange SearchModel model = CreateSearchModel(); SearchResults <SpecificationIndex> searchResults = new SearchResults <SpecificationIndex> { TotalCount = 1, Results = new List <Repositories.Common.Search.SearchResult <SpecificationIndex> > { new Repositories.Common.Search.SearchResult <SpecificationIndex> { Result = new SpecificationIndex { DataDefinitionRelationshipIds = new[] { "def-1", "def-2" } } } } }; ISearchRepository <SpecificationIndex> searchRepository = CreateSearchRepository(); searchRepository .Search(Arg.Is("SearchTermTest"), Arg.Any <SearchParameters>()) .Returns(searchResults); ILogger logger = CreateLogger(); SpecificationsSearchService service = CreateSearchService(searchRepository, logger); //Act IActionResult result = await service.SearchSpecificationDatasetRelationships(model); //Assert result .Should() .BeOfType <OkObjectResult>(); OkObjectResult okObjectResult = result as OkObjectResult; SpecificationDatasetRelationshipsSearchResults specificationSearchResults = okObjectResult.Value as SpecificationDatasetRelationshipsSearchResults; specificationSearchResults .Results .Count() .Should() .Be(1); specificationSearchResults .TotalCount .Should() .Be(1); specificationSearchResults .Results .First() .DefinitionRelationshipCount .Should() .Be(2); }
public async Task <IActionResult> SearchSpecificationDatasetRelationships(SearchModel searchModel) { if (searchModel == null || searchModel.PageNumber < 1 || searchModel.Top < 1) { _logger.Error("A null or invalid search model was provided for searching specifications"); return(new BadRequestObjectResult("An invalid search model was provided")); } try { searchModel.OrderBy = DefaultOrderBy; IEnumerable <Task <SearchResults <SpecificationIndex> > > searchTasks = await BuildSearchTasks(searchModel, DatasetRelationshipFacets); if (searchTasks.IsNullOrEmpty()) { return(new InternalServerErrorResult("Failed to build search tasks")); } SpecificationDatasetRelationshipsSearchResults results = new SpecificationDatasetRelationshipsSearchResults(); await TaskHelper.WhenAllAndThrow(searchTasks.ToArray()); foreach (Task <SearchResults <SpecificationIndex> > searchTask in searchTasks) { SearchResults <SpecificationIndex> searchResult = searchTask.Result; 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 SpecificationDatasetRelationshipsSearchResult { SpecificationId = m.Result.Id, SpecificationName = m.Result.Name, FundingPeriodName = m.Result.FundingPeriodName, FundingStreamNames = m.Result.FundingStreamNames, TotalMappedDataSets = m.Result.TotalMappedDataSets.GetValueOrDefault(), MapDatasetLastUpdated = m.Result.MapDatasetLastUpdated, DefinitionRelationshipCount = m.Result.DataDefinitionRelationshipIds.IsNullOrEmpty() ? 0 : m.Result.DataDefinitionRelationshipIds.Count() }); } } return(new OkObjectResult(results)); } catch (FailedToQuerySearchException exception) { _logger.Error(exception, $"Failed to query search with term: {searchModel.SearchTerm}"); return(new StatusCodeResult(500)); } }
async public Task <IActionResult> SearchSpecificationDatasetRelationships(HttpRequest request) { SearchModel searchModel = await GetSearchModelFromRequest(request); if (searchModel == null) { return(new BadRequestObjectResult("An invalid search model was provided")); } try { searchModel.OrderBy = DefaultOrderBy; SearchResults <SpecificationIndex> searchResults = await PerformNonfacetSearch(searchModel); SpecificationDatasetRelationshipsSearchResults results = new SpecificationDatasetRelationshipsSearchResults { TotalCount = (int)(searchResults?.TotalCount ?? 0), Results = searchResults.Results?.Select(m => new SpecificationDatasetRelationshipsSearchResult { SpecificationId = m.Result.Id, SpecificationName = m.Result.Name, DefinitionRelationshipCount = m.Result.DataDefinitionRelationshipIds.IsNullOrEmpty() ? 0 : m.Result.DataDefinitionRelationshipIds.Count() }) }; return(new OkObjectResult(results)); } catch (FailedToQuerySearchException exception) { _logger.Error(exception, $"Failed to query search with term: {searchModel.SearchTerm}"); return(new StatusCodeResult(500)); } }
async public Task SearchSpecificationDatasetRelationships_GivenSearchReturnsResultsAndDataDefinitionsHasItems_ReturnsOKResult() { //Arrange SearchModel model = CreateSearchModel(); string json = JsonConvert.SerializeObject(model); byte[] byteArray = Encoding.UTF8.GetBytes(json); MemoryStream stream = new MemoryStream(byteArray); HttpRequest request = Substitute.For <HttpRequest>(); request .Body .Returns(stream); SearchResults <SpecificationIndex> searchResults = new SearchResults <SpecificationIndex> { TotalCount = 1, Results = new List <Repositories.Common.Search.SearchResult <SpecificationIndex> > { new Repositories.Common.Search.SearchResult <SpecificationIndex> { Result = new SpecificationIndex { DataDefinitionRelationshipIds = new[] { "def-1", "def-2" } } } } }; ISearchRepository <SpecificationIndex> searchRepository = CreateSearchRepository(); searchRepository .Search(Arg.Is("SearchTermTest"), Arg.Any <SearchParameters>()) .Returns(searchResults); ILogger logger = CreateLogger(); SpecificationsSearchService service = CreateSearchService(searchRepository, logger); //Act IActionResult result = await service.SearchSpecificationDatasetRelationships(request); //Assert result .Should() .BeOfType <OkObjectResult>(); OkObjectResult okObjectResult = result as OkObjectResult; SpecificationDatasetRelationshipsSearchResults specificationSearchResults = okObjectResult.Value as SpecificationDatasetRelationshipsSearchResults; specificationSearchResults .Results .Count() .Should() .Be(1); specificationSearchResults .TotalCount .Should() .Be(1); specificationSearchResults .Results .First() .DefinitionRelationshipCount .Should() .Be(2); }
public async Task SearchSpecificationDatasetRelationships_GivenSearchReturnsFacets_ReturnsOKResult() { //Arrange SearchModel model = CreateSearchModel(); SearchResults <SpecificationIndex> searchResults = new SearchResults <SpecificationIndex> { TotalCount = 1, Facets = new List <Facet> { new Facet { Name = "stuff", FacetValues = new[] { new FacetValue { Count = 200, Name = "stuff one" }, } }, } }; ISearchRepository <SpecificationIndex> searchRepository = CreateSearchRepository(); searchRepository .Search(Arg.Is("SearchTermTest"), Arg.Any <SearchParameters>()) .Returns(searchResults); ILogger logger = CreateLogger(); SpecificationsSearchService service = CreateSearchService(searchRepository, logger); //Act IActionResult result = await service.SearchSpecificationDatasetRelationships(model); //Assert result .Should() .BeOfType <OkObjectResult>(); OkObjectResult okObjectResult = result as OkObjectResult; SpecificationDatasetRelationshipsSearchResults specificationSearchResults = okObjectResult.Value as SpecificationDatasetRelationshipsSearchResults; specificationSearchResults .Results .Should() .BeNullOrEmpty(); specificationSearchResults .TotalCount .Should() .Be(0); searchResults .Facets .Should() .BeEquivalentTo(searchResults.Facets); }