public async Task SearchById_GivenIdDoesNotReturnSearchResult_ReturnsNull()
        {
            SearchRepositorySettings searchRepositorySettings = new SearchRepositorySettings
            {
                SearchKey         = string.Empty,
                SearchServiceName = string.Empty
            };

            ISearchInitializer searchInitializer = Substitute.For <ISearchInitializer>();

            ISearchIndexClient searchIndexClient = Substitute.For <ISearchIndexClient>();

            AzureOperationResponse <DocumentSearchResult <SpecificationIndex> > documentSearchResult =
                new AzureOperationResponse <DocumentSearchResult <SpecificationIndex> >
            {
                Body = new DocumentSearchResult <SpecificationIndex>(null, null, null, null, null)
            };

            IDocumentsOperations documentsOperations = Substitute.For <IDocumentsOperations>();

            documentsOperations.SearchWithHttpMessagesAsync <SpecificationIndex>(Arg.Any <string>(), Arg.Any <SearchParameters>()).Returns(Task.FromResult(documentSearchResult));

            ISearchServiceClient searchServiceClient = Substitute.For <ISearchServiceClient>();

            searchIndexClient.Documents.Returns(documentsOperations);

            SearchRepository <SpecificationIndex> searchRepository = new SearchRepository <SpecificationIndex>(searchRepositorySettings, searchInitializer, searchServiceClient, searchIndexClient);

            string notFoundId = "notFound";

            SpecificationIndex specificationIndex = await searchRepository.SearchById(notFoundId);

            specificationIndex.Should().BeNull();
        }
        public void SearchById_GivenIdReturnsSearchResult_TreatsMultipleResultsAsAnException()
        {
            string existingId = "existingId";

            SearchRepositorySettings searchRepositorySettings = new SearchRepositorySettings
            {
                SearchKey         = string.Empty,
                SearchServiceName = string.Empty
            };

            ISearchInitializer searchInitializer = Substitute.For <ISearchInitializer>();

            ISearchIndexClient searchIndexClient = Substitute.For <ISearchIndexClient>();

            Microsoft.Azure.Search.Models.SearchResult <SpecificationIndex> specificationIndexSearchResult = new Microsoft.Azure.Search.Models.SearchResult <SpecificationIndex>(new SpecificationIndex
            {
                Id = existingId
            });

            AzureOperationResponse <DocumentSearchResult <SpecificationIndex> > documentSearchResult =
                new AzureOperationResponse <DocumentSearchResult <SpecificationIndex> >
            {
                Body = new DocumentSearchResult <SpecificationIndex>(new[]
                {
                    specificationIndexSearchResult, new Microsoft.Azure.Search.Models.SearchResult <SpecificationIndex>()
                },
                                                                     null,
                                                                     null,
                                                                     null,
                                                                     null)
            };

            IDocumentsOperations documentsOperations = Substitute.For <IDocumentsOperations>();

            documentsOperations
            .SearchWithHttpMessagesAsync <SpecificationIndex>(Arg.Is <string>(_ => _ == $"\"{existingId}\""),
                                                              Arg.Is <SearchParameters>(_ => _.SearchFields.SequenceEqual(new[]
            {
                "id"
            })))
            .Returns(Task.FromResult(documentSearchResult));

            ISearchServiceClient searchServiceClient = Substitute.For <ISearchServiceClient>();

            searchIndexClient.Documents.Returns(documentsOperations);

            SearchRepository <SpecificationIndex> searchRepository = new SearchRepository <SpecificationIndex>(searchRepositorySettings, searchInitializer, searchServiceClient, searchIndexClient);

            Func <Task <SpecificationIndex> > invocation = () => searchRepository.SearchById(existingId);

            invocation
            .Should()
            .Throw <FailedToQuerySearchException>();
        }
        public static IServiceCollection AddSearch(this IServiceCollection builder, IConfiguration config)
        {
            SearchRepositorySettings searchSettings = new SearchRepositorySettings
            {
                SearchServiceName = config.GetValue <string>("SearchServiceName"),
                SearchKey         = config.GetValue <string>("SearchServiceKey")
            };

            builder.AddSingleton <SearchRepositorySettings>(searchSettings);

            return(builder);
        }
        public async Task SearchById_GivenIdReturnsSearchResult_ReturnsResults()
        {
            string existingId = "existingId";

            SearchRepositorySettings searchRepositorySettings = new SearchRepositorySettings
            {
                SearchKey         = string.Empty,
                SearchServiceName = string.Empty
            };

            ISearchInitializer searchInitializer = Substitute.For <ISearchInitializer>();

            ISearchIndexClient searchIndexClient = Substitute.For <ISearchIndexClient>();

            Microsoft.Azure.Search.Models.SearchResult <SpecificationIndex> specificationIndexSearchResult = new Microsoft.Azure.Search.Models.SearchResult <SpecificationIndex>(new SpecificationIndex
            {
                Id = existingId
            });

            AzureOperationResponse <DocumentSearchResult <SpecificationIndex> > documentSearchResult =
                new AzureOperationResponse <DocumentSearchResult <SpecificationIndex> >
            {
                Body = new DocumentSearchResult <SpecificationIndex>(new[]
                {
                    specificationIndexSearchResult
                },
                                                                     null,
                                                                     null,
                                                                     null,
                                                                     null)
            };

            IDocumentsOperations documentsOperations = Substitute.For <IDocumentsOperations>();

            documentsOperations
            .SearchWithHttpMessagesAsync <SpecificationIndex>(Arg.Is <string>(_ => _ == $"\"{existingId}\""),
                                                              Arg.Is <SearchParameters>(_ => _.SearchFields.SequenceEqual(new[]
            {
                "id"
            })))
            .Returns(Task.FromResult(documentSearchResult));

            ISearchServiceClient searchServiceClient = Substitute.For <ISearchServiceClient>();

            searchIndexClient.Documents.Returns(documentsOperations);

            SearchRepository <SpecificationIndex> searchRepository = new SearchRepository <SpecificationIndex>(searchRepositorySettings, searchInitializer, searchServiceClient, searchIndexClient);

            SpecificationIndex specificationIndex = await searchRepository.SearchById(existingId);

            specificationIndex.Should().NotBeNull();
            specificationIndex.Id.Should().Be(existingId);
        }
        public static IServiceCollection AddSearch(this IServiceCollection builder, IConfiguration config)
        {
            SearchRepositorySettings searchSettings = new SearchRepositorySettings
            {
                SearchServiceName = config.GetValue <string>("SearchServiceName"),
                SearchKey         = config.GetValue <string>("SearchServiceKey")
            };

            builder.AddSingleton <SearchRepositorySettings>(searchSettings);

            builder
            .AddSingleton <ISearchRepository <CalculationIndex>, SearchRepository <CalculationIndex> >();

            builder
            .AddSingleton <ISearchRepository <DatasetIndex>, SearchRepository <DatasetIndex> >();

            builder
            .AddSingleton <ISearchRepository <SpecificationIndex>, SearchRepository <SpecificationIndex> >();

            builder
            .AddSingleton <ISearchRepository <ProviderIndex>, SearchRepository <ProviderIndex> >();

            builder
            .AddSingleton <ISearchRepository <ScenarioIndex>, SearchRepository <ScenarioIndex> >();

            builder
            .AddSingleton <ISearchRepository <TestScenarioResultIndex>, SearchRepository <TestScenarioResultIndex> >();

            builder
            .AddSingleton <ISearchRepository <CalculationProviderResultsIndex>, SearchRepository <CalculationProviderResultsIndex> >();

            builder
            .AddSingleton <ISearchRepository <DatasetDefinitionIndex>, SearchRepository <DatasetDefinitionIndex> >();

            builder
            .AddSingleton <ISearchRepository <AllocationNotificationFeedIndex>, SearchRepository <AllocationNotificationFeedIndex> >();

            builder
            .AddSingleton <ISearchRepository <ProviderCalculationResultsIndex>, SearchRepository <ProviderCalculationResultsIndex> >();

            builder
            .AddSingleton <ISearchRepository <DatasetVersionIndex>, SearchRepository <DatasetVersionIndex> >();

            return(builder);
        }
Exemple #6
0
        private static void RegisterSpecificationServiceComponents(IServiceCollection serviceCollection, IConfiguration configuration)
        {
            serviceCollection.AddSingleton(ctx => configuration);
            serviceCollection.AddScoped <ISpecificationPublishingService, SpecificationPublishingService>();
            serviceCollection.AddSingleton <IProviderFundingPublishingService, ProviderFundingPublishingService>();
            serviceCollection.AddSingleton <IHealthChecker, ProviderFundingPublishingService>();
            serviceCollection.AddSingleton <ISpecificationIdServiceRequestValidator, PublishSpecificationValidator>();
            serviceCollection.AddSingleton <IPublishedProviderIdsServiceRequestValidator, PublishedProviderIdsValidator>();
            serviceCollection.AddSingleton <IPublishedProviderFundingService, PublishedProviderFundingService>();
            serviceCollection.AddSingleton <ISpecificationService, SpecificationService>();
            serviceCollection.AddSingleton <ICalculationsService, CalculationsService>();
            serviceCollection.AddSingleton <IProviderService, ProviderService>();
            serviceCollection.AddSingleton <IPublishedProviderIndexerService, PublishedProviderIndexerService>();
            serviceCollection.AddSingleton <IPublishProviderExclusionCheck, PublishedProviderExclusionCheck>();
            serviceCollection.AddSingleton <IFundingLineValueOverride, FundingLineValueOverride>();
            serviceCollection.AddSingleton <IPublishedFundingDateService, PublishedFundingDateService>();
            serviceCollection.AddSingleton <IPublishedFundingDataService, PublishedFundingDataService>();
            serviceCollection.AddSingleton <IPublishedProviderContentPersistanceService, PublishedProviderContentPersistanceService>();
            serviceCollection.AddSingleton <ICreateRefreshFundingJobs, RefreshFundingJobCreation>();
            serviceCollection.AddSingleton <ICreateApproveAllFundingJobs, ApproveAllFundingJobCreation>();
            serviceCollection.AddSingleton <ICreateApproveBatchFundingJobs, ApproveBatchFundingJobCreation>();
            serviceCollection.AddSingleton <ICreateAllPublishProviderFundingJobs, AllPublishProviderFundingJobCreation>();
            serviceCollection.AddSingleton <ICreatePublishIntegrityJob, PublishIntegrityCheckJobCreation>();
            serviceCollection.AddSingleton <ICreateBatchPublishProviderFundingJobs, BatchPublishProviderFundingJobCreation>();
            serviceCollection.AddSingleton <ICreateDeleteSpecificationJobs, DeleteSpecificationJobCreation>();
            serviceCollection.AddSingleton <ICreateDeletePublishedProvidersJobs, DeletePublishedProvidersJobCreation>();
            serviceCollection.AddSingleton <IPublishedFundingStatusUpdateService, PublishedFundingStatusUpdateService>();
            serviceCollection.AddSingleton <IDeleteSpecifications, DeleteSpecificationService>();
            serviceCollection.AddSingleton <IDeletePublishedProvidersService, DeletePublishedProvidersService>();
            serviceCollection.AddSingleton <IDeleteFundingSearchDocumentsService, DeleteFundingSearchDocumentsService>();
            serviceCollection.AddSingleton <IDeselectSpecificationForFundingService, DeselectSpecificationForFundingService>();
            serviceCollection.AddSingleton <IDeletePublishedFundingBlobDocumentsService, DeletePublishedFundingBlobDocumentsService>();
            serviceCollection.AddSingleton <IPublishedProviderFundingStructureService, PublishedProviderFundingStructureService>();

            PolicySettings policySettings = ServiceCollectionExtensions.GetPolicySettings(configuration);
            OrganisationGroupResiliencePolicies organisationResiliencePolicies = CreateResiliencePolicies(policySettings);

            serviceCollection.AddSingleton <IOrganisationGroupResiliencePolicies>(organisationResiliencePolicies);
            serviceCollection.AddSingleton <IOrganisationGroupTargetProviderLookup, OrganisationGroupTargetProviderLookup>();
            serviceCollection.AddSingleton <IOrganisationGroupGenerator, OrganisationGroupGenerator>();

            serviceCollection.AddSingleton <IJobsRunning, JobsRunning>();
            serviceCollection.AddSingleton <ICalculationPrerequisiteCheckerService, CalculationPrerequisiteCheckerService>();

            serviceCollection.AddScoped <IPrerequisiteCheckerLocator, PrerequisiteCheckerLocator>();
            serviceCollection.AddScoped <IPrerequisiteChecker, RefreshPrerequisiteChecker>();
            serviceCollection.AddScoped <IPrerequisiteChecker, PublishAllPrerequisiteChecker>();
            serviceCollection.AddScoped <IPrerequisiteChecker, PublishBatchPrerequisiteChecker>();
            serviceCollection.AddScoped <IPrerequisiteChecker, ApproveAllProvidersPrerequisiteChecker>();
            serviceCollection.AddScoped <IPrerequisiteChecker, ApproveBatchProvidersPrerequisiteChecker>();

            serviceCollection.AddSingleton <IPublishedFundingChangeDetectorService, PublishedFundingChangeDetectorService>();

            serviceCollection.AddSingleton <IPublishedFundingGenerator, PublishedFundingGenerator>();

            SearchRepositorySettings searchSettings = new SearchRepositorySettings
            {
                SearchServiceName = configuration.GetValue <string>("SearchServiceName"),
                SearchKey         = configuration.GetValue <string>("SearchServiceKey")
            };

            serviceCollection.AddSingleton(searchSettings);
            serviceCollection.AddSingleton <ISearchRepository <PublishedFundingIndex>, SearchRepository <PublishedFundingIndex> >();
            serviceCollection.AddSingleton <IPublishedFundingContentsPersistanceService>((ctx) =>
            {
                BlobStorageOptions storageSettings = new BlobStorageOptions();

                configuration.Bind("AzureStorageSettings", storageSettings);

                storageSettings.ContainerName = "publishedfunding";

                IBlobContainerRepository blobContainerRepository = new BlobContainerRepository(storageSettings);

                IBlobClient blobClient = new BlobClient(blobContainerRepository);

                IPublishedFundingContentsGeneratorResolver publishedFundingContentsGeneratorResolver = ctx.GetService <IPublishedFundingContentsGeneratorResolver>();

                ISearchRepository <PublishedFundingIndex> searchRepository = ctx.GetService <ISearchRepository <PublishedFundingIndex> >();

                IPublishingResiliencePolicies publishingResiliencePolicies = ctx.GetService <IPublishingResiliencePolicies>();

                return(new PublishedFundingContentsPersistanceService(publishedFundingContentsGeneratorResolver,
                                                                      blobClient,
                                                                      publishingResiliencePolicies,
                                                                      ctx.GetService <IPublishingEngineOptions>()));
            });
        }