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