Beispiel #1
0
        public async Task SearchTestScenarioResults_GivenTopIsZero_LogsAndReturnsBadRequest()
        {
            //Arrange
            SearchModel model = new SearchModel
            {
                PageNumber = 1,
                Top        = 0
            };
            ILogger logger = CreateLogger();

            ISearchRepository <ProviderCalculationResultsIndex> searchRepository = CreateSearchRepository();

            ProviderCalculationResultsSearchService service = CreateTestResultsSearchService(logger, searchRepository);

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

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

            result
            .Should()
            .BeOfType <BadRequestObjectResult>();
        }
        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 <ProviderCalculationResultsIndex> searchRepository = CreateSearchRepository();

            ProviderCalculationResultsSearchService service = CreateTestResultsSearchService(logger, searchRepository);

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

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

            result
            .Should()
            .BeOfType <BadRequestObjectResult>();
        }
Beispiel #3
0
        public async Task SearchTestScenarioResults_GivenValidModelWithOneFilter_ThenSearchIsPerformed(
            bool useCalculationId, string idFilterName, params string[] searchFields)
        {
            string[] expectedFacetSearchFields = searchFields.IsNullOrEmpty()
                ? new[]
            {
                "providerName"
            }
                : searchFields;

            //Arrange
            SearchModel model = new SearchModel
            {
                PageNumber    = 1,
                Top           = 50,
                IncludeFacets = true,
                SearchFields  = searchFields ?? new string[0],
                Filters       = new Dictionary <string, string[]>()
                {
                    { idFilterName, new[] { "test" } }
                },
                SearchTerm = "testTerm",
            };

            ILogger logger = CreateLogger();

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

            ISearchRepository <ProviderCalculationResultsIndex> searchRepository = CreateSearchRepository();

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

            ProviderCalculationResultsSearchService service = CreateTestResultsSearchService(logger, searchRepository);

            //Act
            IActionResult result = await service.SearchCalculationProviderResults(model, useCalculationId);

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

            int expectedFacetsSearchCount = expectedFacetSearchFields.SequenceEqual(searchFields ?? ArraySegment <string> .Empty) ? ProviderCalculationResultsFacetCount : ProviderCalculationResultsFacetCount - 1;

            //facet search
            await
            searchRepository
            .Received(expectedFacetsSearchCount)
            .Search(model.SearchTerm, Arg.Is <SearchParameters>(c =>
                                                                SearchFiltersMatch(c, model) &&
                                                                SearchFieldsMatch(c.SearchFields, expectedFacetSearchFields)
                                                                ));
        }
        public async Task SearchTestScenarioResults_GivenValidModelWithOneFilterAndOverrridesFacets_ThenSearchIsPerformedWithTwoFilters()
        {
            //Arrange
            SearchModel model = new SearchModel
            {
                PageNumber    = 1,
                Top           = 50,
                IncludeFacets = true,
                Filters       = new Dictionary <string, string[]>()
                {
                    { "calculationId", new string [] { "test" } }
                },
                SearchTerm          = "testTerm",
                OverrideFacetFields = new[] { "providerId", "calculationId" }
            };

            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();

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

            ISearchRepository <ProviderCalculationResultsIndex> searchRepository = CreateSearchRepository();

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

            ProviderCalculationResultsSearchService service = CreateTestResultsSearchService(logger, searchRepository);

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

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

            await
            searchRepository
            .Received(2)
            .Search(model.SearchTerm, Arg.Is <SearchParameters>(c =>
                                                                model.Filters.Keys.All(f => c.Filter.Contains(f)) &&
                                                                !string.IsNullOrWhiteSpace(c.Filter)
                                                                ));
        }
        public async Task SearchTestScenarioResults_GivenValidModelAndIncludesGettingFacetsAndFiltersIsNull_PerformsSearch()
        {
            //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);

            ILogger logger = CreateLogger();

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

            ISearchRepository <ProviderCalculationResultsIndex> searchRepository = CreateSearchRepository();

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

            ProviderCalculationResultsSearchService service = CreateTestResultsSearchService(logger, searchRepository);

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

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

            await
            searchRepository
            .Received(model.FacetCount)
            .Search(Arg.Any <string>(), Arg.Is <SearchParameters>(c => c.SearchFields.Any(f => f == "providerName")));
        }
        public async Task SearchCalculationProviderResults_GivenSearchRequestFails_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 <ProviderCalculationResultsIndex> searchRepository = CreateSearchRepository();

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


            ProviderCalculationResultsSearchService service = CreateTestResultsSearchService(logger, searchRepository);

            //Act
            IActionResult result = await service.SearchCalculationProviderResults(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);
        }
Beispiel #7
0
        public async Task SearchTestScenarioResults_GivenValidModelWithOneFilterAndOverrridesFacets_ThenSearchIsPerformedWithTwoFilters(
            bool useCalculationId, string filterName)
        {
            //Arrange
            SearchModel model = new SearchModel
            {
                PageNumber    = 1,
                Top           = 50,
                IncludeFacets = true,
                Filters       = new Dictionary <string, string[]>()
                {
                    { filterName, new string [] { "test" } }
                },
                SearchTerm          = "testTerm",
                OverrideFacetFields = new[] { "providerId", filterName }
            };

            ILogger logger = CreateLogger();

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

            ISearchRepository <ProviderCalculationResultsIndex> searchRepository = CreateSearchRepository();

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

            ProviderCalculationResultsSearchService service = CreateTestResultsSearchService(logger, searchRepository);

            //Act
            IActionResult result = await service.SearchCalculationProviderResults(model, useCalculationId);

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

            await
            searchRepository
            .Received(2)
            .Search(model.SearchTerm, Arg.Is <SearchParameters>(c =>
                                                                model.Filters.Keys.All(f => c.Filter.Contains(f)) &&
                                                                !string.IsNullOrWhiteSpace(c.Filter)
                                                                ));
        }
Beispiel #8
0
        public async Task SearchTestScenarioResults_GivenValidModelAndIncludesGettingFacets_CallsSearchCorrectNumberOfTimes(
            bool useCalculationId, string idFilterName)
        {
            //Arrange
            SearchModel model = new SearchModel
            {
                PageNumber    = 1,
                Top           = 50,
                IncludeFacets = true,
                Filters       = new Dictionary <string, string[]>()
                {
                    { idFilterName, new string [] { "test" } }
                }
            };
            ILogger logger = CreateLogger();

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

            ISearchRepository <ProviderCalculationResultsIndex> searchRepository = CreateSearchRepository();

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

            ProviderCalculationResultsSearchService service = CreateTestResultsSearchService(logger, searchRepository);

            //Act
            IActionResult result = await service.SearchCalculationProviderResults(model, useCalculationId);

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

            await
            searchRepository
            .Received(ProviderCalculationResultsFacetCount + 1)
            .Search(Arg.Any <string>(), Arg.Is <SearchParameters>(c => c.SearchFields.Any(f => f == "providerName")));

            await
            searchRepository
            .Received(1)
            .Search(Arg.Any <string>(), Arg.Is <SearchParameters>(c => c.SearchFields.Any(f => f == "providerName") && c.SearchFields.Any(f => f == "ukPrn") && c.SearchFields.Any(f => f == "urn") && c.SearchFields.Any(f => f == "establishmentNumber")));
        }
Beispiel #9
0
        public async Task SearchCalculationProviderResults_GivenNullModel_ReturnsBadRequest()
        {
            //Arrange
            ILogger logger = CreateLogger();

            ProviderCalculationResultsSearchService service = CreateTestResultsSearchService(logger: logger);

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

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

            logger
            .Received(1)
            .Error(Arg.Is("A null or invalid search model was provided for searching calculation provider results"));
        }
Beispiel #10
0
        public async Task SearchCalculationProviderResults_GivenSearchRequestFails_ThenBadRequestReturned(
            bool useCalculationId, string idFilterName)
        {
            //Arrange
            SearchModel model = new SearchModel()
            {
                SearchTerm    = "SearchTermTest",
                PageNumber    = 1,
                IncludeFacets = false,
                Top           = 50,
                Filters       = new Dictionary <string, string[]>()
                {
                    { idFilterName, new string [] { "test" } }
                }
            };
            ILogger logger = CreateLogger();

            ISearchRepository <ProviderCalculationResultsIndex> searchRepository = CreateSearchRepository();

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


            ProviderCalculationResultsSearchService service = CreateTestResultsSearchService(logger, searchRepository);

            //Act
            IActionResult result = await service.SearchCalculationProviderResults(model, useCalculationId);

            //Assert
            logger
            .Received(1)
            .Error(Arg.Any <FailedToQuerySearchException>(), "Failed to query search with term: SearchTermTest");

            result
            .Should()
            .BeOfType <StatusCodeResult>()
            .Which.StatusCode.Should().Be(500);
        }
Beispiel #11
0
        public async Task SearchTestScenarioResults_GivenValidModelAndIncludesGettingFacetsAndFiltersIsNull_PerformsSearch()
        {
            //Arrange
            SearchModel model = new SearchModel
            {
                PageNumber    = 1,
                Top           = 50,
                IncludeFacets = true,
                Filters       = null,
            };

            ILogger logger = CreateLogger();

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

            ISearchRepository <ProviderCalculationResultsIndex> searchRepository = CreateSearchRepository();

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

            ProviderCalculationResultsSearchService service = CreateTestResultsSearchService(logger, searchRepository);

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

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

            await
            searchRepository
            .Received(ProviderCalculationResultsFacetCount)
            .Search(Arg.Any <string>(), Arg.Is <SearchParameters>(c => c.SearchFields.Any(f => f == "providerName")));
        }