예제 #1
0
        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));
            }
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }