예제 #1
0
        public async Task SearchTestScenarioResults_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 <TestScenarioResultIndex> searchRepository = CreateSearchRepository();

            TestResultsSearchService service = CreateTestResultsSearchService(logger: logger, serachRepository: searchRepository);

            //Act
            IActionResult result = await service.SearchTestScenarioResults(request);

            //Assert
            logger
            .Received(1)
            .Error("A null or invalid search model was provided for searching calculations");

            result
            .Should()
            .BeOfType <BadRequestObjectResult>();
        }
예제 #2
0
        public async Task SearchTestScenarioResults_GivenValidModelAndDoesntIncludeGettingFacets_CallsSearchOnce()
        {
            //Arrange
            SearchModel model = new SearchModel
            {
                PageNumber = 1,
                Top        = 50
            };

            SearchResults <TestScenarioResultIndex> searchResults = new SearchResults <TestScenarioResultIndex>();

            ILogger logger = CreateLogger();

            ISearchRepository <TestScenarioResultIndex> searchRepository = CreateSearchRepository();

            searchRepository
            .Search(Arg.Any <string>(), Arg.Any <SearchParameters>())
            .Returns(searchResults);

            TestResultsSearchService service = CreateTestResultsSearchService(logger: logger, serachRepository: searchRepository);

            //Act
            IActionResult result = await service.SearchTestScenarioResults(model);

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

            await
            searchRepository
            .Received(1)
            .Search(Arg.Any <string>(), Arg.Any <SearchParameters>());
        }
예제 #3
0
        public async Task SearchTestScenarioResults_SearchRequestFails_ThenBadRequestReturned()
        {
            //Arrange
            SearchModel model = new SearchModel()
            {
                SearchTerm    = "SearchTermTest",
                PageNumber    = 1,
                IncludeFacets = false,
                Top           = 50,
            };

            ILogger logger = CreateLogger();

            ISearchRepository <TestScenarioResultIndex> searchRepository = CreateSearchRepository();

            searchRepository
            .When(s => s.Search(Arg.Any <string>(), Arg.Any <SearchParameters>()))
            .Do(x => { throw new FailedToQuerySearchException("Test Message", null); });


            TestResultsSearchService service = CreateTestResultsSearchService(logger: logger, serachRepository: searchRepository);

            //Act
            IActionResult result = await service.SearchTestScenarioResults(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);
        }
예제 #4
0
        public async Task SearchTestScenarioResults_GivenPageTopIsZero_LogsAndReturnsBadRequest()
        {
            //Arrange
            SearchModel model = new SearchModel
            {
                PageNumber = 1,
                Top        = 0
            };

            ILogger logger = CreateLogger();

            ISearchRepository <TestScenarioResultIndex> searchRepository = CreateSearchRepository();

            TestResultsSearchService service = CreateTestResultsSearchService(logger: logger, serachRepository: searchRepository);

            //Act
            IActionResult result = await service.SearchTestScenarioResults(model);

            //Assert
            logger
            .Received(1)
            .Error("A null or invalid search model was provided for searching calculations");

            result
            .Should()
            .BeOfType <BadRequestObjectResult>();
        }
예제 #5
0
        public async Task SearchTestScenarioResults_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 <TestScenarioResultIndex> searchResults = new SearchResults <TestScenarioResultIndex>
            {
                Facets = new List <Facet>
                {
                    new Facet
                    {
                        Name = "testResult"
                    }
                }
            };

            ILogger logger = CreateLogger();

            ISearchRepository <TestScenarioResultIndex> searchRepository = CreateSearchRepository();

            searchRepository
            .Search(Arg.Any <string>(), Arg.Any <SearchParameters>())
            .Returns(searchResults);

            TestResultsSearchService service = CreateTestResultsSearchService(logger: logger, serachRepository: searchRepository);

            //Act
            IActionResult result = await service.SearchTestScenarioResults(request);

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

            await
            searchRepository
            .Received(11)
            .Search(Arg.Any <string>(), Arg.Any <SearchParameters>());
        }
예제 #6
0
        public async Task SearchTestScenarioResults_GivenValidModelWithMultipleFilterValuesWhichIsMultiValueFacet_ThenSearchIsPerformed()
        {
            //Arrange
            SearchModel model = new SearchModel
            {
                PageNumber    = 1,
                Top           = 50,
                IncludeFacets = true,
                Filters       = new Dictionary <string, string[]>()
                {
                    { "providerId", new string [] { "test", "test2" } }
                },
                SearchTerm   = "testTerm",
                SearchFields = new[] { "test" }
            };

            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 <TestScenarioResultIndex> searchResults = new SearchResults <TestScenarioResultIndex>();

            ILogger logger = CreateLogger();

            ISearchRepository <TestScenarioResultIndex> searchRepository = CreateSearchRepository();

            searchRepository
            .Search(Arg.Any <string>(), Arg.Any <SearchParameters>())
            .Returns(searchResults);

            TestResultsSearchService service = CreateTestResultsSearchService(logger: logger, serachRepository: searchRepository);

            //Act
            IActionResult result = await service.SearchTestScenarioResults(request);

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

            await
            searchRepository
            .Received(10)
            .Search(model.SearchTerm, Arg.Is <SearchParameters>(c =>
                                                                model.Filters.Keys.All(f => c.Filter.Contains(f)) &&
                                                                !string.IsNullOrWhiteSpace(c.Filter)
                                                                ));
        }
예제 #7
0
        public async Task SearchTestScenarioResults_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 <TestScenarioResultIndex> searchRepository = CreateSearchRepository();

            searchRepository
            .When(s => s.Search(Arg.Any <string>(), Arg.Any <SearchParameters>()))
            .Do(x => { throw new FailedToQuerySearchException("Test Message", null); });


            TestResultsSearchService service = CreateTestResultsSearchService(logger: logger, serachRepository: searchRepository);

            //Act
            IActionResult result = await service.SearchTestScenarioResults(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);
        }
예제 #8
0
        public async Task SearchTestScenarioResults_GivenValidModel_CallsSearchWithCorrectSkipValue()
        {
            //Arrange
            SearchModel model = new SearchModel
            {
                PageNumber    = 10,
                Top           = 50,
                IncludeFacets = true
            };

            SearchResults <TestScenarioResultIndex> searchResults = new SearchResults <TestScenarioResultIndex>
            {
                Facets = new List <Facet>
                {
                    new Facet
                    {
                        Name = "testResult"
                    }
                }
            };

            ILogger logger = CreateLogger();

            ISearchRepository <TestScenarioResultIndex> searchRepository = CreateSearchRepository();

            searchRepository
            .Search(Arg.Any <string>(), Arg.Any <SearchParameters>())
            .Returns(searchResults);

            TestResultsSearchService service = CreateTestResultsSearchService(logger: logger, serachRepository: searchRepository);

            //Act
            IActionResult result = await service.SearchTestScenarioResults(model);

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

            await
            searchRepository
            .Received(11)
            .Search(Arg.Any <string>(), Arg.Any <SearchParameters>());
        }
예제 #9
0
        public async Task SearchTestScenarioResults_GivenValidModelWithNullFilterWithMultipleOfSameFilter_ThenSearchIsPerformed()
        {
            //Arrange
            SearchModel model = new SearchModel
            {
                PageNumber    = 1,
                Top           = 50,
                IncludeFacets = true,
                Filters       = new Dictionary <string, string[]>()
                {
                    { "providerId", new string [] { "test", "" } }
                },
                SearchTerm = "testTerm",
            };

            SearchResults <TestScenarioResultIndex> searchResults = new SearchResults <TestScenarioResultIndex>();

            ILogger logger = CreateLogger();

            ISearchRepository <TestScenarioResultIndex> searchRepository = CreateSearchRepository();

            searchRepository
            .Search(Arg.Any <string>(), Arg.Any <SearchParameters>())
            .Returns(searchResults);

            TestResultsSearchService service = CreateTestResultsSearchService(logger: logger, serachRepository: searchRepository);

            //Act
            IActionResult result = await service.SearchTestScenarioResults(model);

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

            await
            searchRepository
            .Received(10)
            .Search(model.SearchTerm, Arg.Is <SearchParameters>(c =>
                                                                model.Filters.Keys.All(f => c.Filter.Contains(f)) &&
                                                                !string.IsNullOrWhiteSpace(c.Filter)
                                                                ));
        }
예제 #10
0
        public async Task SearchTestScenarioResults_GivenNullSearchModel_LogsAndCreatesDefaultSearcModel()
        {
            //Arrange
            ILogger logger = CreateLogger();

            ISearchRepository <TestScenarioResultIndex> searchRepository = CreateSearchRepository();

            TestResultsSearchService service = CreateTestResultsSearchService(logger: logger, serachRepository: searchRepository);

            //Act
            IActionResult result = await service.SearchTestScenarioResults(null);

            //Assert
            logger
            .Received(1)
            .Error("A null or invalid search model was provided for searching calculations");

            result
            .Should()
            .BeOfType <BadRequestObjectResult>();
        }
예제 #11
0
        public async Task SearchTestScenarioResults_GivenValidModelAndPageNumber10_CallsSearchWithCorrectSkipValue()
        {
            //Arrange
            const int skipValue = 450;

            SearchModel model = new SearchModel
            {
                PageNumber = 10,
                Top        = 50
            };

            SearchResults <TestScenarioResultIndex> searchResults = new SearchResults <TestScenarioResultIndex>();

            ILogger logger = CreateLogger();

            ISearchRepository <TestScenarioResultIndex> searchRepository = CreateSearchRepository();

            searchRepository
            .Search(Arg.Any <string>(), Arg.Any <SearchParameters>())
            .Returns(searchResults);

            TestResultsSearchService service = CreateTestResultsSearchService(logger: logger, serachRepository: searchRepository);

            //Act
            IActionResult result = await service.SearchTestScenarioResults(model);

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

            await
            searchRepository
            .Received(1)
            .Search(Arg.Any <string>(), Arg.Is <SearchParameters>(m => m.Skip == skipValue));
        }
예제 #12
0
        public async Task SearchTestScenarioResults_GivenValidModelWithNullFilters_ThenSearchIsStillPerformed()
        {
            //Arrange
            SearchModel model = new SearchModel
            {
                PageNumber    = 1,
                Top           = 50,
                IncludeFacets = true,
                Filters       = null,
            };

            SearchResults <TestScenarioResultIndex> searchResults = new SearchResults <TestScenarioResultIndex>();

            ILogger logger = CreateLogger();

            ISearchRepository <TestScenarioResultIndex> searchRepository = CreateSearchRepository();

            searchRepository
            .Search(Arg.Any <string>(), Arg.Any <SearchParameters>())
            .Returns(searchResults);

            TestResultsSearchService service = CreateTestResultsSearchService(logger: logger, serachRepository: searchRepository);

            //Act
            IActionResult result = await service.SearchTestScenarioResults(model);

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

            await
            searchRepository
            .Received(11)
            .Search(Arg.Any <string>(), Arg.Any <SearchParameters>());
        }