public async Task SearchProviders_WhenNoProviderVersionSetAsMaster_NotFoundReturned(int day, int month, int year)
        {
            // Arrange
            ProviderVersionViewModel providerVersionViewModel = CreateProviderVersion();

            Provider provider = GetProvider();

            providerVersionViewModel.Providers   = providerVersionViewModel.Providers.Concat(new[] { provider });
            providerVersionViewModel.VersionType = ProviderVersionType.Custom;

            ICacheProvider cacheProvider = CreateCacheProvider();

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

            ISearchRepository <ProvidersIndex> searchRepository = CreateSearchRepository();

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

            IProviderVersionService providerVersionService = CreateProviderVersionService();

            providerVersionService
            .GetMasterProviderVersion()
            .Returns <MasterProviderVersion>((MasterProviderVersion)null);

            IProviderVersionSearchService providerService = CreateProviderVersionSearchService(cacheProvider: cacheProvider, searchRepository: searchRepository, providerVersionService: providerVersionService);

            // Act
            IActionResult notFoundResult = await providerService.SearchProviders(year, month, day, new Models.SearchModel());

            notFoundResult
            .Should()
            .BeOfType <NotFoundResult>();
        }
        public FundingStreamProviderVersionService(IProviderVersionsMetadataRepository providerVersionMetadata,
                                                   IProviderVersionService providerVersionService,
                                                   IProviderVersionSearchService providerVersionSearch,
                                                   IValidator <SetFundingStreamCurrentProviderVersionRequest> setCurrentRequestValidator,
                                                   IProvidersResiliencePolicies resiliencePolicies,
                                                   ILogger logger,
                                                   IMapper mapper)
        {
            Guard.ArgumentNotNull(providerVersionMetadata, nameof(providerVersionMetadata));
            Guard.ArgumentNotNull(providerVersionService, nameof(providerVersionService));
            Guard.ArgumentNotNull(providerVersionSearch, nameof(providerVersionSearch));
            Guard.ArgumentNotNull(resiliencePolicies?.ProviderVersionMetadataRepository, nameof(resiliencePolicies.ProviderVersionMetadataRepository));
            Guard.ArgumentNotNull(resiliencePolicies?.ProviderVersionsSearchRepository, nameof(resiliencePolicies.ProviderVersionsSearchRepository));
            Guard.ArgumentNotNull(logger, nameof(logger));
            Guard.ArgumentNotNull(mapper, nameof(mapper));

            _providerVersionMetadata       = providerVersionMetadata;
            _providerVersionMetadataPolicy = resiliencePolicies.ProviderVersionMetadataRepository;
            _providerVersionSearchPolicy   = resiliencePolicies.ProviderVersionsSearchRepository;
            _logger = logger;
            _providerVersionSearch      = providerVersionSearch;
            _setCurrentRequestValidator = setCurrentRequestValidator;
            _providerVersionService     = providerVersionService;
            _mapper = mapper;
        }
        public async Task UploadProviderVersion_CallsCorrectly(
            string providerVersionId)
        {
            IProviderVersionService       providerVersionService       = Substitute.For <IProviderVersionService>();
            IProviderVersionSearchService providerVersionSearchService = Substitute.For <IProviderVersionSearchService>();

            ProviderVersionViewModel providers = new ProviderVersionViewModel();

            ProviderByVersionController controller = new ProviderByVersionController(
                providerVersionService,
                providerVersionSearchService);

            controller.ControllerContext = new Microsoft.AspNetCore.Mvc.ControllerContext()
            {
                RouteData = new Microsoft.AspNetCore.Routing.RouteData
                            (
                    new Microsoft.AspNetCore.Routing.RouteValueDictionary
                    (
                        new Dictionary <string, string>()
                {
                    { "controller", "ProviderByVersion" }
                }
                    )
                            )
            };

            await controller.UploadProviderVersion(providerVersionId, providers);

            await providerVersionService
            .Received(1)
            .UploadProviderVersion("GetProvidersByVersion", "ProviderByVersion", providerVersionId, providers);
        }
        public async Task GetProviderById_WhenProviderIdDoesNotExistForProviderVersion_NotFoundReturned()
        {
            // Arrange
            ProviderVersionViewModel providerVersionViewModel = CreateProviderVersion();

            Provider provider = GetProvider();

            providerVersionViewModel.Providers   = providerVersionViewModel.Providers.Concat(new[] { provider });
            providerVersionViewModel.VersionType = ProviderVersionType.Custom;

            ICacheProvider cacheProvider = CreateCacheProvider();

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

            ISearchRepository <ProvidersIndex> searchRepository = CreateSearchRepository();

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

            IProviderVersionSearchService providerService = CreateProviderVersionSearchService(cacheProvider: cacheProvider, searchRepository: searchRepository);

            // Act
            IActionResult notFoundRequest = await providerService.GetProviderById(providerVersionViewModel.ProviderVersionId, string.Empty);

            await searchRepository.Received(1)
            .Search(Arg.Any <string>(), Arg.Is <SearchParameters>(c => c.Filter.Contains(providerVersionViewModel.ProviderVersionId)));

            notFoundRequest
            .Should()
            .BeOfType <NotFoundResult>();
        }
        public async Task GetProviderById_WhenSearchThrowsError_InternalServerErrorThrown()
        {
            // Arrange
            ProviderVersionViewModel providerVersionViewModel = CreateProviderVersion();

            Provider provider = GetProvider();

            providerVersionViewModel.Providers   = providerVersionViewModel.Providers.Concat(new[] { provider });
            providerVersionViewModel.VersionType = ProviderVersionType.Custom;

            ICacheProvider cacheProvider = CreateCacheProvider();

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

            ISearchRepository <ProvidersIndex> searchRepository = CreateSearchRepository();

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

            IProviderVersionSearchService providerService = CreateProviderVersionSearchService(cacheProvider: cacheProvider, searchRepository: searchRepository);

            // Act
            IActionResult internalServerResult = await providerService.GetProviderById(providerVersionViewModel.ProviderVersionId, string.Empty);

            await searchRepository.Received(1)
            .Search(Arg.Any <string>(), Arg.Is <SearchParameters>(c => c.Filter.Contains(providerVersionViewModel.ProviderVersionId)));

            internalServerResult
            .Should()
            .BeOfType <InternalServerErrorResult>();
        }
        public async Task GetLocalAuthoritiesByProviderVersionId_WhenProviderVersionIdFacetProvidedWithNoAuthorities_OkWithEmptyResultReturned()
        {
            // Arrange
            string authorityFacet         = "authority";
            string providerVersionIdFacet = "providerVersionId";

            string providerVersionId = "dsg-2020-07-03";

            SearchResults <ProvidersIndex> authorityResults = new SearchResults <ProvidersIndex>
            {
                Facets = new List <Facet>
                {
                    new Facet
                    {
                        Name        = authorityFacet,
                        FacetValues = Enumerable.Empty <FacetValue>()
                    }
                }
            };
            SearchResults <ProvidersIndex> providerVersionResults = new SearchResults <ProvidersIndex>
            {
                Facets = new List <Facet>
                {
                    new Facet
                    {
                        Name        = providerVersionIdFacet,
                        FacetValues = new List <FacetValue>
                        {
                            new FacetValue {
                                Name = providerVersionId
                            }
                        }
                    }
                }
            };

            ISearchRepository <ProvidersIndex> searchRepository = CreateSearchRepository();

            searchRepository
            .Search(string.Empty, Arg.Is <SearchParameters>(x => x.Facets.Any(x => x.Contains(authorityFacet))))
            .Returns(authorityResults);
            searchRepository
            .Search(string.Empty, Arg.Is <SearchParameters>(x => x.Facets.Any(x => x.Contains(providerVersionIdFacet))))
            .Returns(providerVersionResults);
            searchRepository
            .Search(string.Empty, Arg.Is <SearchParameters>(x => x.Facets == null || !x.Facets.Any()))
            .Returns(new SearchResults <ProvidersIndex>());
            IProviderVersionSearchService providerService = CreateProviderVersionSearchService(searchRepository: searchRepository);

            // Act
            IActionResult notFoundRequest = await providerService.GetLocalAuthoritiesByProviderVersionId(providerVersionId);

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

            ((IEnumerable <string>)((OkObjectResult)notFoundRequest).Value).Should().BeEmpty();
        }
        public async Task SearchProviders_WhenProviderIdExistsForDate_ProviderReturned(int day, int month, int year)
        {
            // Arrange
            ProviderVersionViewModel providerVersionViewModel = CreateProviderVersion();

            Provider provider = GetProvider();

            providerVersionViewModel.Providers   = providerVersionViewModel.Providers.Concat(new[] { provider });
            providerVersionViewModel.VersionType = ProviderVersionType.Custom;

            ICacheProvider cacheProvider = CreateCacheProvider();

            SearchResults <ProvidersIndex> searchResults = new SearchResults <ProvidersIndex> {
                Results = new List <Repositories.Common.Search.SearchResult <ProvidersIndex> > {
                    new Repositories.Common.Search.SearchResult <ProvidersIndex> {
                        Result = new ProvidersIndex {
                            ProviderVersionId = provider.ProviderVersionId, UKPRN = provider.UKPRN
                        }
                    }
                }
            };

            IProviderVersionService providerVersionService = CreateProviderVersionService();

            ISearchRepository <ProvidersIndex> searchRepository = CreateSearchRepository();

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

            IProviderVersionSearchService providerService = CreateProviderVersionSearchService(cacheProvider: cacheProvider, searchRepository: searchRepository, providerVersionService: providerVersionService);

            providerVersionService
            .GetProviderVersionByDate(Arg.Any <int>(), Arg.Any <int>(), Arg.Any <int>())
            .Returns <ProviderVersionByDate>(new ProviderVersionByDate {
                Day = day, Month = month, Year = year, ProviderVersionId = provider.ProviderVersionId
            });

            // Act
            IActionResult okRequest = await providerService.SearchProviders(year, month, day, new Models.SearchModel {
                Filters = new Dictionary <string, string[]> {
                    { "providerId", new List <string> {
                          provider.ProviderId
                      }.ToArray() }
                }
            });

            await searchRepository.Received(1)
            .Search(Arg.Any <string>(), Arg.Is <SearchParameters>(c => c.Filter.Contains(provider.ProviderId)));

            okRequest
            .Should()
            .BeOfType <OkObjectResult>();

            ((OkObjectResult)okRequest).Value
            .Should()
            .BeOfType <ProviderVersionSearchResults>();
        }
        public ProviderByDateController(IProviderVersionService providerVersionService,
                                        IProviderVersionSearchService providerVersionSearchService)
        {
            Guard.ArgumentNotNull(providerVersionService, nameof(providerVersionService));
            Guard.ArgumentNotNull(providerVersionSearchService, nameof(providerVersionSearchService));

            _providerVersionService       = providerVersionService;
            _providerVersionSearchService = providerVersionSearchService;
        }
        public async Task GetFacetValues_WhenValidFacetProvided_FacetDistinctValuesReturned()
        {
            // Arrange

            string authorityFacet = "authority";

            string facetValue1 = "Kent";
            string facetValue2 = "Essex";

            SearchResults <ProvidersIndex> searchResults = new SearchResults <ProvidersIndex>
            {
                Facets = new List <Facet>
                {
                    new Facet
                    {
                        Name        = authorityFacet,
                        FacetValues = new List <FacetValue>
                        {
                            new FacetValue {
                                Name = facetValue1
                            },
                            new FacetValue {
                                Name = facetValue2
                            }
                        }
                    }
                }
            };

            ISearchRepository <ProvidersIndex> searchRepository = CreateSearchRepository();

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

            IProviderVersionSearchService providerService = CreateProviderVersionSearchService(searchRepository: searchRepository);

            // Act
            IActionResult okObjectRequest = await providerService.GetFacetValues(authorityFacet);

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

            await searchRepository
            .Received(1)
            .Search(string.Empty, Arg.Is <SearchParameters>(x => x.Top == 0 && x.Facets.Count == 1 && x.Facets.First().Contains(authorityFacet)));

            ((okObjectRequest as OkObjectResult).Value as IEnumerable <string>)
            .Should()
            .HaveCount(2);
        }
Esempio n. 10
0
        public async Task GetLocalAuthorityNames_CallsCorrectly()
        {
            IProviderVersionSearchService providerVersionSearchService = Substitute.For <IProviderVersionSearchService>();

            ProvidersController controller = new ProvidersController(
                providerVersionSearchService);

            await controller.GetLocalAuthorityNames();

            await providerVersionSearchService
            .Received(1)
            .GetFacetValues("authority");
        }
        public async Task GetFacetValues_WhenFacetNotProvided_NotFoundResultReturned()
        {
            // Arrange
            IProviderVersionSearchService providerService = CreateProviderVersionSearchService();

            // Act
            IActionResult notFoundRequest = await providerService.GetFacetValues(string.Empty);

            // Assert
            notFoundRequest
            .Should()
            .BeOfType <NotFoundResult>();
        }
        public void GetAvailableProvidersByMonth_CallsCorrectly(int year, int month)
        {
            IProviderVersionService       providerVersionService       = Substitute.For <IProviderVersionService>();
            IProviderVersionSearchService providerVersionSearchService = Substitute.For <IProviderVersionSearchService>();

            ProviderByDateController controller = Substitute.For <ProviderByDateController>(
                providerVersionService,
                providerVersionSearchService);

            controller.GetAvailableProvidersByMonth(year, month);

            controller
            .Received(1)
            .Ok(Arg.Any <IEnumerable>());
        }
        public async Task GetProviderByIdFromProviderVersion_CallsCorrectly(int year, int month, int day, string providerId)
        {
            IProviderVersionService       providerVersionService       = Substitute.For <IProviderVersionService>();
            IProviderVersionSearchService providerVersionSearchService = Substitute.For <IProviderVersionSearchService>();

            ProviderByDateController controller = new ProviderByDateController(
                providerVersionService,
                providerVersionSearchService);

            await controller.GetProviderByIdFromProviderVersion(year, month, day, providerId);

            await providerVersionSearchService
            .Received(1)
            .GetProviderById(year, month, day, providerId);
        }
        public async Task DoesProviderVersionExist_CallsCorrectly(
            string providerVersionId)
        {
            IProviderVersionService       providerVersionService       = Substitute.For <IProviderVersionService>();
            IProviderVersionSearchService providerVersionSearchService = Substitute.For <IProviderVersionSearchService>();

            ProviderByVersionController controller = new ProviderByVersionController(
                providerVersionService,
                providerVersionSearchService);

            await controller.DoesProviderVersionExist(providerVersionId);

            await providerVersionService
            .Received(1)
            .DoesProviderVersionExist(providerVersionId);
        }
        public async Task GetProvidersByVersion_CallsCorrectly(
            string providerVersionId)
        {
            IProviderVersionService       providerVersionService       = Substitute.For <IProviderVersionService>();
            IProviderVersionSearchService providerVersionSearchService = Substitute.For <IProviderVersionSearchService>();

            ProviderByVersionController controller = new ProviderByVersionController(
                providerVersionService,
                providerVersionSearchService);

            await controller.GetProvidersByVersion(providerVersionId);

            await providerVersionService
            .Received(1)
            .GetAllProviders(providerVersionId);
        }
        public async Task GetProviderById_WhenProviderIdExistsForProviderVersion_ProviderReturned()
        {
            // Arrange
            ProviderVersionViewModel providerVersionViewModel = CreateProviderVersion();

            Provider provider = GetProvider();

            providerVersionViewModel.Providers   = providerVersionViewModel.Providers.Concat(new[] { provider });
            providerVersionViewModel.VersionType = ProviderVersionType.Custom;

            ICacheProvider cacheProvider = CreateCacheProvider();

            SearchResults <ProvidersIndex> searchResults = new SearchResults <ProvidersIndex> {
                Results = new List <Repositories.Common.Search.SearchResult <ProvidersIndex> > {
                    new Repositories.Common.Search.SearchResult <ProvidersIndex> {
                        Result = new ProvidersIndex {
                            ProviderVersionId = provider.ProviderVersionId, UKPRN = provider.UKPRN
                        }
                    }
                }
            };

            ISearchRepository <ProvidersIndex> searchRepository = CreateSearchRepository();

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

            IProviderVersionSearchService providerService = CreateProviderVersionSearchService(cacheProvider: cacheProvider, searchRepository: searchRepository);

            // Act
            IActionResult okRequest = await providerService.GetProviderById(providerVersionViewModel.ProviderVersionId, provider.ProviderId);

            await searchRepository.Received(1)
            .Search(Arg.Any <string>(), Arg.Is <SearchParameters>(c => c.Filter.Contains(provider.ProviderId)));


            okRequest
            .Should()
            .BeOfType <OkObjectResult>();

            ((OkObjectResult)okRequest).Value
            .Should()
            .BeOfType <ProviderVersionSearchResult>();

            Assert.AreEqual(((ProviderVersionSearchResult)((OkObjectResult)okRequest).Value).Id, provider.ProviderVersionId + "_" + provider.UKPRN);
        }
        public async Task SearchProviderVersions_CallsCorrectly()
        {
            IProviderVersionService       providerVersionService       = Substitute.For <IProviderVersionService>();
            IProviderVersionSearchService providerVersionSearchService = Substitute.For <IProviderVersionSearchService>();

            ProviderByVersionController controller = new ProviderByVersionController(
                providerVersionService,
                providerVersionSearchService);

            SearchModel searchModel = new SearchModel();

            await controller.SearchProviderVersions(searchModel);

            await providerVersionSearchService
            .Received(1)
            .SearchProviderVersions(searchModel);
        }
        public async Task SearchProvidersInProviderVersionAssociatedWithDate_CallsCorrectly(int year, int month, int day)
        {
            IProviderVersionService       providerVersionService       = Substitute.For <IProviderVersionService>();
            IProviderVersionSearchService providerVersionSearchService = Substitute.For <IProviderVersionSearchService>();

            ProviderByDateController controller = new ProviderByDateController(
                providerVersionService,
                providerVersionSearchService);

            SearchModel searchModel = new SearchModel();

            await controller.SearchProvidersInProviderVersionAssociatedWithDate(year, month, day, searchModel);

            await providerVersionSearchService
            .Received(1)
            .SearchProviders(year, month, day, searchModel);
        }
        public async Task SearchProviderVersions_WhenSearchThrowsError_InternalServerErrorThrown()
        {
            // Arrange
            ProviderVersionViewModel providerVersionViewModel = CreateProviderVersion();

            Provider provider = GetProvider();

            providerVersionViewModel.Providers   = providerVersionViewModel.Providers.Concat(new[] { provider });
            providerVersionViewModel.VersionType = ProviderVersionType.Custom;

            ICacheProvider cacheProvider = CreateCacheProvider();

            SearchResults <ProvidersIndex> searchResults = new SearchResults <ProvidersIndex> {
                Results = new List <Repositories.Common.Search.SearchResult <ProvidersIndex> > {
                    new Repositories.Common.Search.SearchResult <ProvidersIndex> {
                        Result = new ProvidersIndex {
                            ProviderVersionId = provider.ProviderVersionId, UKPRN = provider.UKPRN
                        }
                    }
                }
            };

            ISearchRepository <ProvidersIndex> searchRepository = CreateSearchRepository();

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

            IProviderVersionSearchService providerService = CreateProviderVersionSearchService(cacheProvider: cacheProvider, searchRepository: searchRepository);

            // Act
            IActionResult okRequest = await providerService.SearchProviderVersions(new Models.SearchModel {
                Filters = new Dictionary <string, string[]> {
                    { "providerId", new List <string> {
                          provider.ProviderId
                      }.ToArray() }
                }
            });

            await searchRepository.Received(1)
            .Search(Arg.Any <string>(), Arg.Is <SearchParameters>(c => c.Filter.Contains(provider.ProviderId)));

            okRequest
            .Should()
            .BeOfType <InternalServerErrorResult>();
        }
        public async Task GetProviderById_WhenProviderIdDoesNotExistsForDate_NotFoundReturned(int day, int month, int year)
        {
            // Arrange
            ProviderVersionViewModel providerVersionViewModel = CreateProviderVersion();

            Provider provider = GetProvider();

            providerVersionViewModel.Providers   = providerVersionViewModel.Providers.Concat(new[] { provider });
            providerVersionViewModel.VersionType = ProviderVersionType.Custom;

            ICacheProvider cacheProvider = CreateCacheProvider();

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

            ISearchRepository <ProvidersIndex> searchRepository = CreateSearchRepository();

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

            IProviderVersionService providerVersionService = CreateProviderVersionService();

            string providerVersionId = Guid.NewGuid().ToString();

            providerVersionService
            .GetProviderVersionByDate(Arg.Any <int>(), Arg.Any <int>(), Arg.Any <int>())
            .Returns <ProviderVersionByDate>(new ProviderVersionByDate {
                Day = day, Month = month, Year = year, ProviderVersionId = providerVersionId
            });

            IProviderVersionSearchService providerService = CreateProviderVersionSearchService(cacheProvider: cacheProvider, searchRepository: searchRepository, providerVersionService: providerVersionService);

            // Act
            IActionResult notFoundRequest = await providerService.GetProviderById(year, month, day, "12345");

            await searchRepository.Received(1)
            .Search(Arg.Any <string>(), Arg.Is <SearchParameters>(c => c.Filter.Contains(providerVersionId)));

            notFoundRequest
            .Should()
            .BeOfType <NotFoundResult>();
        }
        public async Task SetProviderDateProviderVersion_CallsCorrectly(int year, int month, int day)
        {
            IProviderVersionService       providerVersionService       = Substitute.For <IProviderVersionService>();
            IProviderVersionSearchService providerVersionSearchService = Substitute.For <IProviderVersionSearchService>();

            providerVersionService
            .GetAllProviders(Arg.Any <string>())
            .Returns(new OkObjectResult(new Provider {
                ProviderVersionId = "providerVersionId"
            }));

            ProviderByDateController controller = Substitute.For <ProviderByDateController>(providerVersionService, providerVersionSearchService);


            await controller.SetProviderDateProviderVersion(year, month, day, "providerVersionId");

            await providerVersionService
            .Received(1)
            .SetProviderVersionByDate(Arg.Any <int>(), Arg.Any <int>(), Arg.Any <int>(), Arg.Any <string>());
        }
        public async Task GetLocalAuthoritiesByFundingStreamId_WhenAuthoritiesProvidedForProviderVersionId_OkesultsReturned()
        {
            // Arrange
            string authorityFacet         = "authority";
            string providerVersionIdFacet = "providerVersionId";

            string aFacetValue1 = "Kent";
            string aFacetValue2 = "Essex";

            string providerVersionId = "dsg-2020-07-03";

            SearchResults <ProvidersIndex> authorityResults = new SearchResults <ProvidersIndex>
            {
                Facets = new List <Facet>
                {
                    new Facet
                    {
                        Name        = authorityFacet,
                        FacetValues = new List <FacetValue>()
                        {
                            new FacetValue {
                                Name = aFacetValue1
                            },
                            new FacetValue {
                                Name = aFacetValue2
                            }
                        }
                    }
                }
            };

            SearchResults <ProvidersIndex> providerVersionResults = new SearchResults <ProvidersIndex>
            {
                Facets = new List <Facet>
                {
                    new Facet
                    {
                        Name        = providerVersionIdFacet,
                        FacetValues = new List <FacetValue>
                        {
                            new FacetValue {
                                Name = providerVersionId
                            }
                        }
                    }
                }
            };

            ISearchRepository <ProvidersIndex> searchRepository = CreateSearchRepository();

            searchRepository
            .Search(string.Empty, Arg.Is <SearchParameters>(x => x.Facets.Any(x => x.Contains(authorityFacet))))
            .Returns(authorityResults);
            searchRepository
            .Search(string.Empty, Arg.Is <SearchParameters>(x => x.Facets.Any(x => x.Contains(providerVersionIdFacet))))
            .Returns(providerVersionResults);
            searchRepository
            .Search(string.Empty, Arg.Is <SearchParameters>(x => x.Facets == null || !x.Facets.Any()))
            .Returns(new SearchResults <ProvidersIndex>());

            CurrentProviderVersion currentProviderVersion = NewCurrentProviderVersion(_ => _.ForFundingStreamId("fundingStreamId"));

            currentProviderVersion.ProviderVersionId = providerVersionId;

            IProviderVersionsMetadataRepository providerVersionsMetadataRepository = CreateProviderVersionMetadataRepository();

            providerVersionsMetadataRepository.GetCurrentProviderVersion(Arg.Any <string>())
            .Returns(currentProviderVersion);

            IProviderVersionSearchService providerService = CreateProviderVersionSearchService(searchRepository: searchRepository,
                                                                                               providerVersionMetadataRepository: providerVersionsMetadataRepository);

            // Act
            IActionResult notFoundRequest = await providerService.GetLocalAuthoritiesByFundingStreamId("fundingStreamId");

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

            ((IEnumerable <string>)((OkObjectResult)notFoundRequest).Value).Should().Contain(aFacetValue1);
            ((IEnumerable <string>)((OkObjectResult)notFoundRequest).Value).Should().Contain(aFacetValue2);
        }
        public async Task GetLocalAuthoritiesByFundingStreamId_WhenFundingStreamIdFacetNotProvided_NotFoundResultReturned()
        {
            // Arrange
            string authorityFacet         = "authority";
            string providerVersionIdFacet = "providerVersionId";

            SearchResults <ProvidersIndex> authorityResults = new SearchResults <ProvidersIndex>
            {
                Facets = new List <Facet>
                {
                    new Facet
                    {
                        Name        = authorityFacet,
                        FacetValues = new List <FacetValue>()
                    }
                }
            };
            SearchResults <ProvidersIndex> providerVersionResults = new SearchResults <ProvidersIndex>
            {
                Facets = new List <Facet>
                {
                    new Facet
                    {
                        Name        = providerVersionIdFacet,
                        FacetValues = new List <FacetValue>()
                    }
                }
            };

            ISearchRepository <ProvidersIndex> searchRepository = CreateSearchRepository();

            searchRepository
            .Search(string.Empty, Arg.Is <SearchParameters>(x => x.Facets.Any(x => x.Contains(authorityFacet))))
            .Returns(authorityResults);
            searchRepository
            .Search(string.Empty, Arg.Is <SearchParameters>(x => x.Facets.Any(x => x.Contains(providerVersionIdFacet))))
            .Returns(providerVersionResults);
            searchRepository
            .Search(string.Empty, Arg.Is <SearchParameters>(x => x.Facets == null || !x.Facets.Any()))
            .Returns(new SearchResults <ProvidersIndex>());


            CurrentProviderVersion currentProviderVersion = NewCurrentProviderVersion(_ => _.ForFundingStreamId("fundingStreamId"));


            IProviderVersionsMetadataRepository providerVersionsMetadataRepository = CreateProviderVersionMetadataRepository();

            providerVersionsMetadataRepository.GetCurrentProviderVersion(Arg.Any <string>())
            .Returns(currentProviderVersion);

            IProviderVersionSearchService providerService = CreateProviderVersionSearchService(searchRepository: searchRepository,
                                                                                               providerVersionMetadataRepository: providerVersionsMetadataRepository);

            // Act
            IActionResult notFoundRequest = await providerService.GetLocalAuthoritiesByFundingStreamId("fundingStreamId");

            // Assert
            notFoundRequest
            .Should()
            .BeOfType <NotFoundResult>();
        }