public async Task SearchResult_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 <ProviderIndex> searchRepository = CreateSearchRepository(); ResultsSearchService service = CreateResultsSearchService(logger: logger, searchRepository: searchRepository); //Act IActionResult result = await service.SearchProviders(request); //Assert logger .Received(1) .Error("A null or invalid search model was provided for searching providers"); result .Should() .BeOfType <BadRequestObjectResult>(); }
public async Task SearchResult_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 <ProviderIndex> SearchProviders = new SearchResults <ProviderIndex> { Facets = new List <Facet> { new Facet { Name = "authority" } } }; ILogger logger = CreateLogger(); ISearchRepository <ProviderIndex> searchRepository = CreateSearchRepository(); searchRepository .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()) .Returns(SearchProviders); ResultsSearchService service = CreateResultsSearchService(logger: logger, searchRepository: searchRepository); //Act IActionResult result = await service.SearchProviders(request); //Assert result .Should() .BeOfType <OkObjectResult>(); await searchRepository .Received(4) .Search(model.SearchTerm, Arg.Any <SearchParameters>()); }
public async Task SearchResult_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 <ProviderIndex> SearchProviders = new SearchResults <ProviderIndex>(); ILogger logger = CreateLogger(); ISearchRepository <ProviderIndex> searchRepository = CreateSearchRepository(); searchRepository .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()) .Returns(SearchProviders); ResultsSearchService service = CreateResultsSearchService(logger: logger, searchRepository: searchRepository); //Act IActionResult result = await service.SearchProviders(request); //Assert result .Should() .BeOfType <OkObjectResult>(); await searchRepository .Received(4) .Search(model.SearchTerm, Arg.Any <SearchParameters>()); }
public async Task SearchResult_GivenValidModelAndPageNumber10_CallsSearchWithCorrectSkipValue() { //Arrange const int skipValue = 450; SearchModel model = new SearchModel { PageNumber = 10, 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 <ProviderIndex> SearchProviders = new SearchResults <ProviderIndex>(); ILogger logger = CreateLogger(); ISearchRepository <ProviderIndex> searchRepository = CreateSearchRepository(); searchRepository .Search(Arg.Any <string>(), Arg.Any <SearchParameters>()) .Returns(SearchProviders); ResultsSearchService service = CreateResultsSearchService(logger: logger, searchRepository: searchRepository); //Act IActionResult result = await service.SearchProviders(request); //Assert result .Should() .BeOfType <OkObjectResult>(); await searchRepository .Received(1) .Search(Arg.Any <string>(), Arg.Is <SearchParameters>(m => m.Skip == skipValue)); }
public async Task SearchResult_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 <ProviderIndex> searchRepository = CreateSearchRepository(); searchRepository .When(s => s.Search(Arg.Any <string>(), Arg.Any <SearchParameters>())) .Do(x => { throw new FailedToQuerySearchException("Test Message", null); }); ResultsSearchService service = CreateResultsSearchService(logger: logger, searchRepository: searchRepository); //Act IActionResult result = await service.SearchProviders(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 SearchResult_GivenNullSearchModel_LogsAndCreatesDefaultSearchModel() { //Arrange HttpRequest request = Substitute.For <HttpRequest>(); ILogger logger = CreateLogger(); ISearchRepository <ProviderIndex> searchRepository = CreateSearchRepository(); ResultsSearchService service = CreateResultsSearchService(logger: logger, searchRepository: searchRepository); //Act IActionResult result = await service.SearchProviders(request); //Assert logger .Received(1) .Error("A null or invalid search model was provided for searching providers"); result .Should() .BeOfType <BadRequestObjectResult>(); }