public void GivenASPDefinitionManager_WhenInitialed_ThenSearchParametersHashHasValues() { var searchParams = _searchParameterDefinitionManager.GetSearchParameters("Patient"); var patientHash = SearchHelperUtilities.CalculateSearchParameterHash(searchParams); Assert.Equal(patientHash, _searchParameterDefinitionManager.GetSearchParameterHashForResourceType("Patient")); }
public async Task GivenASPDefinitionManager_WhenInitialed_ThenSearchParametersHashHasValues() { await _searchParameterDefinitionManager.Handle(new Messages.Search.SearchParametersUpdatedNotification(new List <SearchParameterInfo>()), CancellationToken.None); var searchParams = _searchParameterDefinitionManager.GetSearchParameters("Patient"); var patientHash = searchParams.CalculateSearchParameterHash(); Assert.Equal(patientHash, _searchParameterDefinitionManager.GetSearchParameterHashForResourceType("Patient")); }
public async Task ListAllUnsupportedTypes() { var unsupported = new UnsupportedSearchParameters(); SearchParameterDefinitionManager manager = await SearchParameterFixtureData.CreateSearchParameterDefinitionManagerAsync(ModelInfoProvider.Instance); var resourceAndSearchParameters = ModelInfoProvider.Instance .GetResourceTypeNames() .Select(resourceType => (resourceType, parameters: manager.GetSearchParameters(resourceType))); foreach (var searchParameterRow in resourceAndSearchParameters) { foreach (SearchParameterInfo parameterInfo in searchParameterRow.parameters) { if (parameterInfo.Code != "_type") { var converters = await GetConvertsForSearchParameters(searchParameterRow.resourceType, parameterInfo); if (converters.All(x => x.hasConverter == false)) { unsupported.Unsupported.Add(parameterInfo.Url); } else if (converters.Any(x => x.hasConverter == false)) { unsupported.PartialSupport.Add(parameterInfo.Url); } } } } // Print the current state to the console _outputHelper.WriteLine(JsonConvert.SerializeObject(unsupported, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.Indented, })); // Check this against the list already in the system: var systemUnsupported = new UnsupportedSearchParameters(); foreach (var searchParameter in resourceAndSearchParameters.SelectMany(x => x.parameters)) { if (!searchParameter.IsSupported) { systemUnsupported.Unsupported.Add(searchParameter.Url); } else if (searchParameter.IsPartiallySupported) { systemUnsupported.PartialSupport.Add(searchParameter.Url); } } // Expect that the static file "unsupported-search-parameters.json" equals the generated list Assert.Equal(systemUnsupported.Unsupported, unsupported.Unsupported); Assert.Equal(systemUnsupported.PartialSupport, unsupported.PartialSupport); }
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")); }