Пример #1
0
        public async Task PerformSearch_FirstSearchResultReturnedCorrectly()
        {
            // Arrange
            IDatasetsApiClient datasetClient = Substitute.For <IDatasetsApiClient>();
            ILogger            logger        = Substitute.For <ILogger>();
            IMapper            mapper        = MappingHelper.CreateFrontEndMapper();

            IDatasetSearchService datasetSearchService = new DatasetSearchService(datasetClient, mapper, logger);

            int numberOfItems = 25;

            ApiResponse <SearchResults <DatasetIndex> > itemResult = GenerateSearchResult(numberOfItems);

            datasetClient
            .SearchDatasets(Arg.Any <SearchModel>())
            .Returns(itemResult);

            SearchRequestViewModel request = new SearchRequestViewModel();

            // Act
            DatasetSearchResultViewModel results = await datasetSearchService.PerformSearch(request);

            // Assert
            DatasetSearchResultItemViewModel first = results.Datasets.First();

            first.Should().NotBeNull();
            first.Id.Should().Be("10");
            first.Status.Should().Be("Unknown");
            first.LastUpdated.Should().Be(new DateTime(2018, 2, 6, 15, 31, 0));
            first.Name.Should().Be("Dataset 1");
        }
Пример #2
0
        public void PerformSearch_WhenFindDatasetsServiceUnavailable_ThenHttpExceptionThrown()
        {
            // Arrange
            IDatasetsApiClient datasetClient = Substitute.For <IDatasetsApiClient>();
            ILogger            logger        = Substitute.For <ILogger>();
            IMapper            mapper        = MappingHelper.CreateFrontEndMapper();
            IFeatureToggle     featureToggle = CreateFeatureToggle();

            IDatasetSearchService datasetSearchService = new DatasetSearchService(datasetClient, mapper, logger, featureToggle);

            datasetClient
            .When(a => a.FindDatasets(Arg.Any <SearchFilterRequest>()))
            .Do(x => { throw new HttpRequestException(); });

            SearchRequestViewModel request = new SearchRequestViewModel();

            // Act
            Action pageAction = new Action(() =>
            {
                DatasetSearchResultViewModel result = datasetSearchService.PerformSearch(request).Result;
            });

            // Assert
            pageAction.Should().Throw <HttpRequestException>();
        }
Пример #3
0
        public async Task PerformSearch_StartAndEndItemsNumbersDisplayedCorrectlyOnSecondPageOfItemsWithMorePagesAvailable()
        {
            // Arrange
            IDatasetsApiClient datasetClient = Substitute.For <IDatasetsApiClient>();
            ILogger            logger        = Substitute.For <ILogger>();
            IMapper            mapper        = MappingHelper.CreateFrontEndMapper();

            IDatasetSearchService datasetSearchService = new DatasetSearchService(datasetClient, mapper, logger);

            int numberOfItems = 50;

            ApiResponse <SearchResults <DatasetIndex> > itemResult = GenerateSearchResult(numberOfItems);

            itemResult.Content.TotalCount = 175;

            datasetClient
            .SearchDatasets(Arg.Any <SearchModel>())
            .Returns(itemResult);

            SearchRequestViewModel request = new SearchRequestViewModel()
            {
                PageNumber = 2,
                PageSize   = 50
            };

            // Act
            DatasetSearchResultViewModel results = await datasetSearchService.PerformSearch(request);

            // Assert
            results.StartItemNumber.Should().Be(51);
            results.EndItemNumber.Should().Be(100);
        }
Пример #4
0
        public async Task OnGetAsync_WhenOperationTypeisSpecifiedButNoOperationId_ThenPreconditionFailedReturned()
        {
            //Arrange
            IDatasetSearchService searchService = CreateSearchService();

            DatasetSearchResultViewModel searchResult = new DatasetSearchResultViewModel()
            {
                CurrentPage     = 2,
                EndItemNumber   = 0,
                Facets          = new List <SearchFacetViewModel>(),
                PagerState      = new PagerState(1, 1),
                Datasets        = new List <DatasetSearchResultItemViewModel>(),
                StartItemNumber = 1,
                TotalResults    = 0
            };

            searchService
            .PerformSearch(Arg.Any <SearchRequestViewModel>())
            .Returns(searchResult);

            ManageDatasetsPageModel DatasetModel = CreateDatasetPageModel(searchService);

            //Act
            IActionResult result = await DatasetModel.OnGetAsync(null, null, DatasetPageBannerOperationType.DatasetUpdated, null);

            //Assert
            result
            .Should()
            .BeOfType <PreconditionFailedResult>()
            .Which
            .Value
            .Should()
            .Be("Operation ID not provided");
        }
Пример #5
0
        public async Task OnGetAsync_WhenOperationTypeIsDatasetUpdatedAndDatasetVersionByDatasetIdIsNotReturned_ThenInternalServerErrorResult()
        {
            //Arrange
            IDatasetSearchService searchService = CreateSearchService();

            DatasetSearchResultViewModel searchResult = new DatasetSearchResultViewModel()
            {
                CurrentPage     = 2,
                EndItemNumber   = 0,
                Facets          = new List <SearchFacetViewModel>(),
                PagerState      = new PagerState(1, 1),
                Datasets        = new List <DatasetSearchResultItemViewModel>(),
                StartItemNumber = 1,
                TotalResults    = 0
            };

            searchService
            .PerformSearch(Arg.Any <SearchRequestViewModel>())
            .Returns(searchResult);

            ManageDatasetsPageModel DatasetModel = CreateDatasetPageModel(searchService);

            //Act
            IActionResult result = await DatasetModel.OnGetAsync(null, null, DatasetPageBannerOperationType.DatasetUpdated, "Dataset1");

            //Assert
            result
            .Should()
            .BeOfType <InternalServerErrorResult>()
            .And
            .Equals("Dataset API response returned null.");
        }
Пример #6
0
        public async Task PerformSearch_StartAndEndItemsNumbersDisplayedCorrectlyOnZeroItems()
        {
            // Arrange
            IDatasetsApiClient datasetClient = Substitute.For <IDatasetsApiClient>();
            ILogger            logger        = Substitute.For <ILogger>();
            IMapper            mapper        = MappingHelper.CreateFrontEndMapper();

            IDatasetSearchService datasetSearchService = new DatasetSearchService(datasetClient, mapper, logger);

            int numberOfItems = 0;

            ApiResponse <SearchResults <DatasetIndex> > itemResult = GenerateSearchResult(numberOfItems);

            datasetClient
            .SearchDatasets(Arg.Any <SearchModel>())
            .Returns(itemResult);

            SearchRequestViewModel request = new SearchRequestViewModel();

            // Act
            DatasetSearchResultViewModel results = await datasetSearchService.PerformSearch(request);

            // Assert
            results.StartItemNumber.Should().Be(0);
            results.EndItemNumber.Should().Be(0);
        }
Пример #7
0
        public async Task PerformSearch_StartAndEndItemsNumbersDisplayedCorrectlyOnSecondPageOfItemsWithMorePagesAvailable()
        {
            // Arrange
            IDatasetsApiClient datasetClient = Substitute.For <IDatasetsApiClient>();
            ILogger            logger        = Substitute.For <ILogger>();
            IMapper            mapper        = MappingHelper.CreateFrontEndMapper();
            IFeatureToggle     featureToggle = CreateFeatureToggle();

            IDatasetSearchService datasetSearchService = new DatasetSearchService(datasetClient, mapper, logger, featureToggle);

            int numberOfItems = 50;

            PagedResult <DatasetSearchResultItem> itemResult = GeneratePagedResult(numberOfItems);

            itemResult.PageNumber = 2;
            itemResult.PageSize   = 50;
            itemResult.TotalItems = 175;

            datasetClient
            .FindDatasets(Arg.Any <SearchFilterRequest>())
            .Returns(itemResult);

            SearchRequestViewModel request = new SearchRequestViewModel()
            {
                PageNumber = 2,
            };

            // Act
            DatasetSearchResultViewModel results = await datasetSearchService.PerformSearch(request);

            // Assert
            results.StartItemNumber.Should().Be(51);
            results.EndItemNumber.Should().Be(100);
        }
Пример #8
0
        public async Task OnGetAsync_WhenOperationTypeIsDatasetCreated_ThenBannerPopulated()
        {
            //Arrange
            IDatasetSearchService searchService     = CreateSearchService();
            IDatasetsApiClient    datasetsApiClient = CreateDatasetApiClient();

            DatasetSearchResultViewModel searchResult = new DatasetSearchResultViewModel()
            {
                CurrentPage     = 2,
                EndItemNumber   = 0,
                Facets          = new List <SearchFacetViewModel>(),
                PagerState      = new PagerState(1, 1),
                Datasets        = new List <DatasetSearchResultItemViewModel>(),
                StartItemNumber = 1,
                TotalResults    = 0
            };

            searchService
            .PerformSearch(Arg.Any <SearchRequestViewModel>())
            .Returns(searchResult);

            ManageDatasetsPageModel DatasetModel = CreateDatasetPageModel(searchService, datasetsApiClient);

            string datasetId = "Dataset1";

            DatasetVersionResponse datasetVersionResponse = CreateDatasetResponseForBannerChecks(datasetId);

            datasetsApiClient.GetCurrentDatasetVersionByDatasetId(Arg.Any <string>())
            .Returns(new ApiResponse <DatasetVersionResponse>(HttpStatusCode.OK, datasetVersionResponse));

            //Act
            IActionResult result = await DatasetModel.OnGetAsync(null, null, DatasetPageBannerOperationType.DatasetCreated, "Dataset1");

            //Assert
            result
            .Should()
            .BeOfType <PageResult>();

            DatasetModel
            .PageBanner
            .Should()
            .BeEquivalentTo(new PageBannerOperation()
            {
                EntityName                    = "Test Dataset",
                EntityType                    = "Data Source",
                OperationId                   = "Dataset1",
                SecondaryActionUrl            = "/datasets/updatedataset?datasetId=" + datasetId,
                CurrentDataSourceRows         = datasetVersionResponse.CurrentDataSourceRows,
                PreviousDataSourceRows        = datasetVersionResponse.PreviousDataSourceRows,
                DisplayOperationActionSummary = true,
                OperationActionSummaryText    = "A new data source with " + datasetVersionResponse.CurrentDataSourceRows + " data rows uploaded",
            });
        }
        public async Task <IActionResult> SearchDatasets([FromBody] SearchRequestViewModel request)
        {
            Guard.ArgumentNotNull(request, nameof(request));

            DatasetSearchResultViewModel result = await _datasetSearchService.PerformSearch(request);

            if (result != null)
            {
                return(Ok(result));
            }
            else
            {
                return(new StatusCodeResult(500));
            }
        }
Пример #10
0
        public async Task PerformSearch_GivenIsSearchModeAllEnabledFeatureToggleIdTurnedOn_SearchModeIsAll()
        {
            // Arrange
            IDatasetsApiClient mockDatasetsApiClient = Substitute.For <IDatasetsApiClient>();
            ILogger            mockLogger            = Substitute.For <ILogger>();
            IMapper            mockMapper            = MappingHelper.CreateFrontEndMapper();
            IFeatureToggle     featureToggle         = CreateFeatureToggle(true);

            IDatasetSearchService datasetSearchService = new DatasetSearchService(mockDatasetsApiClient, mockMapper, mockLogger, featureToggle);

            // Act
            DatasetSearchResultViewModel datasetVersionSearchResultViewModel = await datasetSearchService.PerformSearch(new SearchRequestViewModel());

            // Assert
            await
            mockDatasetsApiClient
            .Received(1)
            .FindDatasets(Arg.Is <SearchFilterRequest>(m => m.SearchMode == SearchMode.All));
        }
Пример #11
0
        public async Task OnGetAsync_GivenDatasetPageModelSearchTermRequested_ReturnsPageResult()
        {
            //Arrange
            IDatasetSearchService searchService = CreateSearchService();

            const string searchTerm = "testTerm";

            DatasetSearchResultViewModel searchResult = new DatasetSearchResultViewModel()
            {
                CurrentPage     = 2,
                EndItemNumber   = 0,
                Facets          = new List <SearchFacetViewModel>(),
                PagerState      = new PagerState(1, 1),
                Datasets        = new List <DatasetSearchResultItemViewModel>(),
                StartItemNumber = 1,
                TotalResults    = 0
            };

            searchService
            .PerformSearch(Arg.Any <SearchRequestViewModel>())
            .Returns(searchResult);

            ManageDatasetsPageModel DatasetModel = CreateDatasetPageModel(searchService);

            //Act
            IActionResult result = await DatasetModel.OnGetAsync(2, searchTerm);

            //Assert
            result
            .Should()
            .BeOfType <PageResult>()
            .Which
            .Should()
            .NotBeNull();

            await searchService
            .Received(1)
            .PerformSearch(Arg.Is <SearchRequestViewModel>(
                               c => c.PageNumber == 2 &&
                               c.SearchTerm == searchTerm));
        }
Пример #12
0
        public async Task PerformSearch_FirstSearchResultWithFacets_ReturnedCorrectly()
        {
            // Arrange
            IDatasetsApiClient datasetClient = Substitute.For <IDatasetsApiClient>();
            ILogger            logger        = Substitute.For <ILogger>();
            IMapper            mapper        = MappingHelper.CreateFrontEndMapper();
            IFeatureToggle     featureToggle = CreateFeatureToggle();

            IDatasetSearchService datasetSearchService = new DatasetSearchService(datasetClient, mapper, logger, featureToggle);

            int numberOfItems = 25;

            IEnumerable <SearchFacet> facets = new[]
            {
                new SearchFacet(), new SearchFacet()
            };

            PagedResult <DatasetSearchResultItem> itemResult = GeneratePagedResult(numberOfItems, facets);

            datasetClient
            .FindDatasets(Arg.Any <SearchFilterRequest>())
            .Returns(itemResult);

            SearchRequestViewModel request = new SearchRequestViewModel();

            // Act
            DatasetSearchResultViewModel results = await datasetSearchService.PerformSearch(request);

            // Assert
            DatasetSearchResultItemViewModel first = results.Datasets.First();

            first.Should().NotBeNull();
            first.Id.Should().Be("10");
            first.LastUpdated.Should().Be(new DateTime(2018, 2, 6, 15, 31, 0));
            first.Status.Should().Be("Unknown");
            first.Name.Should().Be("Dataset 1");

            results.Facets.Count().Should().Be(2);
        }
Пример #13
0
        public async Task OnGetAsync_GivenDatasetPerformSearchReturnsNullResults_ThenErrorReturned()
        {
            //Arrange
            IDatasetSearchService searchService = CreateSearchService();

            DatasetSearchResultViewModel searchResult = null;

            searchService
            .PerformSearch(Arg.Any <SearchRequestViewModel>())
            .Returns(searchResult);

            ManageDatasetsPageModel DatasetModel = CreateDatasetPageModel(searchService);

            //Act
            IActionResult result = await DatasetModel.OnGetAsync(null, null);

            //Assert
            result
            .Should()
            .BeOfType <InternalServerErrorResult>();

            InternalServerErrorResult statusCodeResult = result as InternalServerErrorResult;

            statusCodeResult
            .StatusCode
            .Should()
            .Be(500);

            statusCodeResult
            .Value
            .Should()
            .Equals("There was an error retrieving data sources from the Search Index.");

            await searchService
            .Received(1)
            .PerformSearch(Arg.Is <SearchRequestViewModel>(
                               c => c.PageNumber == null &&
                               c.SearchTerm == null));
        }
Пример #14
0
        public async Task PerformSearch_WhenFindDatasetsServiceReturnsNotFound_ThenNullReturned()
        {
            // Arrange
            IDatasetsApiClient datasetClient = Substitute.For <IDatasetsApiClient>();
            ILogger            logger        = Substitute.For <ILogger>();
            IMapper            mapper        = MappingHelper.CreateFrontEndMapper();

            IDatasetSearchService datasetSearchService = new DatasetSearchService(datasetClient, mapper, logger);

            ApiResponse <SearchResults <DatasetIndex> > expectedServiceResult = null;

            datasetClient
            .SearchDatasets(Arg.Any <SearchModel>())
            .Returns(expectedServiceResult);

            SearchRequestViewModel request = new SearchRequestViewModel();

            // Act
            DatasetSearchResultViewModel result = await datasetSearchService.PerformSearch(request);

            // Assert
            result.Should().BeNull();
        }
Пример #15
0
        public async Task PerformSearch_WhenFindDatasetsServiceReturnsNotFound_ThenNullReturned()
        {
            // Arrange
            IDatasetsApiClient datasetClient = Substitute.For <IDatasetsApiClient>();
            ILogger            logger        = Substitute.For <ILogger>();
            IMapper            mapper        = MappingHelper.CreateFrontEndMapper();
            IFeatureToggle     featureToggle = CreateFeatureToggle();

            IDatasetSearchService datasetSearchService = new DatasetSearchService(datasetClient, mapper, logger, featureToggle);

            PagedResult <DatasetSearchResultItem> expectedServiceResult = null;

            datasetClient
            .FindDatasets(Arg.Any <SearchFilterRequest>())
            .Returns(expectedServiceResult);

            SearchRequestViewModel request = new SearchRequestViewModel();

            // Act
            DatasetSearchResultViewModel result = await datasetSearchService.PerformSearch(request);

            // Assert
            result.Should().BeNull();
        }
Пример #16
0
        public async Task<IActionResult> SearchDatasets([FromBody]DatasetSearchRequestViewModel request)
        {
            Guard.ArgumentNotNull(request, nameof(request));
            
            SearchRequestViewModel searchRequest = new SearchRequestViewModel
            {
                Filters = new Dictionary<string, string[]>(),
                ErrorToggle = request.ErrorToggle,
                FacetCount = request.FacetCount,
                IncludeFacets = request.IncludeFacets,
                PageNumber = request.PageNumber,
                PageSize = request.PageSize,
                SearchMode = request.SearchMode,
                SearchTerm = request.SearchTerm
            };

            if (request.FundingStreams?.Length > 0)
            {
                searchRequest.Filters.Add("fundingStreamName", request.FundingStreams.ToArray());
            }
            
            if (request.DataSchemas?.Length > 0)
            {
                searchRequest.Filters.Add("definitionName", request.DataSchemas.ToArray());
            }
            
            DatasetSearchResultViewModel result = await _datasetSearchService.PerformSearch(searchRequest);
            if (result != null)
            {
                return Ok(result);
            }
            else
            {
                return new StatusCodeResult(500);
            }
        }
Пример #17
0
        public async Task <DatasetSearchResultViewModel> PerformSearch(SearchRequestViewModel request)
        {
            SearchFilterRequest requestOptions = new SearchFilterRequest()
            {
                Page          = request.PageNumber.HasValue ? request.PageNumber.Value : 1,
                PageSize      = request.PageSize.HasValue ? request.PageSize.Value : 50,
                SearchTerm    = request.SearchTerm,
                IncludeFacets = request.IncludeFacets,
                Filters       = request.Filters,
                SearchMode    = _featureToggle.IsSearchModeAllEnabled() ? SearchMode.All : SearchMode.Any
            };

            if (request.PageNumber.HasValue && request.PageNumber.Value > 0)
            {
                requestOptions.Page = request.PageNumber.Value;
            }

            PagedResult <DatasetSearchResultItem> searchRequestResult = await _datasetsClient.FindDatasets(requestOptions);

            if (searchRequestResult == null)
            {
                _logger.Error("Find datasets HTTP request failed");
                return(null);
            }

            DatasetSearchResultViewModel result = new DatasetSearchResultViewModel
            {
                TotalResults = searchRequestResult.TotalItems,
                CurrentPage  = searchRequestResult.PageNumber,
            };

            List <SearchFacetViewModel> searchFacets = new List <SearchFacetViewModel>();

            if (searchRequestResult.Facets != null)
            {
                foreach (SearchFacet facet in searchRequestResult.Facets)
                {
                    searchFacets.Add(_mapper.Map <SearchFacetViewModel>(facet));
                }
            }

            result.Facets = searchFacets.AsEnumerable();

            List <DatasetSearchResultItemViewModel> itemResults = new List <DatasetSearchResultItemViewModel>();

            foreach (DatasetSearchResultItem searchResult in searchRequestResult.Items)
            {
                itemResults.Add(_mapper.Map <DatasetSearchResultItemViewModel>(searchResult));
            }

            result.Datasets = itemResults.AsEnumerable();
            if (result.TotalResults == 0)
            {
                result.StartItemNumber = 0;
                result.EndItemNumber   = 0;
            }
            else
            {
                result.StartItemNumber = ((requestOptions.Page - 1) * requestOptions.PageSize) + 1;
                result.EndItemNumber   = result.StartItemNumber + requestOptions.PageSize - 1;
            }

            if (result.EndItemNumber > searchRequestResult.TotalItems)
            {
                result.EndItemNumber = searchRequestResult.TotalItems;
            }

            result.PagerState = new PagerState(requestOptions.Page, searchRequestResult.TotalPages);

            return(result);
        }
Пример #18
0
        public async Task OnGetAsync_GivenDatasetPageModelPerformSearchReturnsResults_ReturnsPageResult()
        {
            //Arrange
            IDatasetSearchService searchService = CreateSearchService();

            DatasetSearchResultViewModel searchResult = new DatasetSearchResultViewModel()
            {
                CurrentPage   = 1,
                EndItemNumber = 0,
                Facets        = new List <SearchFacetViewModel>(),
                PagerState    = new PagerState(1, 1),
                Datasets      = new List <DatasetSearchResultItemViewModel>()
                {
                    new DatasetSearchResultItemViewModel()
                    {
                        Id          = "Search1",
                        Name        = "Search One",
                        Description = "Description",
                        LastUpdated = new DateTime(2018, 3, 5, 12, 34, 52),
                        Status      = "Draft"
                    }
                },
                StartItemNumber = 1,
                TotalResults    = 0
            };

            searchService
            .PerformSearch(Arg.Any <SearchRequestViewModel>())
            .Returns(searchResult);

            ManageDatasetsPageModel DatasetModel = CreateDatasetPageModel(searchService);

            //Act
            IActionResult result = await DatasetModel.OnGetAsync(null, null);

            //Assert
            result
            .Should()
            .BeOfType <PageResult>()
            .Which
            .Should()
            .NotBeNull();

            DatasetModel
            .SearchResults
            .Should()
            .BeEquivalentTo(new DatasetSearchResultViewModel()
            {
                CurrentPage   = 1,
                EndItemNumber = 0,
                Facets        = new List <SearchFacetViewModel>(),
                PagerState    = new PagerState(1, 1),
                Datasets      = new List <DatasetSearchResultItemViewModel>()
                {
                    new DatasetSearchResultItemViewModel()
                    {
                        Id          = "Search1",
                        Name        = "Search One",
                        Description = "Description",
                        LastUpdated = new DateTime(2018, 3, 5, 12, 34, 52),
                        Status      = "Draft"
                    }
                },
                StartItemNumber = 1,
                TotalResults    = 0
            });

            await searchService
            .Received(1)
            .PerformSearch(Arg.Is <SearchRequestViewModel>(
                               c => c.PageNumber == null &&
                               c.SearchTerm == null));
        }
Пример #19
0
        public async Task PerformSearch_FirstSearchResultWithFacets_EnsuresFacetsLoadedCorrectly()
        {
            // Arrange
            IDatasetsApiClient datasetClient = Substitute.For <IDatasetsApiClient>();
            ILogger            logger        = Substitute.For <ILogger>();
            IMapper            mapper        = MappingHelper.CreateFrontEndMapper();

            IDatasetSearchService datasetSearchService = new DatasetSearchService(datasetClient, mapper, logger);

            int numberOfItems = 25;

            IEnumerable <SearchFacet> facets = new[]
            {
                new SearchFacet
                {
                    Name        = "facet 1",
                    FacetValues = new[]
                    {
                        new SearchFacetValue {
                            Name = "f1", Count = 5
                        }
                    }
                },
                new SearchFacet
                {
                    Name        = "facet 2",
                    FacetValues = new[]
                    {
                        new SearchFacetValue {
                            Name = "f2", Count = 11
                        },
                        new SearchFacetValue {
                            Name = "f3", Count = 1
                        }
                    }
                }
            };

            ApiResponse <SearchResults <DatasetIndex> > itemResult = GenerateSearchResult(numberOfItems, facets);

            datasetClient
            .SearchDatasets(Arg.Any <SearchModel>())
            .Returns(itemResult);

            SearchRequestViewModel request = new SearchRequestViewModel();

            // Act
            DatasetSearchResultViewModel results = await datasetSearchService.PerformSearch(request);

            // Assert
            DatasetSearchResultItemViewModel first = results.Datasets.First();

            first.Should().NotBeNull();
            first.Id.Should().Be("10");
            first.LastUpdated.Should().Be(new DateTime(2018, 2, 6, 15, 31, 0));
            first.Status.Should().Be("Unknown");
            first.Name.Should().Be("Dataset 1");

            results.Facets.Count().Should().Be(2);
            results.Facets.First().Name.Should().Be("facet 1");
            results.Facets.First().FacetValues.Count().Should().Be(1);
            results.Facets.First().FacetValues.First().Name.Should().Be("f1");
            results.Facets.First().FacetValues.First().Count.Should().Be(5);
            results.Facets.Last().Name.Should().Be("facet 2");
            results.Facets.Last().FacetValues.Count().Should().Be(2);
            results.Facets.Last().FacetValues.First().Name.Should().Be("f2");
            results.Facets.Last().FacetValues.First().Count.Should().Be(11);
            results.Facets.Last().FacetValues.Last().Name.Should().Be("f3");
            results.Facets.Last().FacetValues.Last().Count.Should().Be(1);
        }
Пример #20
0
        public async Task <DatasetSearchResultViewModel> PerformSearch(SearchRequestViewModel request)
        {
            int pageNumber = Math.Max(1, request.PageNumber.GetValueOrDefault(1));
            int pageSize   = request.PageSize.GetValueOrDefault(50);

            SearchModel requestOptions = new SearchModel
            {
                PageNumber    = pageNumber,
                Top           = pageSize,
                SearchTerm    = request.SearchTerm,
                IncludeFacets = request.IncludeFacets,
                Filters       = request.Filters,
                SearchMode    = SearchMode.All
            };

            ApiResponse <SearchResults <DatasetIndex> > searchRequestResult = await _datasetsClient.SearchDatasets(requestOptions);

            if (searchRequestResult == null)
            {
                _logger.Error("Find datasets HTTP request failed");
                return(null);
            }

            SearchResults <DatasetIndex> searchResults = searchRequestResult.Content;

            DatasetSearchResultViewModel result = new DatasetSearchResultViewModel
            {
                TotalResults = searchResults.TotalCount,
                CurrentPage  = pageNumber,
            };

            List <SearchFacetViewModel> searchFacets = new List <SearchFacetViewModel>();

            if (searchResults.Facets != null)
            {
                foreach (SearchFacet facet in searchResults.Facets)
                {
                    searchFacets.Add(_mapper.Map <SearchFacetViewModel>(facet));
                }
            }

            result.Facets = searchFacets.AsEnumerable();

            List <DatasetSearchResultItemViewModel> itemResults = new List <DatasetSearchResultItemViewModel>();

            foreach (DatasetIndex searchResult in searchResults.Results)
            {
                itemResults.Add(_mapper.Map <DatasetSearchResultItemViewModel>(searchResult));
            }

            result.Datasets = itemResults.AsEnumerable();
            if (result.TotalResults == 0)
            {
                result.StartItemNumber = 0;
                result.EndItemNumber   = 0;
            }
            else
            {
                result.StartItemNumber = ((pageNumber - 1) * pageSize) + 1;
                result.EndItemNumber   = result.StartItemNumber + pageSize - 1;
            }

            if (result.EndItemNumber > result.TotalResults)
            {
                result.EndItemNumber = result.TotalResults;
            }

            result.PagerState = new PagerState(pageNumber, (int)Math.Ceiling(result.TotalResults / (double)pageSize));

            return(result);
        }