@Override public boolean equals(Object o) { return o != null && o instanceof FilterExpression && expression().equals(((FilterExpression) o).expression()); } }
@Override public boolean equals(Object o) { return o != null && o instanceof FilterExpression && expression().equals(((FilterExpression) o).expression()); } }
private <T> void testExpression(List<FilterExpression<T>> filterExpr, Consumer<List<String>> test) { final List<String> expressions = filterExpr.stream() .map(expr -> expr.expression()) .collect(toList()); test.accept(expressions); } }
@Test public void buildsTermFilterExpression() throws Exception { final FilterExpression<Object> filter = FilterExpression.of(ATTRIBUTE_PATH + TERM_VALUE); assertThat(filter.expression()).isEqualTo(ATTRIBUTE_PATH + TERM_VALUE); assertThat(filter.attributePath()).isEqualTo(ATTRIBUTE_PATH); assertThat(filter.value()).isEqualTo(TERM_VALUE); }
@Test public void buildsRangeFilterExpression() throws Exception { final FilterExpression<Object> filter = FilterExpression.of(ATTRIBUTE_PATH + RANGE_VALUE); assertThat(filter.expression()).isEqualTo(ATTRIBUTE_PATH + RANGE_VALUE); assertThat(filter.attributePath()).isEqualTo(ATTRIBUTE_PATH); assertThat(filter.value()).isEqualTo(RANGE_VALUE); }
String queryParametersToString(final boolean urlEncoded) { final UrlQueryBuilder builder = UrlQueryBuilder.of(); Optional.ofNullable(text()).ifPresent(t -> builder.add(TEXT + "." + t.getLocale().toLanguageTag(), t.getValue(), urlEncoded)); facets().forEach(f -> builder.add(FACET, f.expression(), urlEncoded)); Optional.ofNullable(isFuzzy()).ifPresent(b -> builder.add(FUZZY, b.toString(), urlEncoded)); Optional.ofNullable(fuzzyLevel()).ifPresent(b -> builder.add(FUZZY_LEVEL, b.toString(), urlEncoded)); resultFilters().forEach(f -> builder.add(FILTER_RESULTS, f.expression(), urlEncoded)); queryFilters().forEach(f -> builder.add(FILTER_QUERY, f.expression(), urlEncoded)); facetFilters().forEach(f -> builder.add(FILTER_FACETS, f.expression(), urlEncoded)); facetedSearch().forEach(f -> { builder.add(FACET, f.facetExpression().expression(), urlEncoded); f.filterExpressions().forEach(filter -> { builder.add(FILTER_RESULTS, filter.expression(), urlEncoded); builder.add(FILTER_FACETS, filter.expression(), urlEncoded); }); }); sort().forEach(s -> builder.add(SORT, s.expression(), urlEncoded)); if (!facets().isEmpty() || !facetedSearch().isEmpty()) { builder.add("formatBooleanFacet", Boolean.TRUE.toString(), urlEncoded); } Optional.ofNullable(limit()).ifPresent(l -> builder.add(LIMIT, l.toString(), urlEncoded)); Optional.ofNullable(offset()).ifPresent(o -> builder.add(OFFSET, o.toString(), urlEncoded)); expansionPaths().forEach(path -> builder.add(EXPAND, path.toSphereExpand(), urlEncoded)); additionalQueryParameters().forEach(p -> builder.add(p.getName(), p.getValue(), urlEncoded)); return builder.build(); }
@Test public void buildsTermFilterExpression() throws Exception { final List<FilterExpression<Object>> filters = TermFilterSearchModel.of(ATTRIBUTE_PATH, ofString()).isIn(TERMS); assertThat(filters).hasSize(1); final FilterExpression<Object> filter = filters.get(0); assertThat(filter.expression()).isEqualTo(ATTRIBUTE_PATH + TERM_VALUE); assertThat(filter.attributePath()).isEqualTo(ATTRIBUTE_PATH); assertThat(filter.value()).isEqualTo(TERM_VALUE); }
@Test public void buildsRangeFilterExpression() throws Exception { final List<FilterExpression<Object>> filters = RangeTermFilterSearchModel.of(ATTRIBUTE_PATH, ofNumber()).isBetweenAny(FILTER_RANGES); assertThat(filters).hasSize(1); final FilterExpression<Object> filter = filters.get(0); assertThat(filter.expression()).isEqualTo(ATTRIBUTE_PATH + RANGE_VALUE); assertThat(filter.attributePath()).isEqualTo(ATTRIBUTE_PATH); assertThat(filter.value()).isEqualTo(RANGE_VALUE); }
@Test public void categorySubtree() { final List<String> expressionsWithoutSubtrees = ProductProjectionSearch.ofStaged().withQueryFilters(m -> m.categories().id().isIn(asList("id1", "id2"))).queryFilters().stream().map(e -> e.expression()).collect(Collectors.toList()); assertThat(expressionsWithoutSubtrees.get(0)).isEqualTo("categories.id:\"id1\",\"id2\""); final List<FilterExpression<ProductProjection>> filterExpressions = ProductProjectionSearch.ofStaged().withQueryFilters(m -> m.categories().id().isInSubtreeOrInCategory(asList("id1", "id2"), asList("id3", "id4"))).queryFilters(); final List<String> collect = filterExpressions.stream().map(e -> e.expression()).collect(Collectors.toList()); final String expected = "categories.id:subtree(\"id1\"),subtree(\"id2\"),\"id3\",\"id4\""; assertThat(collect).hasSize(1); assertThat(collect.get(0)).isEqualTo(expected); }