async public Task <IActionResult> SearchDatasetVersion(SearchModel searchModel) { if (searchModel == null || searchModel.PageNumber < 1 || searchModel.Top < 1) { _logger.Error("A null or invalid search model was provided for searching datasets"); return(new BadRequestObjectResult("An invalid search model was provided")); } IDictionary <string, string[]> searchModelDictionary = searchModel.Filters; List <Filter> filters = searchModelDictionary.Select(keyValueFilterPair => new Filter(keyValueFilterPair.Key, keyValueFilterPair.Value, false, "eq")).ToList(); FilterHelper filterHelper = new FilterHelper(filters); int skip = (searchModel.PageNumber - 1) * searchModel.Top; SearchParameters searchParameters = new SearchParameters() { Filter = filterHelper.BuildAndFilterQuery(), IncludeTotalResultCount = true, OrderBy = new[] { "version desc" }, Skip = skip, Top = searchModel.Top }; SearchResults <DatasetVersionIndex> searchResults = await _searchVersionRepository.Search(searchModel.SearchTerm, searchParameters); DatasetVersionSearchResults datasetVersionSearchResults = new DatasetVersionSearchResults() { TotalCount = (int)(searchResults?.TotalCount ?? 0), Results = searchResults.Results.Select(ConvertToDatasetVersionSearchResult) }; return(new OkObjectResult(datasetVersionSearchResults)); }
public async Task SearchDatasetVersion_GivenValidParameters_ShouldReturnOkResult() { // Arrange SearchModel model = new SearchModel { PageNumber = 10, Top = 50, IncludeFacets = false }; string blobName = "v1/Pe and sports Data.xlsx"; SearchResults <DatasetVersionIndex> mockSearchResults = new SearchResults <DatasetVersionIndex>(); mockSearchResults.Results = new List <Repositories.Common.Search.SearchResult <DatasetVersionIndex> >() { CreateDatasetVersionResult(new DatasetVersionIndex() { Id = "df073a02-bbc5-44ee-a84b-5931c6e7cf1e-v1", Name = "Pe and sports Data", Version = 1, BlobName = blobName, DefinitionName = "PSG", DatasetId = "df073a02-bbc5-44ee-a84b-5931c6e7cf1e", Description = "150 rows starting", LastUpdatedByName = "James", LastUpdatedDate = new DateTime(2019, 1, 1), FundingStreamId = "DSG", FundingStreamName = "Dedicated schools grant" }) }; ISearchRepository <DatasetVersionIndex> mockDatasetVersionIndexRepository = CreateDatasetVersionSearchRepository(); mockDatasetVersionIndexRepository.Search(Arg.Any <string>(), Arg.Any <SearchParameters>()).Returns(mockSearchResults); DatasetSearchService service = CreateDatasetSearchService(searchRepositoryDatasetVersion: mockDatasetVersionIndexRepository); // Act IActionResult actionResult = await service.SearchDatasetVersion(model); // Assert actionResult.Should().BeOfType <OkObjectResult>(); OkObjectResult objectResult = actionResult as OkObjectResult; DatasetVersionSearchResults datasetVersionSearchResults = objectResult.Value as DatasetVersionSearchResults; datasetVersionSearchResults.Results.Count().Should().Be(1); DatasetVersionSearchResult datasetVersionSearchResult = datasetVersionSearchResults.Results.First(); datasetVersionSearchResult.Id.Should().Be("df073a02-bbc5-44ee-a84b-5931c6e7cf1e-v1"); datasetVersionSearchResult.Name.Should().Be("Pe and sports Data"); datasetVersionSearchResult.Version.Should().Be(1); datasetVersionSearchResult.BlobName.Should().Be(blobName); datasetVersionSearchResult.DefinitionName.Should().Be("PSG"); datasetVersionSearchResult.DatasetId.Should().Be("df073a02-bbc5-44ee-a84b-5931c6e7cf1e"); datasetVersionSearchResult.Description.Should().Be("150 rows starting"); datasetVersionSearchResult.LastUpdatedByName.Should().Be("James"); datasetVersionSearchResult.LastUpdatedDate.Should().Be(new DateTime(2019, 1, 1)); datasetVersionSearchResult.FundingStreamId.Should().Be("DSG"); datasetVersionSearchResult.FundingStreamName.Should().Be("Dedicated schools grant"); }
public async Task SearchDatasetVersion_GivenValidParameters_ShouldReturnOkResult() { // Arrange SearchModel model = new SearchModel { PageNumber = 10, Top = 50, IncludeFacets = false }; string blobName = "v1/Pe and sports Data.xlsx"; 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 <DatasetVersionIndex> mockSearchResults = new SearchResults <DatasetVersionIndex>(); mockSearchResults.Results = new List <Repositories.Common.Search.SearchResult <DatasetVersionIndex> >() { CreateDatasetVersionResult(new DatasetVersionIndex() { Id = "df073a02-bbc5-44ee-a84b-5931c6e7cf1e-v1", Name = "Pe and sports Data", Version = 1, BlobName = blobName, DefinitionName = "PSG", DatasetId = "df073a02-bbc5-44ee-a84b-5931c6e7cf1e", Description = "150 rows starting", LastUpdatedByName = "James", LastUpdatedDate = new DateTime(2019, 1, 1) }) }; ISearchRepository <DatasetVersionIndex> mockDatasetVersionIndexRepository = CreateDatasetVersionSearchRepository(); mockDatasetVersionIndexRepository.Search(Arg.Any <string>(), Arg.Any <SearchParameters>()).Returns(mockSearchResults); DatasetSearchService service = CreateDatasetSearchService(searchRepositoryDatasetVersion: mockDatasetVersionIndexRepository); // Act IActionResult actionResult = await service.SearchDatasetVersion(request); // Assert actionResult.Should().BeOfType <OkObjectResult>(); OkObjectResult objectResult = actionResult as OkObjectResult; DatasetVersionSearchResults datasetVersionSearchResults = objectResult.Value as DatasetVersionSearchResults; datasetVersionSearchResults.Results.Count().Should().Be(1); DatasetVersionSearchResult datasetVersionSearchResult = datasetVersionSearchResults.Results.First(); datasetVersionSearchResult.Id.Should().Be("df073a02-bbc5-44ee-a84b-5931c6e7cf1e-v1"); datasetVersionSearchResult.Name.Should().Be("Pe and sports Data"); datasetVersionSearchResult.Version.Should().Be(1); datasetVersionSearchResult.BlobName.Should().Be(blobName); datasetVersionSearchResult.DefinitionName.Should().Be("PSG"); datasetVersionSearchResult.DatasetId.Should().Be("df073a02-bbc5-44ee-a84b-5931c6e7cf1e"); datasetVersionSearchResult.Description.Should().Be("150 rows starting"); datasetVersionSearchResult.LastUpdatedByName.Should().Be("James"); datasetVersionSearchResult.LastUpdatedDate.Should().Be(new DateTime(2019, 1, 1)); }