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"));
        }
Esempio n. 3
0
        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"));
        }