public ReindexUtilitiesTests(ITestOutputHelper output) { _output = output; _searchParameterHashMap = new Dictionary<string, string>() { { "Patient", "hash1" } }; Func<Health.Extensions.DependencyInjection.IScoped<IFhirDataStore>> fhirDataStoreScope = () => _fhirDataStore.CreateMockScope(); _searchParameterStatusManager = new SearchParameterStatusManager(_searchParameterStatusDataStore, _searchParameterDefinitionManager, _searchParameterSupportResolver, _mediator, NullLogger<SearchParameterStatusManager>.Instance); _reindexUtilities = new ReindexUtilities(fhirDataStoreScope, _searchIndexer, _resourceDeserializer, _searchParameterDefinitionManager, _searchParameterStatusManager, _resourceWrapperFactory); }
public async Task InitializeAsync() { _fhirOperationDataStore = _fixture.OperationDataStore; _fhirStorageTestHelper = _fixture.TestHelper; _scopedOperationDataStore = _fixture.OperationDataStore.CreateMockScope(); _scopedDataStore = _fixture.DataStore.CreateMockScope(); _searchParameterStatusDataStore = _fixture.SearchParameterStatusDataStore; _jobConfiguration = new ReindexJobConfiguration(); IOptions <ReindexJobConfiguration> optionsReindexConfig = Substitute.For <IOptions <ReindexJobConfiguration> >(); optionsReindexConfig.Value.Returns(_jobConfiguration); _searchParameterDefinitionManager = new SearchParameterDefinitionManager(ModelInfoProvider.Instance); await _searchParameterDefinitionManager.StartAsync(CancellationToken.None); _supportedSearchParameterDefinitionManager = new SupportedSearchParameterDefinitionManager(_searchParameterDefinitionManager); var fhirRequestContextAccessor = Substitute.For <IFhirRequestContextAccessor>(); _searchableSearchParameterDefinitionManager = new SearchableSearchParameterDefinitionManager(_searchParameterDefinitionManager, fhirRequestContextAccessor); ResourceWrapperFactory wrapperFactory = Mock.TypeWithArguments <ResourceWrapperFactory>( new RawResourceFactory(new FhirJsonSerializer()), _searchIndexer, _searchableSearchParameterDefinitionManager, Deserializers.ResourceDeserializer); _searchParameterStatusManager = new SearchParameterStatusManager( _searchParameterStatusDataStore, _searchParameterDefinitionManager, _searchParameterSupportResolver, _mediator); _createReindexRequestHandler = new CreateReindexRequestHandler( _fhirOperationDataStore, DisabledFhirAuthorizationService.Instance, optionsReindexConfig, _searchParameterDefinitionManager); _reindexUtilities = new ReindexUtilities( () => _scopedDataStore, _searchIndexer, Deserializers.ResourceDeserializer, _supportedSearchParameterDefinitionManager, _searchParameterStatusManager, wrapperFactory); coreOptions.Value.Returns(new CoreFeatureConfiguration()); var searchParameterExpressionParser = new SearchParameterExpressionParser(new ReferenceSearchValueParser(fhirRequestContextAccessor)); var expressionParser = new ExpressionParser(() => _searchableSearchParameterDefinitionManager, searchParameterExpressionParser); var searchOptionsFactory = new SearchOptionsFactory(expressionParser, () => _searchableSearchParameterDefinitionManager, coreOptions, fhirRequestContextAccessor, _sortingValidator, NullLogger <SearchOptionsFactory> .Instance); var cosmosSearchService = new FhirCosmosSearchService(searchOptionsFactory, _fixture.DataStore as CosmosFhirDataStore, new QueryBuilder(), _searchParameterDefinitionManager, fhirRequestContextAccessor) as ISearchService; _searchService = cosmosSearchService.CreateMockScope(); await _fhirStorageTestHelper.DeleteAllReindexJobRecordsAsync(CancellationToken.None); }
public SearchParameterUtilities( SearchParameterStatusManager searchParameterStatusManager, ISearchParameterDefinitionManager searchParameterDefinitionManager) { EnsureArg.IsNotNull(searchParameterStatusManager, nameof(searchParameterStatusManager)); EnsureArg.IsNotNull(searchParameterDefinitionManager, nameof(searchParameterDefinitionManager)); _searchParameterStatusManager = searchParameterStatusManager; _searchParameterDefinitionManager = searchParameterDefinitionManager; }
public SearchParameterUtilities( SearchParameterStatusManager searchParameterStatusManager, ISearchParameterDefinitionManager searchParameterDefinitionManager, IModelInfoProvider modelInfoProvider) { EnsureArg.IsNotNull(searchParameterStatusManager, nameof(searchParameterStatusManager)); EnsureArg.IsNotNull(searchParameterDefinitionManager, nameof(searchParameterDefinitionManager)); EnsureArg.IsNotNull(modelInfoProvider, nameof(modelInfoProvider)); _searchParameterStatusManager = searchParameterStatusManager; _searchParameterDefinitionManager = searchParameterDefinitionManager; _modelInfoProvider = modelInfoProvider; }
public SearchParameterOperations( SearchParameterStatusManager searchParameterStatusManager, ISearchParameterDefinitionManager searchParameterDefinitionManager, IModelInfoProvider modelInfoProvider, ISearchParameterSupportResolver searchParameterSupportResolver) { EnsureArg.IsNotNull(searchParameterStatusManager, nameof(searchParameterStatusManager)); EnsureArg.IsNotNull(searchParameterDefinitionManager, nameof(searchParameterDefinitionManager)); EnsureArg.IsNotNull(modelInfoProvider, nameof(modelInfoProvider)); EnsureArg.IsNotNull(searchParameterSupportResolver, nameof(searchParameterSupportResolver)); _searchParameterStatusManager = searchParameterStatusManager; _searchParameterDefinitionManager = searchParameterDefinitionManager; _modelInfoProvider = modelInfoProvider; _searchParameterSupportResolver = searchParameterSupportResolver; }
public ReindexUtilities( Func <IScoped <IFhirDataStore> > fhirDataStoreFactory, ISearchIndexer searchIndexer, ResourceDeserializer deserializer, ISupportedSearchParameterDefinitionManager searchParameterDefinitionManager, SearchParameterStatusManager searchParameterStatusManager) { EnsureArg.IsNotNull(fhirDataStoreFactory, nameof(fhirDataStoreFactory)); EnsureArg.IsNotNull(searchIndexer, nameof(searchIndexer)); EnsureArg.IsNotNull(deserializer, nameof(deserializer)); EnsureArg.IsNotNull(searchParameterDefinitionManager, nameof(searchParameterDefinitionManager)); EnsureArg.IsNotNull(searchParameterStatusManager, nameof(searchParameterStatusManager)); _fhirDataStoreFactory = fhirDataStoreFactory; _searchIndexer = searchIndexer; _deserializer = deserializer; _searchParameterDefinitionManager = searchParameterDefinitionManager; _searchParameterStatusManager = searchParameterStatusManager; }
public static SearchParameterDefinitionManager CreateSearchParameterDefinitionManager() { var manager = new SearchParameterDefinitionManager(ModelInfoProvider.Instance); manager.Start(); var statusRegistry = new FilebasedSearchParameterRegistry( manager, ModelInfoProvider.Instance); var statusManager = new SearchParameterStatusManager( statusRegistry, manager, new SearchParameterSupportResolver(manager, Manager), Substitute.For <IMediator>()); statusManager.EnsureInitialized().GetAwaiter().GetResult(); return(manager); }
public static SearchParameterDefinitionManager CreateSearchParameterDefinitionManager() { var manager = new SearchParameterDefinitionManager(new FhirJsonParser(), ModelInfoProvider.Instance); manager.Start(); Type managerType = typeof(SearchParameterDefinitionManager); var statusRegistry = new FilebasedSearchParameterRegistry( manager, managerType.Assembly, $"{managerType.Namespace}.unsupported-search-parameters.json"); var statusManager = new SearchParameterStatusManager( statusRegistry, manager, new SearchParameterSupportResolver(manager, Manager), Substitute.For <IMediator>()); statusManager.EnsureInitialized().GetAwaiter().GetResult(); return(manager); }
public static SearchParameterDefinitionManager CreateSearchParameterDefinitionManager(IModelInfoProvider modelInfoProvider) { if (Manager == null) { throw new InvalidOperationException($"{nameof(Manager)} was not instantiated."); } var definitionManager = new SearchParameterDefinitionManager(modelInfoProvider); definitionManager.Start(); var statusRegistry = new FilebasedSearchParameterRegistry( definitionManager, modelInfoProvider); var statusManager = new SearchParameterStatusManager( statusRegistry, definitionManager, new SearchParameterSupportResolver(definitionManager, Manager), Substitute.For <IMediator>()); statusManager.EnsureInitialized().GetAwaiter().GetResult(); return(definitionManager); }
public SearchParameterStatusManagerTests() { _searchParameterStatusDataStore = Substitute.For <ISearchParameterStatusDataStore>(); _searchParameterDefinitionManager = Substitute.For <ISearchParameterDefinitionManager>(); _searchParameterSupportResolver = Substitute.For <ISearchParameterSupportResolver>(); _mediator = Substitute.For <IMediator>(); _manager = new SearchParameterStatusManager( _searchParameterStatusDataStore, _searchParameterDefinitionManager, _searchParameterSupportResolver, _mediator); _resourceSearchParameterStatuses = new[] { new ResourceSearchParameterStatus { Status = SearchParameterStatus.Enabled, Uri = new Uri(ResourceId), LastUpdated = Clock.UtcNow, }, new ResourceSearchParameterStatus { Status = SearchParameterStatus.Enabled, Uri = new Uri(ResourceLastupdated), IsPartiallySupported = true, LastUpdated = Clock.UtcNow, }, new ResourceSearchParameterStatus { Status = SearchParameterStatus.Disabled, Uri = new Uri(ResourceProfile), LastUpdated = Clock.UtcNow, }, new ResourceSearchParameterStatus { Status = SearchParameterStatus.Supported, Uri = new Uri(ResourceSecurity), LastUpdated = Clock.UtcNow, }, }; _searchParameterStatusDataStore.GetSearchParameterStatuses().Returns(_resourceSearchParameterStatuses); List <string> baseResourceTypes = new List <string>() { "Resource" }; List <string> targetResourceTypes = new List <string>() { "Patient" }; _queryParameter = new SearchParameterInfo("_query", SearchParamType.Token, new Uri(ResourceQuery)); _searchParameterInfos = new[] { new SearchParameterInfo("_id", SearchParamType.Token, new Uri(ResourceId), targetResourceTypes: targetResourceTypes, baseResourceTypes: baseResourceTypes), new SearchParameterInfo("_lastUpdated", SearchParamType.Token, new Uri(ResourceLastupdated), targetResourceTypes: targetResourceTypes, baseResourceTypes: baseResourceTypes), new SearchParameterInfo("_profile", SearchParamType.Token, new Uri(ResourceProfile), targetResourceTypes: targetResourceTypes), new SearchParameterInfo("_security", SearchParamType.Token, new Uri(ResourceSecurity), targetResourceTypes: targetResourceTypes), _queryParameter, }; _searchParameterDefinitionManager.GetSearchParameters("Account") .Returns(_searchParameterInfos); _searchParameterDefinitionManager.AllSearchParameters .Returns(_searchParameterInfos); _searchParameterDefinitionManager.GetSearchParameter(new Uri(ResourceQuery)) .Returns(_queryParameter); _searchParameterSupportResolver .IsSearchParameterSupported(Arg.Any <SearchParameterInfo>()) .Returns((false, false)); _searchParameterSupportResolver .IsSearchParameterSupported(Arg.Is(_searchParameterInfos[4])) .Returns((true, false)); }
public SearchParameterDefinitionManagerTests() { _searchParameterSupportResolver = Substitute.For <ISearchParameterSupportResolver>(); _mediator = Substitute.For <IMediator>(); _searchParameterStatusDataStore = Substitute.For <ISearchParameterStatusDataStore>(); _searchParameterDefinitionManager = new SearchParameterDefinitionManager(ModelInfoProvider.Instance, _mediator); _fhirRequestContextAccessor = Substitute.For <RequestContextAccessor <IFhirRequestContext> >(); _fhirRequestContextAccessor.RequestContext.Returns(_fhirRequestContext); _manager = new SearchParameterStatusManager( _searchParameterStatusDataStore, _searchParameterDefinitionManager, _searchParameterSupportResolver, _mediator); _searchParameterStatusDataStore.GetSearchParameterStatuses() .Returns(new[] { new ResourceSearchParameterStatus { Status = SearchParameterStatus.Enabled, Uri = new Uri(ResourceId), }, new ResourceSearchParameterStatus { Status = SearchParameterStatus.Enabled, Uri = new Uri(ResourceLastUpdated), IsPartiallySupported = true, }, new ResourceSearchParameterStatus { Status = SearchParameterStatus.Disabled, Uri = new Uri(ResourceProfile), }, new ResourceSearchParameterStatus { Status = SearchParameterStatus.Supported, Uri = new Uri(ResourceSecurity), }, }); _queryParameter = new SearchParameterInfo("_query", "_query", SearchParamType.Token, new Uri(ResourceQuery), baseResourceTypes: new List <string>() { "Patient" }); _searchParameterInfos = new[] { new SearchParameterInfo("_id", "_id", SearchParamType.Token, new Uri(ResourceId)), new SearchParameterInfo("_lastUpdated", "_lastUpdated", SearchParamType.Token, new Uri(ResourceLastUpdated)), new SearchParameterInfo("_profile", "_profile", SearchParamType.Token, new Uri(ResourceProfile)), new SearchParameterInfo("_security", "_security", SearchParamType.Token, new Uri(ResourceSecurity)), _queryParameter, }; _testSearchParamInfo = new SearchParameterInfo("_test", "_test", SearchParamType.Special, new Uri(ResourceTest)); _searchParameterSupportResolver .IsSearchParameterSupported(Arg.Any <SearchParameterInfo>()) .Returns((false, false)); _searchParameterSupportResolver .IsSearchParameterSupported(Arg.Is(_searchParameterInfos[4])) .Returns((true, false)); var searchParameterDataStoreValidator = Substitute.For <IDataStoreSearchParameterValidator>(); searchParameterDataStoreValidator.ValidateSearchParameter(Arg.Any <SearchParameterInfo>(), out Arg.Any <string>()).Returns(true, null); var searchService = Substitute.For <ISearchService>(); _searchParameterOperations = new SearchParameterOperations( _manager, _searchParameterDefinitionManager, ModelInfoProvider.Instance, _searchParameterSupportResolver, searchParameterDataStoreValidator, () => searchService.CreateMockScope(), NullLogger <SearchParameterOperations> .Instance); }
public async Task GivenExistingSearchParameters_WhenStartingSearchParameterDefinitionManager_ThenExistingParametersAdded() { // Create some existing search paramters that will be returned when searching for resources // of type SearchParameter var searchParam = new SearchParameter() { Id = "id", Url = "http://test/Patient-preexisting", Type = Hl7.Fhir.Model.SearchParamType.String, Base = new List <ResourceType?>() { ResourceType.Patient }, Expression = "Patient.name", Name = "preexisting", Code = "preexisting", }; SearchResult result = GetSearchResultFromSearchParam(searchParam, "token"); var searchParam2 = new SearchParameter() { Id = "id2", Url = "http://test/Patient-preexisting2", Type = Hl7.Fhir.Model.SearchParamType.String, Base = new List <ResourceType?>() { ResourceType.Patient }, Expression = "Patient.name", Name = "preexisting2", Code = "preexisting2", }; SearchResult result2 = GetSearchResultFromSearchParam(searchParam2, "token2"); var searchParam3 = new SearchParameter() { Id = "QuestionnaireResponse-questionnaire2", Url = "http://hl7.org/fhir/SearchParameter/QuestionnaireResponse-questionnaire2", Type = Hl7.Fhir.Model.SearchParamType.Reference, Base = new List <ResourceType?>() { ResourceType.QuestionnaireResponse }, Expression = "QuestionnaireResponse.questionnaire", Name = "questionnaire2", Code = "questionnaire2", }; SearchResult result3 = GetSearchResultFromSearchParam(searchParam3, "token3"); var searchParam4 = new SearchParameter() { Id = "QuestionnaireResponse-questionnaire", Url = "http://hl7.org/fhir/SearchParameter/QuestionnaireResponse-questionnaire", Type = Hl7.Fhir.Model.SearchParamType.Reference, Base = new List <ResourceType?>() { ResourceType.QuestionnaireResponse }, Expression = "QuestionnaireResponse.questionnaire", Name = "questionnaire", Code = "questionnaire", }; SearchResult result4 = GetSearchResultFromSearchParam(searchParam4, null); var searchService = Substitute.For <ISearchService>(); searchService.SearchAsync(Arg.Is <SearchOptions>(options => options.ContinuationToken == null), Arg.Any <CancellationToken>()) .Returns(result); searchService.SearchAsync( Arg.Is <SearchOptions>( options => options.ContinuationToken == "token"), Arg.Any <CancellationToken>()) .Returns(result2); searchService.SearchAsync( Arg.Is <SearchOptions>( options => options.ContinuationToken == "token2"), Arg.Any <CancellationToken>()) .Returns(result3); searchService.SearchAsync( Arg.Is <SearchOptions>( options => options.ContinuationToken == "token3"), Arg.Any <CancellationToken>()) .Returns(result4); var dataStoreSearchParamValidator = Substitute.For <IDataStoreSearchParameterValidator>(); dataStoreSearchParamValidator.ValidateSearchParameter(Arg.Any <SearchParameterInfo>(), out Arg.Any <string>()).Returns(true); _searchParameterSupportResolver .IsSearchParameterSupported(Arg.Is <SearchParameterInfo>(s => s.Name.StartsWith("preexisting"))) .Returns((true, false)); var searchParameterDefinitionManager = new SearchParameterDefinitionManager(ModelInfoProvider.Instance, _mediator, () => searchService.CreateMockScope(), NullLogger <SearchParameterDefinitionManager> .Instance); await searchParameterDefinitionManager.EnsureInitializedAsync(CancellationToken.None); var statusManager = new SearchParameterStatusManager( _searchParameterStatusDataStore, searchParameterDefinitionManager, _searchParameterSupportResolver, _mediator, NullLogger <SearchParameterStatusManager> .Instance); await statusManager.EnsureInitializedAsync(CancellationToken.None); var patientParams = searchParameterDefinitionManager.GetSearchParameters("Patient"); Assert.False(patientParams.Where(p => p.Name == "preexisting").First().IsSearchable); Assert.True(patientParams.Where(p => p.Name == "preexisting2").First().IsSearchable); var questionnaireParams = searchParameterDefinitionManager.GetSearchParameters("QuestionnaireResponse"); Assert.Single(questionnaireParams.Where(p => p.Name == "questionnaire2")); }