Example #1
0
        public void Campaign()
        {
            var criteria = new[]
            {
                new CampaignSearchCriteria
                {
                    InternalName   = CampaignSearchCriteria.DonatedToCampaign,
                    SearchOperator = SearchOperator.StartsWith,
                    Type           = SearchFieldType.String,
                    Value          = "Christmas"
                }
            };

            var expr = new SearchQueryService().CompileCampaignCriteria(criteria, null);

            var reference = expr.LeftOperand as ObjectReference;

            Assert.IsNotNull(reference);
            Assert.AreEqual("Name", reference.GetName());
            Assert.AreEqual(SimpleExpressionType.Function, expr.Type);
            var function = expr.RightOperand as SimpleFunction;

            Assert.IsNotNull(function);
            Assert.AreEqual("like", function.Name.ToLowerInvariant());
            Assert.AreEqual(1, function.Args.Count);
            Assert.AreEqual("Christmas%", function.Args.First());
        }
Example #2
0
        public void Campaign()
        {
            var criteria = new[]
                               {
                                   new CampaignSearchCriteria
                                       {
                                           InternalName = CampaignSearchCriteria.DonatedToCampaign,
                                           SearchOperator = SearchOperator.StartsWith,
                                           Type = SearchFieldType.String,
                                           Value = "Christmas"
                                       }
                               };

            var expr = new SearchQueryService().CompileCampaignCriteria(criteria, null);

            var reference = expr.LeftOperand as ObjectReference;
            Assert.IsNotNull(reference);
            Assert.AreEqual("Name", reference.GetName());
            Assert.AreEqual(SimpleExpressionType.Function, expr.Type);
            var function = expr.RightOperand as SimpleFunction;
            Assert.IsNotNull(function);
            Assert.AreEqual("like", function.Name.ToLowerInvariant());
            Assert.AreEqual(1, function.Args.Count);
            Assert.AreEqual("Christmas%", function.Args.First());
        }
Example #3
0
        public void LocationOnPartialPostalCode()
        {
            var criteria = new[]
            {
                new LocationSearchCriteria
                {
                    InternalName   = LocationSearchCriteria.PostalCode,
                    SearchOperator = SearchOperator.StartsWith,
                    Type           = SearchFieldType.String,
                    Value          = "N1"
                }
            };

            var expr = new SearchQueryService().CompileLocationCriteria(criteria, null);

            var reference = expr.LeftOperand as ObjectReference;

            Assert.IsNotNull(reference);
            Assert.AreEqual("postalcode", reference.GetName());
            Assert.AreEqual(SimpleExpressionType.Function, expr.Type);
            var function = expr.RightOperand as SimpleFunction;

            Assert.IsNotNull(function);
            Assert.AreEqual("like", function.Name.ToLowerInvariant());
            Assert.AreEqual(1, function.Args.Count);
            Assert.AreEqual("N1%", function.Args.First());
        }
Example #4
0
        private SearchQueryService SetupSearchQueryService()
        {
            ISearchParameterCache ISearchParameterCache = SetupSearchParameterCache();
            SearchQueryFactory    SearchQueryFactory    = SetupSearchQueryFactory(ISearchParameterCache);
            IResourceTypeSupport  IResourceTypeSupport  = new ResourceTypeSupport();
            var IKnownResourceMock = IKnownResource_MockFactory.Get();
            IChainQueryProcessingService IChainQueryProcessingService = new ChainQueryProcessingService(IResourceTypeSupport, IKnownResourceMock.Object, ISearchParameterCache, SearchQueryFactory);
            SearchQueryService           SearchQueryService           = new SearchQueryService(ISearchParameterCache, SearchQueryFactory, IResourceTypeSupport, IKnownResourceMock.Object, IChainQueryProcessingService);

            return(SearchQueryService);
        }
Example #5
0
        public async Task get_search_query_by_userId_async()
        {
            var DbService        = new SearchQueryDbService(mockContext.Object);
            var mockLogicService = new Mock <SearchQueryService>();
            var service          = new SearchQueryService(mapper, DbService);

            //Act
            var x = await service.GetByUserIdAsync("1");

            //Assert
            Assert.AreEqual(1, x.Count());
        }
Example #6
0
        public void get_search_query_by_userId()
        {
            var DbService        = new SearchQueryDbService(mockContext.Object);
            var mockLogicService = new Mock <SearchQueryService>();
            var service          = new SearchQueryService(mapper, DbService);

            //Act
            var x = service.GetByUserId("1").First();

            //Assert
            Assert.AreEqual(x.UserId, "1");
        }
Example #7
0
        public void remove_query_by_id()
        {
            var DbService        = new SearchQueryDbService(mockContext.Object);
            var mockLogicService = new Mock <SearchQueryService>();
            var service          = new SearchQueryService(mapper, DbService);

            //Act
            service.RemoveById("1");
            //Assert
            mockContext.Verify(m => m.SaveChanges(), Times.Once());
            mockSet.Verify(m => m.Remove(It.IsAny <SearchQueryDB>()), Times.Once());
        }
Example #8
0
        public void get_all_search_queries()
        {
            var DbService        = new SearchQueryDbService(mockContext.Object);
            var mockLogicService = new Mock <SearchQueryService>();
            var service          = new SearchQueryService(mapper, DbService);

            //Act
            var x = service.GetAll();

            //Assert
            Assert.AreEqual(x.Count(), queries.Select(p => p).ToList().Count());
        }
Example #9
0
        public void remove_all_search_queries()
        {
            var DbService        = new SearchQueryDbService(mockContext.Object);
            var mockLogicService = new Mock <SearchQueryService>();
            var service          = new SearchQueryService(mapper, DbService);

            //Act
            service.RemoveAll();

            //Assert
            mockContext.Verify(m => m.SaveChanges(), Times.Once());
            mockSet.Verify(m => m.RemoveRange(It.IsAny <IEnumerable <SearchQueryDB> >()), Times.Once());
        }
Example #10
0
        public async Task get_all_search_queries_async()
        {
            //Arrage
            var DbService        = new SearchQueryDbService(mockContext.Object);
            var mockLogicService = new Mock <SearchQueryService>();
            var service          = new SearchQueryService(mapper, DbService);

            //Act
            var q = await service.GetAllAsync();

            //Assert
            Assert.AreEqual(queries.Select(p => p).ToList().Count(), q.Count());
        }
Example #11
0
        public void Facet()
        {
            var search   = new SearchQueryService();
            var criteria = new[]
            {
                new FacetSearchCriteria
                {
                    InternalName   = "freeTextFacet_1",
                    DisplayName    = "Test",
                    FacetId        = 1,
                    SearchOperator = SearchOperator.StartsWith,
                    Type           = SearchFieldType.String,
                    Value          = "GiveCamp"
                }
            };

            var expr = search.CompileFacetCriteria(criteria, null);

            Assert.AreEqual(SimpleExpressionType.And, expr.Type);

            var first = expr.LeftOperand as SimpleExpression;

            Assert.IsNotNull(first);
            var reference = first.LeftOperand as ObjectReference;

            Assert.IsNotNull(reference);
            Assert.AreEqual("FacetId", reference.GetName());
            Assert.AreEqual("freeTextFacet_1", reference.GetOwner().GetAlias());
            Assert.AreEqual(SimpleExpressionType.Equal, first.Type);
            Assert.AreEqual(1, first.RightOperand);

            var second = expr.RightOperand as SimpleExpression;

            Assert.IsNotNull(second);
            reference = second.LeftOperand as ObjectReference;
            Assert.IsNotNull(reference);
            Assert.AreEqual("FreeTextValue", reference.GetName());
            Assert.AreEqual("freeTextFacet_1", reference.GetOwner().GetAlias());
            var function = second.RightOperand as SimpleFunction;

            Assert.IsNotNull(function);
            Assert.AreEqual("like", function.Name.ToLowerInvariant());
            Assert.AreEqual(1, function.Args.Count);
            Assert.AreEqual("GiveCamp%", function.Args.First());
            Assert.AreEqual(SimpleExpressionType.Function, second.Type);
        }
Example #12
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);
            }
        }
Example #13
0
        public void add_search_query()
        {
            var DbService        = new SearchQueryDbService(mockContext.Object);
            var mockLogicService = new Mock <SearchQueryService>();
            var service          = new SearchQueryService(mapper, DbService);

            //Act
            var b = new SearchQueryDTO
            {
                Id    = "1",
                Date  = DateTime.Now,
                Query = "search query"
            };
            var q   = service.Add(b);
            var all = DbService.GetAll().Count();

            //Assert
            mockContext.Verify(m => m.SaveChanges(), Times.Once());
            Assert.AreEqual(q.Query, b.Query);
        }
Example #14
0
        public void LocationOnRegion()
        {
            var criteria = new[]
            {
                new LocationSearchCriteria
                {
                    InternalName   = LocationSearchCriteria.Region,
                    SearchOperator = SearchOperator.NotEqualTo,
                    Type           = SearchFieldType.String,
                    Value          = "Yorkshire"
                }
            };

            var expr = new SearchQueryService().CompileLocationCriteria(criteria, null);

            var reference = expr.LeftOperand as ObjectReference;

            Assert.IsNotNull(reference);
            Assert.AreEqual("region", reference.GetName());
            Assert.AreEqual(SimpleExpressionType.NotEqual, expr.Type);
            Assert.AreEqual("Yorkshire", expr.RightOperand);
        }
Example #15
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);
            }
        }
Example #16
0
        public void LocationOnRegion()
        {
            var criteria = new[]
                               {
                                   new LocationSearchCriteria
                                       {
                                           InternalName = LocationSearchCriteria.Region,
                                           SearchOperator = SearchOperator.NotEqualTo,
                                           Type = SearchFieldType.String,
                                           Value = "Yorkshire"
                                       }
                               };

            var expr = new SearchQueryService().CompileLocationCriteria(criteria, null);

            var reference = expr.LeftOperand as ObjectReference;
            Assert.IsNotNull(reference);
            Assert.AreEqual("region", reference.GetName());
            Assert.AreEqual(SimpleExpressionType.NotEqual, expr.Type);
            Assert.AreEqual("Yorkshire", expr.RightOperand);
        }
Example #17
0
        public void LocationOnPartialPostalCode()
        {
            var criteria = new[]
                               {
                                   new LocationSearchCriteria
                                       {
                                           InternalName = LocationSearchCriteria.PostalCode,
                                           SearchOperator = SearchOperator.StartsWith,
                                           Type = SearchFieldType.String,
                                           Value = "N1"
                                       }
                               };

            var expr = new SearchQueryService().CompileLocationCriteria(criteria, null);

            var reference = expr.LeftOperand as ObjectReference;
            Assert.IsNotNull(reference);
            Assert.AreEqual("postalcode", reference.GetName());
            Assert.AreEqual(SimpleExpressionType.Function, expr.Type);
            var function = expr.RightOperand as SimpleFunction;
            Assert.IsNotNull(function);
            Assert.AreEqual("like", function.Name.ToLowerInvariant());
            Assert.AreEqual(1, function.Args.Count);
            Assert.AreEqual("N1%", function.Args.First());
        }
Example #18
0
        public void Facet()
        {
            var search = new SearchQueryService();
            var criteria = new[]
                               {
                                   new FacetSearchCriteria
                                       {
                                           InternalName = "freeTextFacet_1",
                                           DisplayName = "Test",
                                           FacetId = 1,
                                           SearchOperator = SearchOperator.StartsWith,
                                           Type = SearchFieldType.String,
                                           Value = "GiveCamp"
                                       }
                               };

            var expr = search.CompileFacetCriteria(criteria, null);

            Assert.AreEqual(SimpleExpressionType.And, expr.Type);

            var first = expr.LeftOperand as SimpleExpression;
            Assert.IsNotNull(first);
            var reference = first.LeftOperand as ObjectReference;
            Assert.IsNotNull(reference);
            Assert.AreEqual("FacetId", reference.GetName());
            Assert.AreEqual("freeTextFacet_1", reference.GetOwner().GetAlias());
            Assert.AreEqual(SimpleExpressionType.Equal, first.Type);
            Assert.AreEqual(1, first.RightOperand);

            var second = expr.RightOperand as SimpleExpression;
            Assert.IsNotNull(second);
            reference = second.LeftOperand as ObjectReference;
            Assert.IsNotNull(reference);
            Assert.AreEqual("FreeTextValue", reference.GetName());
            Assert.AreEqual("freeTextFacet_1", reference.GetOwner().GetAlias());
            var function = second.RightOperand as SimpleFunction;
            Assert.IsNotNull(function);
            Assert.AreEqual("like", function.Name.ToLowerInvariant());
            Assert.AreEqual(1, function.Args.Count);
            Assert.AreEqual("GiveCamp%", function.Args.First());
            Assert.AreEqual(SimpleExpressionType.Function, second.Type);
        }
 public SearchController()
 {
     service = new SearchQueryService <SearchableMediaItem>();
 }
Example #20
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);
                    }
                }
            }
        }
Example #21
0
        public void LocationOnCity()
        {
            var criteria = new[]
                               {
                                   new LocationSearchCriteria
                                       {
                                           InternalName = LocationSearchCriteria.City,
                                           SearchOperator = SearchOperator.EqualTo,
                                           Type = SearchFieldType.String,
                                           Value = "London"
                                       }
                               };

            var expr = new SearchQueryService(new DatabaseProvider()).CompileLocationCriteria(criteria, null);

            var reference = expr.LeftOperand as ObjectReference;
            Assert.IsNotNull(reference);
            Assert.AreEqual("city", reference.GetName());
            Assert.AreEqual(SimpleExpressionType.Equal, expr.Type);
            Assert.AreEqual("London", expr.RightOperand);
        }
Example #22
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);
        }