Exemplo n.º 1
0
        public async Task <IActionResult> SearchDatasetDefinitions(int pageNumber, bool includeFacets, int pageSize, string searchTerm = "")
        {
            Guard.ArgumentNotNull(pageNumber, nameof(pageNumber));
            Guard.ArgumentNotNull(pageSize, nameof(pageSize));

            var request = new SearchRequestViewModel
            {
                PageNumber    = pageNumber,
                IncludeFacets = includeFacets,
                SearchTerm    = searchTerm,
                PageSize      = pageSize,
                SearchMode    = SearchMode.All
            };

            DatasetDefinitionSearchResultViewModel result = await _datasetDefinitionSearchService.PerformSearch(request);

            if (result != null)
            {
                return(Ok(result));
            }
            else
            {
                return(new StatusCodeResult(500));
            }
        }
Exemplo n.º 2
0
        public async Task PerformSearch_GivenFindDatasetDefinitionsServiceReturnsNotFound_ThenNullReturned()
        {
            // Arrange
            IDatasetsApiClient apiClient = CreateApiClient();
            ILogger            logger    = CreateLogger();
            IMapper            mapper    = CreateMapper();

            DatasetDefinitionSearchService searchService = CreateSearchService(apiClient, mapper, logger);

            PagedResult <DatasetDefinitionSearchResultItem> expectedServiceResult = null;

            apiClient
            .FindDatasetDefinitions(Arg.Any <SearchFilterRequest>())
            .Returns(expectedServiceResult);

            SearchRequestViewModel request = new SearchRequestViewModel();

            // Act
            DatasetDefinitionSearchResultViewModel result = await searchService.PerformSearch(request);

            // Assert
            result
            .Should()
            .BeNull();
        }
Exemplo n.º 3
0
        public async Task WhenSchemasPageIsLoadedAndResultsAreNull_ThenErrorIsReturned()
        {
            // Arrange
            IDatasetDefinitionSearchService datasetDefinitionSearchService = CreateDatasetDefinitionsSearchService();

            DatasetDefinitionSearchResultViewModel searchResult = null;

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

            SchemasPageModel pageModel = CreatePageModel(datasetDefinitionSearchService);

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

            // Assert
            result
            .Should()
            .BeOfType <InternalServerErrorResult>()
            .Which
            .Value
            .Should()
            .Be("Search results returned null from API call");

            await datasetDefinitionSearchService
            .Received(1)
            .PerformSearch(Arg.Any <SearchRequestViewModel>());
        }
Exemplo n.º 4
0
        public async Task <IActionResult> SearchDatasetDefinitions([FromBody] SearchRequestViewModel request)
        {
            Guard.ArgumentNotNull(request, nameof(request));

            DatasetDefinitionSearchResultViewModel result = await _datasetDefinitionSearchService.PerformSearch(request);

            if (result != null)
            {
                return(Ok(result));
            }
            else
            {
                return(new StatusCodeResult(500));
            }
        }
Exemplo n.º 5
0
        public async Task PerformSearch_GivenIsSearchModeAllEnabledFeatureToggleIdTurnedOff_SearchModeIsAny()
        {
            // Arrange
            IDatasetsApiClient apiClient = CreateApiClient();

            DatasetDefinitionSearchService searchService = CreateSearchService(apiClient);

            SearchRequestViewModel request = new SearchRequestViewModel();

            // Act
            DatasetDefinitionSearchResultViewModel result = await searchService.PerformSearch(request);

            // Assert
            await
            apiClient
            .Received(1)
            .FindDatasetDefinitions(Arg.Is <SearchFilterRequest>(m => m.SearchMode == SearchMode.Any));
        }
Exemplo n.º 6
0
        public async Task WhenSchemasPageIsLoadedAndPageNumberIsProvided_ThenPageIsDisplayed()
        {
            // Arrange
            int page = 2;

            IDatasetDefinitionSearchService datasetDefinitionSearchService = CreateDatasetDefinitionsSearchService();

            DatasetDefinitionSearchResultViewModel searchResult = new DatasetDefinitionSearchResultViewModel()
            {
                CurrentPage = page,
            };

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

            SchemasPageModel pageModel = CreatePageModel(datasetDefinitionSearchService);

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

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

            pageModel
            .InitialSearchResults
            .Should()
            .NotBeNullOrWhiteSpace();

            pageModel
            .SearchResults
            .CurrentPage
            .Should()
            .Be(page);

            await datasetDefinitionSearchService
            .Received(1)
            .PerformSearch(Arg.Is <SearchRequestViewModel>(s =>
                                                           s.PageNumber == page &&
                                                           s.SearchTerm == null));
        }
Exemplo n.º 7
0
        public async Task PerformSearch_GivenFirstSearchResultReturnedCorrectly_EnsuresResult()
        {
            // Arrange
            IDatasetsApiClient apiClient = CreateApiClient();
            ILogger            logger    = CreateLogger();
            IMapper            mapper    = MappingHelper.CreateFrontEndMapper();

            DatasetDefinitionSearchService searchService = CreateSearchService(apiClient, mapper, logger);

            int numberOfItems = 25;

            PagedResult <DatasetDefinitionSearchResultItem> itemResult = GeneratePagedResult(numberOfItems);

            apiClient
            .FindDatasetDefinitions(Arg.Any <SearchFilterRequest>())
            .Returns(itemResult);

            SearchRequestViewModel request = new SearchRequestViewModel();

            // Act
            DatasetDefinitionSearchResultViewModel results = await searchService.PerformSearch(request);

            // Assert
            results
            .DatasetDefinitions
            .First()
            .Should()
            .BeEquivalentTo(new DatasetDefinitionSearchResultItemViewModel()
            {
                Id                 = "10",
                Description        = "Description 0",
                LastUpdatedDate    = new DateTimeOffset(2018, 1, 2, 3, 4, 0, TimeSpan.Zero),
                Name               = "ds-1",
                ProviderIdentifier = "Provider 0",
            });

            await apiClient
            .Received(1)
            .FindDatasetDefinitions(Arg.Any <SearchFilterRequest>());
        }
Exemplo n.º 8
0
        public async Task WhenSchemasPageIsLoadedAndSearchTermIsProvided_ThenPageIsDisplayedWithSearchTermSet()
        {
            // Arrange
            IDatasetDefinitionSearchService datasetDefinitionSearchService = CreateDatasetDefinitionsSearchService();

            DatasetDefinitionSearchResultViewModel searchResult = new DatasetDefinitionSearchResultViewModel();

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

            string searchTerm = "testTerm";

            SchemasPageModel pageModel = CreatePageModel(datasetDefinitionSearchService);

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

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

            pageModel
            .InitialSearchResults
            .Should()
            .NotBeNullOrWhiteSpace();

            pageModel
            .SearchTerm
            .Should()
            .Be(searchTerm);

            await datasetDefinitionSearchService
            .Received(1)
            .PerformSearch(Arg.Is <SearchRequestViewModel>(s =>
                                                           s.PageNumber == 1 &&
                                                           s.SearchTerm == searchTerm));
        }
Exemplo n.º 9
0
        public async Task <DatasetDefinitionSearchResultViewModel> 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 <DatasetDefinitionSearchResultItem> searchRequestResult = await _datasetsClient.FindDatasetDefinitions(requestOptions);

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

            DatasetDefinitionSearchResultViewModel result = new DatasetDefinitionSearchResultViewModel
            {
                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 <DatasetDefinitionSearchResultItemViewModel> itemResults = new List <DatasetDefinitionSearchResultItemViewModel>();

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

            result.DatasetDefinitions = 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, 4);

            return(result);
        }
Exemplo n.º 10
0
        public async Task PerformSearch_FirstSearchResultWithFacets_EnsuresFacetsLoadedCorrectly()
        {
            // Arrange
            IDatasetsApiClient apiClient = CreateApiClient();
            ILogger            logger    = CreateLogger();
            IMapper            mapper    = MappingHelper.CreateFrontEndMapper();

            DatasetDefinitionSearchService searchService = CreateSearchService(apiClient, 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
                        }
                    }
                }
            };

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

            apiClient
            .FindDatasetDefinitions(Arg.Any <SearchFilterRequest>())
            .Returns(itemResult);

            SearchRequestViewModel request = new SearchRequestViewModel();

            // Act
            DatasetDefinitionSearchResultViewModel results = await searchService.PerformSearch(request);

            // Assert
            results
            .DatasetDefinitions
            .First()
            .Should()
            .BeEquivalentTo(
                new DatasetDefinitionSearchResultItemViewModel()
            {
                Id                 = "10",
                Description        = "Description 0",
                LastUpdatedDate    = new DateTimeOffset(2018, 1, 2, 3, 4, 0, TimeSpan.Zero),
                Name               = "ds-1",
                ProviderIdentifier = "Provider 0",
            }
                );

            results
            .Facets
            .Should()
            .BeEquivalentTo(new List <SearchFacetViewModel>()
            {
                new SearchFacetViewModel
                {
                    Name        = "facet 1",
                    FacetValues = new[]
                    {
                        new SearchFacetValueViewModel {
                            Name = "f1", Count = 5
                        }
                    }
                },
                new SearchFacetViewModel
                {
                    Name        = "facet 2",
                    FacetValues = new[]
                    {
                        new SearchFacetValueViewModel {
                            Name = "f2", Count = 11
                        },
                        new SearchFacetValueViewModel {
                            Name = "f3", Count = 1
                        }
                    }
                }
            });

            await apiClient
            .Received(1)
            .FindDatasetDefinitions(Arg.Any <SearchFilterRequest>());
        }
        public async Task <DatasetDefinitionSearchResultViewModel> 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    = request.SearchMode.AsMatchingEnum <SearchMode>()
            };

            ApiResponse <SearchResults <DatasetDefinitionIndex> > searchRequestResult = await _datasetsClient.SearchDatasetDefinitions(requestOptions);

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

            SearchResults <DatasetDefinitionIndex> searchResults = searchRequestResult.Content;

            DatasetDefinitionSearchResultViewModel result = new DatasetDefinitionSearchResultViewModel
            {
                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 <DatasetDefinitionSearchResultItemViewModel> itemResults = new List <DatasetDefinitionSearchResultItemViewModel>();

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

            result.DatasetDefinitions = 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 > searchResults.TotalCount)
            {
                result.EndItemNumber = searchResults.TotalCount;
            }

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

            return(result);
        }
Exemplo n.º 12
0
        public async Task WhenSchemasPageIsLoadedAndDatasetDefinitionsExist_ThenPageIsDisplayed()
        {
            // Arrange
            IDatasetDefinitionSearchService datasetDefinitionSearchService = CreateDatasetDefinitionsSearchService();

            DatasetDefinitionSearchResultViewModel searchResult = new DatasetDefinitionSearchResultViewModel()
            {
                CurrentPage        = 1,
                DatasetDefinitions = new List <DatasetDefinitionSearchResultItemViewModel>()
                {
                    new DatasetDefinitionSearchResultItemViewModel()
                    {
                        Id                 = "1",
                        Description        = "One Description",
                        LastUpdatedDate    = new DateTimeOffset(2018, 1, 5, 2, 55, 0, TimeSpan.Zero),
                        Name               = "Search one",
                        ProviderIdentifier = "PRV1",
                    },
                    new DatasetDefinitionSearchResultItemViewModel()
                    {
                        Id                 = "2",
                        Description        = "Two Description",
                        LastUpdatedDate    = new DateTimeOffset(2018, 1, 5, 2, 2, 0, TimeSpan.Zero),
                        Name               = "Search two",
                        ProviderIdentifier = "PRV2",
                    },
                    new DatasetDefinitionSearchResultItemViewModel()
                    {
                        Id                 = "3",
                        Description        = "Three Description",
                        LastUpdatedDate    = new DateTimeOffset(2018, 1, 5, 2, 3, 0, TimeSpan.Zero),
                        Name               = "Search three",
                        ProviderIdentifier = "PRV3",
                    }
                },
                EndItemNumber   = 3,
                Facets          = new List <SearchFacetViewModel>(),
                PagerState      = new PagerState(1, 1),
                StartItemNumber = 1,
                TotalResults    = 3,
            };

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

            SchemasPageModel pageModel = CreatePageModel(datasetDefinitionSearchService);

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

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

            pageModel
            .InitialSearchResults
            .Should()
            .NotBeNullOrWhiteSpace();

            pageModel
            .SearchTerm
            .Should()
            .BeNullOrWhiteSpace();

            await datasetDefinitionSearchService
            .Received(1)
            .PerformSearch(Arg.Is <SearchRequestViewModel>(s =>
                                                           s.PageNumber == 1 &&
                                                           s.SearchTerm == null));

            pageModel
            .SearchResults
            .Should()
            .BeEquivalentTo(new DatasetDefinitionSearchResultViewModel()
            {
                CurrentPage        = 1,
                DatasetDefinitions = new List <DatasetDefinitionSearchResultItemViewModel>()
                {
                    new DatasetDefinitionSearchResultItemViewModel()
                    {
                        Id                 = "1",
                        Description        = "One Description",
                        LastUpdatedDate    = new DateTimeOffset(2018, 1, 5, 2, 55, 0, TimeSpan.Zero),
                        Name               = "Search one",
                        ProviderIdentifier = "PRV1",
                    },
                    new DatasetDefinitionSearchResultItemViewModel()
                    {
                        Id                 = "2",
                        Description        = "Two Description",
                        LastUpdatedDate    = new DateTimeOffset(2018, 1, 5, 2, 2, 0, TimeSpan.Zero),
                        Name               = "Search two",
                        ProviderIdentifier = "PRV2",
                    },
                    new DatasetDefinitionSearchResultItemViewModel()
                    {
                        Id                 = "3",
                        Description        = "Three Description",
                        LastUpdatedDate    = new DateTimeOffset(2018, 1, 5, 2, 3, 0, TimeSpan.Zero),
                        Name               = "Search three",
                        ProviderIdentifier = "PRV3",
                    }
                },
                EndItemNumber   = 3,
                Facets          = new List <SearchFacetViewModel>(),
                PagerState      = new PagerState(1, 1),
                StartItemNumber = 1,
                TotalResults    = 3,
            });
        }