Esempio n. 1
0
        public void ChainQueryNegative(FhirVersion fhirVersion, ResourceType resourceContext, string parameterName, string parameterValue, string InvalidUnsupported)
        {
            //Prepare
            SearchQueryService SearchQueryService = SetupSearchQueryService();

            Dictionary <string, StringValues> QueryDictonary = new Dictionary <string, StringValues>
            {
                { parameterName, new StringValues(parameterValue) },
            };

            FhirSearchQuery FhirSearchQuery = new FhirSearchQuery();

            FhirSearchQuery.Parse(QueryDictonary);

            //Act
            ISerachQueryServiceOutcome Outcome = SearchQueryService.Process(fhirVersion, resourceContext, FhirSearchQuery).Result;

            //Assert
            Assert.NotNull(Outcome);
            Assert.Null(Outcome.CountRequested);
            Assert.Equal(0, Outcome.SearchQueryList.Count);
            Assert.Equal(Common.Enums.ResourceType.Observation, Outcome.ResourceContext);
            if (InvalidUnsupported.ToLower() == "invalid")
            {
                Assert.True(Outcome.InvalidSearchQueryList.Count > 0);
            }
            else
            {
                Assert.True(Outcome.UnsupportedSearchQueryList.Count > 0);
            }

            foreach (var InvalidItem in Outcome.InvalidSearchQueryList)
            {
                Assert.Equal(parameterName, InvalidItem.Name);
                Assert.Equal(parameterValue, InvalidItem.Value);
                Assert.True(InvalidItem.ErrorMessage.Length > 5);
            }

            foreach (var UnsupportedItem in Outcome.UnsupportedSearchQueryList)
            {
                Assert.Equal(parameterName, UnsupportedItem.Name);
                Assert.Equal(parameterValue, UnsupportedItem.Value);
                Assert.True(UnsupportedItem.ErrorMessage.Length > 5);
            }
        }
Esempio n. 2
0
        public void DoubleChainQueryPositive(FhirVersion fhirVersion, ResourceType resourceContext, string parameterName, string parameterValue)
        {
            //Prepare
            SearchQueryService SearchQueryService = SetupSearchQueryService();

            Dictionary <string, StringValues> QueryDictonary = new Dictionary <string, StringValues>
            {
                { parameterName, new StringValues(parameterValue) },
            };

            FhirSearchQuery FhirSearchQuery = new FhirSearchQuery();

            FhirSearchQuery.Parse(QueryDictonary);

            //Act
            ISerachQueryServiceOutcome Outcome = SearchQueryService.Process(fhirVersion, resourceContext, FhirSearchQuery).Result;

            //Assert
            Assert.NotNull(Outcome);
            Assert.Equal(0, Outcome.InvalidSearchQueryList.Count);
            Assert.Null(Outcome.CountRequested);
            Assert.Equal(1, Outcome.SearchQueryList.Count);
            Assert.Equal(Common.Enums.ResourceType.Observation, Outcome.ResourceContext);

            var ChainSearchQuery = Outcome.SearchQueryList[0];

            Assert.NotNull(ChainSearchQuery);

            Assert.Equal("subject", ChainSearchQuery.Name);
            Assert.NotNull(ChainSearchQuery.ChainedSearchParameter);
            Assert.Equal("organization", ChainSearchQuery.ChainedSearchParameter !.Name);
            Assert.NotNull(ChainSearchQuery.ChainedSearchParameter !.ChainedSearchParameter);
            Assert.Equal("name", ChainSearchQuery.ChainedSearchParameter !.ChainedSearchParameter !.Name);
            if (ChainSearchQuery.ChainedSearchParameter !.ChainedSearchParameter is SearchQueryString SearchQueryString)
            {
                Assert.Single(SearchQueryString.ValueList);
                Assert.Equal("acmehealth", SearchQueryString.ValueList[0].Value);
            }
        }
Esempio n. 3
0
 public async Task <IList <ResourceStore> > Process(ISerachQueryServiceOutcome ISerachQueryServiceOutcome)
 {
     return(await IResourceStoreRepository.GetSearch(ISerachQueryServiceOutcome.FhirVersion, ISerachQueryServiceOutcome.ResourceContext, ISerachQueryServiceOutcome.SearchQueryList));
 }
Esempio n. 4
0
        public void HasQueryPositive(FhirVersion fhirVersion, ResourceType resourceContext, string Query)
        {
            //Prepare
            SearchQueryService SearchQueryService = SetupSearchQueryService();
            Dictionary <string, StringValues> QueryDictonary;

            QueryDictonary = new Dictionary <string, StringValues>
            {
                { Query.Split('=')[0], new StringValues(Query.Split('=')[1]) },
            };


            FhirSearchQuery FhirSearchQuery = new FhirSearchQuery();

            FhirSearchQuery.Parse(QueryDictonary);

            //Act
            ISerachQueryServiceOutcome Outcome = SearchQueryService.Process(fhirVersion, resourceContext, FhirSearchQuery).Result;

            //Assert
            Assert.NotNull(Outcome);
            Assert.Equal(1, Outcome.HasList.Count);
            Assert.Equal(0, Outcome.InvalidSearchQueryList.Count);
            Assert.Equal(0, Outcome.UnsupportedSearchQueryList.Count);
            Assert.Equal(0, Outcome.SearchQueryList.Count);
            Assert.Equal(resourceContext, Outcome.ResourceContext);
            var HasItem = Outcome.HasList[0];

            Assert.Equal("Observation", HasItem.TargetResourceForSearchQuery.GetCode());
            if (Query.Split("_has").Length == 2)
            {
                Assert.Null(HasItem.ChildSearchQueryHas);
                Assert.NotNull(HasItem.BackReferenceSearchParameter);
                Assert.Equal("patient", HasItem.BackReferenceSearchParameter !.Name);
                Assert.NotNull(HasItem.SearchQuery);
                Assert.Equal("code", HasItem.SearchQuery !.Name);
                if (HasItem.SearchQuery is SearchQueryString SearchQueryString)
                {
                    Assert.Equal("1234-5", SearchQueryString.ValueList[0].Value);
                }
            }
            else
            {
                Assert.NotNull(HasItem.BackReferenceSearchParameter);
                Assert.Equal("patient", HasItem.BackReferenceSearchParameter !.Name);
                Assert.Null(HasItem.SearchQuery);
                Assert.NotNull(HasItem.ChildSearchQueryHas);
                Assert.Equal("AuditEvent", HasItem.ChildSearchQueryHas !.TargetResourceForSearchQuery.GetCode());
                Assert.NotNull(HasItem.ChildSearchQueryHas !.BackReferenceSearchParameter);
                Assert.Equal("entity", HasItem.ChildSearchQueryHas !.BackReferenceSearchParameter !.Name);
                Assert.NotNull(HasItem.ChildSearchQueryHas !.SearchQuery);
                Assert.Equal("entity-name", HasItem.ChildSearchQueryHas !.SearchQuery !.Name);
                if (HasItem.ChildSearchQueryHas !.SearchQuery is object)
                {
                    if (HasItem.ChildSearchQueryHas.SearchQuery is SearchQueryString SearchQueryString)
                    {
                        Assert.Equal("MyUserId".ToLower(), SearchQueryString.ValueList[0].Value);
                    }
                }
            }
        }
Esempio n. 5
0
        public void IncludeQueryPositive(FhirVersion fhirVersion, ResourceType resourceContext, IncludeType parameterInclude, string isRecurseIterate, ResourceType sourceResource, string searchParameterName, ResourceType?modifierResource)
        {
            //Prepare
            SearchQueryService SearchQueryService = SetupSearchQueryService();
            Dictionary <string, StringValues> QueryDictonary;

            if (!string.IsNullOrWhiteSpace(isRecurseIterate))
            {
                if (modifierResource.HasValue)
                {
                    QueryDictonary = new Dictionary <string, StringValues>
                    {
                        { $"{parameterInclude.GetCode()}:{isRecurseIterate}", new StringValues($"{sourceResource.GetCode()}:{searchParameterName}:{modifierResource.GetCode()}") },
                    };
                }
                else
                {
                    QueryDictonary = new Dictionary <string, StringValues>
                    {
                        { $"{parameterInclude.GetCode()}:{isRecurseIterate}", new StringValues($"{sourceResource.GetCode()}:{searchParameterName}") },
                    };
                }
            }
            else
            {
                if (modifierResource.HasValue)
                {
                    QueryDictonary = new Dictionary <string, StringValues>
                    {
                        { $"{parameterInclude.GetCode()}", new StringValues($"{sourceResource.GetCode()}:{searchParameterName}:{modifierResource.GetCode()}") },
                    };
                }
                else
                {
                    QueryDictonary = new Dictionary <string, StringValues>
                    {
                        { $"{parameterInclude.GetCode()}", new StringValues($"{sourceResource.GetCode()}:{searchParameterName}") },
                    };
                }
            }

            FhirSearchQuery FhirSearchQuery = new FhirSearchQuery();

            FhirSearchQuery.Parse(QueryDictonary);

            //Act
            ISerachQueryServiceOutcome Outcome = SearchQueryService.Process(fhirVersion, resourceContext, FhirSearchQuery).Result;

            //Assert
            Assert.NotNull(Outcome);
            Assert.Equal(0, Outcome.InvalidSearchQueryList.Count);
            Assert.Null(Outcome.CountRequested);
            Assert.Equal(0, Outcome.SearchQueryList.Count);
            Assert.Equal(Common.Enums.ResourceType.Observation, Outcome.ResourceContext);
            Assert.Equal(1, Outcome.IncludeList.Count);

            var IncludeItem = Outcome.IncludeList[0];

            if (isRecurseIterate == "recurse")
            {
                Assert.True(IncludeItem.IsRecurse);
                Assert.True(IncludeItem.IsRecurseIterate);
            }
            else
            {
                Assert.False(IncludeItem.IsRecurse);
            }
            if (isRecurseIterate == "iterate")
            {
                Assert.True(IncludeItem.IsIterate);
                Assert.True(IncludeItem.IsRecurseIterate);
            }
            else
            {
                Assert.False(IncludeItem.IsIterate);
            }
            Assert.Equal(parameterInclude, IncludeItem.Type);
            Assert.Equal(sourceResource, IncludeItem.SourceResourceType);
            if (modifierResource.HasValue)
            {
                Assert.Equal(modifierResource, IncludeItem.SearchParameterTargetResourceType);
            }
            else
            {
                Assert.Null(IncludeItem.SearchParameterTargetResourceType);
            }

            Assert.Single(IncludeItem.SearchParameterList);
            var SearchParameter = IncludeItem.SearchParameterList[0];

            Assert.Equal(searchParameterName, SearchParameter.Name);
        }