public async Task SearchDataset_GivenPageTopIsZero_LogsAndReturnsBadRequest() { //Arrange SearchModel model = new SearchModel { PageNumber = 1, Top = 0 }; ILogger logger = CreateLogger(); ISearchRepository <DatasetIndex> searchRepository = CreateSearchRepository(); DatasetSearchService service = CreateDatasetSearchService(logger: logger, serachRepository: searchRepository); //Act IActionResult result = await service.SearchDatasets(model); //Assert logger .Received(1) .Error("A null or invalid search model was provided for searching datasets"); result .Should() .BeOfType <BadRequestObjectResult>(); }
public async Task SearchDataset_GivenPageNumberIsZero_LogsAndReturnsBadRequest() { //Arrange SearchModel model = new SearchModel(); 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); ILogger logger = CreateLogger(); ISearchRepository <DatasetIndex> searchRepository = CreateSearchRepository(); DatasetSearchService service = CreateDatasetSearchService(logger: logger, serachRepository: searchRepository); //Act IActionResult result = await service.SearchDatasets(request); //Assert logger .Received(1) .Error("A null or invalid search model was provided for searching datasets"); result .Should() .BeOfType <BadRequestObjectResult>(); }
public async Task SearchDataset_GivenValidModelAndDoesntIncludeGettingFacets_CallsSearchOnce() { //Arrange SearchModel model = new SearchModel { PageNumber = 1, Top = 50 }; SearchResults <DatasetIndex> searchResults = new SearchResults <DatasetIndex>(); ILogger logger = CreateLogger(); ISearchRepository <DatasetIndex> searchRepository = CreateSearchRepository(); searchRepository .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()) .Returns(searchResults); DatasetSearchService service = CreateDatasetSearchService(logger: logger, serachRepository: searchRepository); //Act IActionResult result = await service.SearchDatasets(model); //Assert result .Should() .BeOfType <OkObjectResult>(); await searchRepository .Received(1) .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()); }
public async Task SearchDatasetVersion_GivenInvalidParameters_ShouldReturnBadRequestResult() { // Arrange SearchModel model = new SearchModel { PageNumber = 0, Top = 0, IncludeFacets = false }; SearchResults <DatasetVersionIndex> mockSearchResults = new SearchResults <DatasetVersionIndex>(); 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 <BadRequestObjectResult>() .Which .Value .Should().Be("An invalid search model was provided"); }
public async Task SearchDataset_SearchRequestFails_ThenBadRequestReturned() { //Arrange SearchModel model = new SearchModel() { SearchTerm = "SearchTermTest", PageNumber = 1, IncludeFacets = false, Top = 50, }; ILogger logger = CreateLogger(); ISearchRepository <DatasetIndex> searchRepository = CreateSearchRepository(); searchRepository .When(s => s.Search(Arg.Any <string>(), Arg.Any <SearchParameters>())) .Do(x => { throw new FailedToQuerySearchException("Test Message", null); }); DatasetSearchService service = CreateDatasetSearchService(logger: logger, serachRepository: searchRepository); //Act IActionResult result = await service.SearchDatasets(model); //Assert logger .Received(1) .Error(Arg.Any <FailedToQuerySearchException>(), "Failed to query search with term: SearchTermTest"); result .Should() .BeOfType <StatusCodeResult>() .Which.StatusCode.Should().Be(500); }
public DatasetsController( DatasetSearchService datasetSearch, DatasetStorageService datasetStorage, ValidationService validationService) { ValidationService = validationService; DatasetSearch = datasetSearch; DatasetStorage = datasetStorage; }
public async Task SearchDataset_GivenValidModel_CallsSearchWithCorrectSkipValue() { //Arrange SearchModel model = new SearchModel { PageNumber = 10, Top = 50, IncludeFacets = true }; 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 <DatasetIndex> searchResults = new SearchResults <DatasetIndex> { Facets = new List <Facet> { new Facet { Name = "specificationNames" } } }; ILogger logger = CreateLogger(); ISearchRepository <DatasetIndex> searchRepository = CreateSearchRepository(); searchRepository .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()) .Returns(searchResults); DatasetSearchService service = CreateDatasetSearchService(logger: logger, serachRepository: searchRepository); //Act IActionResult result = await service.SearchDatasets(request); //Assert result .Should() .BeOfType <OkObjectResult>(); await searchRepository .Received(5) .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()); }
public async Task SearchDataset_GivenValidModelWithNullFilterWithMultipleOfSameFilter_ThenSearchIsPerformed() { //Arrange SearchModel model = new SearchModel { PageNumber = 1, Top = 50, IncludeFacets = true, Filters = new Dictionary <string, string[]>() { { "status", new string [] { "test", "" } } }, SearchTerm = "testTerm", }; 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 <DatasetIndex> searchResults = new SearchResults <DatasetIndex>(); ILogger logger = CreateLogger(); ISearchRepository <DatasetIndex> searchRepository = CreateSearchRepository(); searchRepository .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()) .Returns(searchResults); DatasetSearchService service = CreateDatasetSearchService(logger: logger, serachRepository: searchRepository); //Act IActionResult result = await service.SearchDatasets(request); //Assert result .Should() .BeOfType <OkObjectResult>(); await searchRepository .Received(4) .Search(model.SearchTerm, Arg.Is <SearchParameters>(c => model.Filters.Keys.All(f => c.Filter.Contains(f)) && !string.IsNullOrWhiteSpace(c.Filter) )); }
public async Task SearchDataset_GivenValidModelAndPageNumber2_CallsSearchWithCorrectSkipValue() { //Arrange const int skipValue = 50; SearchModel model = new SearchModel { PageNumber = 2, Top = 50 }; 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 <DatasetIndex> searchResults = new SearchResults <DatasetIndex>(); ILogger logger = CreateLogger(); ISearchRepository <DatasetIndex> searchRepository = CreateSearchRepository(); searchRepository .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()) .Returns(searchResults); DatasetSearchService service = CreateDatasetSearchService(logger: logger, serachRepository: searchRepository); //Act IActionResult result = await service.SearchDatasets(request); //Assert result .Should() .BeOfType <OkObjectResult>(); await searchRepository .Received(1) .Search(Arg.Any <string>(), Arg.Is <SearchParameters>(m => m.Skip == skipValue)); }
public async Task SearchDataset_GivenValidModelWithNullFilters_ThenSearchIsStillPerformed() { //Arrange SearchModel model = new SearchModel { PageNumber = 1, Top = 50, IncludeFacets = true, Filters = null, }; 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 <DatasetIndex> searchResults = new SearchResults <DatasetIndex>(); ILogger logger = CreateLogger(); ISearchRepository <DatasetIndex> searchRepository = CreateSearchRepository(); searchRepository .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()) .Returns(searchResults); DatasetSearchService service = CreateDatasetSearchService(logger: logger, serachRepository: searchRepository); //Act IActionResult result = await service.SearchDatasets(request); //Assert result .Should() .BeOfType <OkObjectResult>(); await searchRepository .Received(5) .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()); }
public ImportTask( ApplicationJobs applicationJobs, IOptions <StorageConfiguration> storageConfig, DatasetStorageService datasetStorage, DatasetEditStorageService datasetEditStorage, UserDataStorageService userDataStorage, DatasetSearchService datasetSearch, FileSearchService fileSearch) { ApplicationJobs = applicationJobs; StorageConfig = storageConfig.Value; DatasetStorage = datasetStorage; DatasetEditStorage = datasetEditStorage; UserDataStorage = userDataStorage; DatasetSearch = datasetSearch; FileSearch = fileSearch; }
public async Task SearchDataset_SearchRequestFails_ThenBadRequestReturned() { //Arrange SearchModel model = new SearchModel() { SearchTerm = "SearchTermTest", PageNumber = 1, IncludeFacets = false, Top = 50, }; 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); ILogger logger = CreateLogger(); ISearchRepository <DatasetIndex> searchRepository = CreateSearchRepository(); searchRepository .When(s => s.Search(Arg.Any <string>(), Arg.Any <SearchParameters>())) .Do(x => { throw new FailedToQuerySearchException("Test Message", null); }); DatasetSearchService service = CreateDatasetSearchService(logger: logger, serachRepository: searchRepository); //Act IActionResult result = await service.SearchDatasets(request); //Assert logger .Received(1) .Error(Arg.Any <FailedToQuerySearchException>(), "Failed to query search with term: SearchTermTest"); result .Should() .BeOfType <StatusCodeResult>() .Which.StatusCode.Should().Be(500); }
public async Task SearchDataset_GivenValidModel_CallsSearchWithCorrectSkipValue() { //Arrange SearchModel model = new SearchModel { PageNumber = 10, Top = 50, IncludeFacets = true }; SearchResults <DatasetIndex> searchResults = new SearchResults <DatasetIndex> { Facets = new List <Facet> { new Facet { Name = "specificationNames" } } }; ILogger logger = CreateLogger(); ISearchRepository <DatasetIndex> searchRepository = CreateSearchRepository(); searchRepository .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()) .Returns(searchResults); DatasetSearchService service = CreateDatasetSearchService(logger: logger, serachRepository: searchRepository); //Act IActionResult result = await service.SearchDatasets(model); //Assert result .Should() .BeOfType <OkObjectResult>(); await searchRepository .Received(7) .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()); }
public async Task SearchDataset_GivenValidModelWithNullFilterWithMultipleOfSameFilter_ThenSearchIsPerformed() { //Arrange SearchModel model = new SearchModel { PageNumber = 1, Top = 50, IncludeFacets = true, Filters = new Dictionary <string, string[]>() { { "status", new string [] { "test", "" } } }, SearchTerm = "testTerm", }; SearchResults <DatasetIndex> searchResults = new SearchResults <DatasetIndex>(); ILogger logger = CreateLogger(); ISearchRepository <DatasetIndex> searchRepository = CreateSearchRepository(); searchRepository .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()) .Returns(searchResults); DatasetSearchService service = CreateDatasetSearchService(logger: logger, serachRepository: searchRepository); //Act IActionResult result = await service.SearchDatasets(model); //Assert result .Should() .BeOfType <OkObjectResult>(); await searchRepository .Received(6) .Search(model.SearchTerm, Arg.Is <SearchParameters>(c => model.Filters.Keys.All(f => c.Filter.Contains(f)) && !string.IsNullOrWhiteSpace(c.Filter) )); }
public async Task SearchDataset_GivenNullSearchModel_LogsAndCreatesDefaultSearchModel() { //Arrange ILogger logger = CreateLogger(); ISearchRepository <DatasetIndex> searchRepository = CreateSearchRepository(); DatasetSearchService service = CreateDatasetSearchService(logger: logger, serachRepository: searchRepository); //Act IActionResult result = await service.SearchDatasets(null); //Assert logger .Received(1) .Error("A null or invalid search model was provided for searching datasets"); result .Should() .BeOfType <BadRequestObjectResult>(); }
public async Task SearchDatasetVersion_GivenInvalidParameters_ShouldReturnBadRequestResult() { // Arrange SearchModel model = new SearchModel { PageNumber = 0, Top = 0, IncludeFacets = false }; 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>(); 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 <BadRequestObjectResult>() .Which .Value .Should().Be("An invalid search model was provided"); }
public async Task SearchDataset_GivenValidModelWithNullFilters_ThenSearchIsStillPerformed() { //Arrange SearchModel model = new SearchModel { PageNumber = 1, Top = 50, IncludeFacets = true, Filters = null, }; SearchResults <DatasetIndex> searchResults = new SearchResults <DatasetIndex>(); ILogger logger = CreateLogger(); ISearchRepository <DatasetIndex> searchRepository = CreateSearchRepository(); searchRepository .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()) .Returns(searchResults); DatasetSearchService service = CreateDatasetSearchService(logger: logger, serachRepository: searchRepository); //Act IActionResult result = await service.SearchDatasets(model); //Assert result .Should() .BeOfType <OkObjectResult>(); await searchRepository .Received(7) .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()); }
public async Task SearchDataset_GivenValidModelAndPageNumber10_CallsSearchWithCorrectSkipValue() { //Arrange const int skipValue = 450; SearchModel model = new SearchModel { PageNumber = 10, Top = 50 }; SearchResults <DatasetIndex> searchResults = new SearchResults <DatasetIndex>(); ILogger logger = CreateLogger(); ISearchRepository <DatasetIndex> searchRepository = CreateSearchRepository(); searchRepository .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()) .Returns(searchResults); DatasetSearchService service = CreateDatasetSearchService(logger: logger, serachRepository: searchRepository); //Act IActionResult result = await service.SearchDatasets(model); //Assert result .Should() .BeOfType <OkObjectResult>(); await searchRepository .Received(1) .Search(Arg.Any <string>(), Arg.Is <SearchParameters>(m => m.Skip == skipValue)); }
public DomainsController(DatasetStorageService datasetStorage, DatasetSearchService datasetSearch) { DatasetStorage = datasetStorage; DatasetSearch = datasetSearch; }
/// <summary> /// Initializes a new instance of the <see cref="DatasetsController" /> class. /// </summary> /// <param name="index">The search indexes.</param> /// <param name="storage">The storage repository.</param> public DatasetsController(DatasetSearchService index, DatasetStorageService storage, CurrentUserService currentUserService) { this.DataSearchService = index; this.DatasetStorageService = storage; this.CurrentUserService = currentUserService; }
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)); }
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"); }
/// <summary> /// Initializes a new instance of the <see cref="FileTypesController"/> class. /// </summary> /// <param name="index">The index service.</param> /// <param name="storage">The storage service.</param> public FileTypesController(DatasetSearchService index) { this.Index = index; }
/// <summary> /// Initializes a new instance of the <see cref="TagsController"/> class. /// </summary> /// <param name="index">The index service.</param> /// <param name="storage">The storage service.</param> public TagsController(DatasetSearchService index, DatasetStorageService storage) { this.Index = index; this.Storage = storage; }