public void ParseFilters_Filters_MapsCorrectly(string filterName) { // Arrange var searchPhraseParseResult = new SearchPhraseParseResult { Filters = new List <IFilter> { base.GetFilterByName(filterName) } }; _phraseParserMock .Setup(x => x.Parse(It.IsAny <string>())) .Returns(searchPhraseParseResult); // Act var result = _indexSearchRequestBuilder .ParseFilters(_phraseParserMock.Object, _fixture.Create <string>()) .Build(); // Assert var filters = result.Filter.As <AndFilter>().ChildFilters; base.AssertFiltersContainFilterByTypeName(filters, filterName); }
public void ParseFilters_TermFilterWithoutWildCards_MapsCorrectly() { // Arrange var termFilter = _fixture.Create <TermFilter>(); var searchPhraseParseResult = new SearchPhraseParseResult { Filters = new List <IFilter> { termFilter } }; _phraseParserMock .Setup(x => x.Parse(It.IsAny <string>())) .Returns(searchPhraseParseResult); // Act var result = _indexSearchRequestBuilder .ParseFilters(_phraseParserMock.Object, _fixture.Create <string>()) .Build(); // Assert var filters = result.Filter.As <AndFilter>().ChildFilters; filters.Should().ContainEquivalentOf(termFilter); }
public void ParseFilters_TermFilterWildCards_MapsCorrectly(string wildcard) { // Arrange var termFilter = _fixture.Create <TermFilter>(); termFilter.Values.Add(wildcard); var searchPhraseParseResult = new SearchPhraseParseResult { Filters = new List <IFilter> { termFilter }, }; _phraseParserMock .Setup(x => x.Parse(It.IsAny <string>())) .Returns(searchPhraseParseResult); // Act var result = _indexSearchRequestBuilder .ParseFilters(_phraseParserMock.Object, _fixture.Create <string>()) .Build(); // Assert var filters = result.Filter.As <AndFilter>().ChildFilters; filters.Should().ContainEquivalentOf(new OrFilter { ChildFilters = new List <IFilter> { new WildCardTermFilter { FieldName = termFilter.FieldName, Value = wildcard }, new TermFilter { Values = termFilter.Values.Where(x => !x.Contains(wildcard)).ToList(), FieldName = termFilter.FieldName } } }); }
public virtual SearchPhraseParseResult Parse(string input) { var stream = CharStreams.fromstring(input); var lexer = new SearchPhraseLexer(stream); var tokens = new CommonTokenStream(lexer); var parser = new Antlr.SearchPhraseParser(tokens) { BuildParseTree = true }; var listener = new SearchPhraseListener(); ParseTreeWalker.Default.Walk(listener, parser.searchPhrase()); var result = new SearchPhraseParseResult { Keyword = string.Join(" ", listener.Keywords), Filters = listener.Filters, }; return(result); }
public void ParseFacets_FacetPhraseNotNull_MappingCorrect() { // Arrange var idsFilter = _fixture.Create <IdsFilter>(); var rangeFilter = _fixture.Create <RangeFilter>(); var termFilter = _fixture.Create <TermFilter>(); var searchPhrase = _fixture.Create <string>(); var keywords = _fixture.CreateMany <string>(); var searchPhraseParseResult = new SearchPhraseParseResult { Filters = new List <IFilter> { idsFilter, rangeFilter, termFilter }, Keyword = string.Join(" ", keywords) }; _phraseParserMock .Setup(x => x.Parse(It.IsAny <string>())) .Returns(searchPhraseParseResult); // Act var actual = _indexSearchRequestBuilder .ParseFacets(_phraseParserMock.Object, searchPhrase) .Build(); // Assert actual.Aggregations.Should().ContainEquivalentOf(new RangeAggregationRequest { Id = rangeFilter.As <IFilter>().Stringify(), FieldName = rangeFilter.FieldName, Values = rangeFilter.Values.Select(x => new RangeAggregationRequestValue { Id = x.Stringify(), Lower = x.Lower, Upper = x.Upper, IncludeLower = x.IncludeLower, IncludeUpper = x.IncludeUpper }).ToList() }, config => config.Excluding(x => x.Filter)); foreach (var fieldName in keywords) { var filter = new TermFilter { FieldName = fieldName, Values = new List <string>() }; actual.Aggregations.Should().ContainEquivalentOf(new TermAggregationRequest { Id = filter.As <IFilter>().Stringify(), FieldName = filter.FieldName, Filter = filter }); } actual.Aggregations.Should().ContainEquivalentOf(new TermAggregationRequest { Id = termFilter.As <IFilter>().Stringify(), FieldName = termFilter.FieldName, Filter = termFilter }); actual.Aggregations.Count.Should().Be( searchPhraseParseResult.Filters.OfType <RangeFilter>().Count() + searchPhraseParseResult.Filters.OfType <TermFilter>().Count()); }