@Test
public void searchForReviewsWithAverageRatingGreaterThan2() {
final List<FacetRange<BigDecimal>> facetRanges = IntStream.range(LOWEST_RATING, HIGHEST_RATING)
.mapToObj(i -> FacetRange.of(new BigDecimal(i), new BigDecimal(i + 1)))
.collect(toList());
assertThat(facetRanges.toString()).isEqualTo("[[0 to 1), [1 to 2), [2 to 3), [3 to 4), [4 to 5)]");
final ProductProjectionSearch searchRequest = ProductProjectionSearch.ofStaged()
.withResultFilters(m -> m.reviewRatingStatistics().averageRating().isGreaterThanOrEqualTo(new BigDecimal(2)))
.withFacets(m -> m.reviewRatingStatistics().averageRating().onlyRange(facetRanges))
.withSort(m -> m.reviewRatingStatistics().averageRating().desc());
assertEventually(Duration.ofSeconds(60), Duration.ofMillis(100), () -> {
final PagedSearchResult<ProductProjection> result = client().executeBlocking(searchRequest);
assertThat(result.getResults()).hasSize(2);
final ProductProjection productProjection = result.getResults().get(0);
assertThat(productProjection.getReviewRatingStatistics().getCount()).isEqualTo(REVIEWS_PER_PRODUCT);
final RangeFacetResult facetResult = (RangeFacetResult) result.getFacetResult("reviewRatingStatistics.averageRating");
assertThat(facetResult.getRanges().get(2)).isEqualTo(RangeStats.of("2.0", "3.0", 2L, null, "2.2", "2.7", "4.9", 2.45));
});
}