@Test public void sortByCount() { checkSorting( m -> m.reviewRatingStatistics().count().desc(), p -> assertThat(p.getReviewRatingStatistics().getCount()).isEqualTo(REVIEWS_PER_PRODUCT) ); }
@Test public void sortByLowestRating() { checkSorting( m -> m.reviewRatingStatistics().lowestRating().asc(), p -> assertThat(p.getReviewRatingStatistics().getLowestRating()).isEqualTo(LOWEST_RATING) ); }
@Test public void sortByHighestRating() { checkSorting( m -> m.reviewRatingStatistics().highestRating().desc(), p -> assertThat(p.getReviewRatingStatistics().getHighestRating()).isEqualTo(HIGHEST_RATING) ); }
@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()//in prod it would be current .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)); }); }
assertThat(productProjection.getReviewRatingStatistics()).isNotNull(); assertThat(productProjection.getReviewRatingStatistics().getAverageRating()).isEqualTo(100D); assertThat(productProjection.getReviewRatingStatistics().getHighestRating()).isEqualTo(100); assertThat(productProjection.getReviewRatingStatistics().getLowestRating()).isEqualTo(100); assertThat(productProjection.getReviewRatingStatistics().getCount()).isEqualTo(1); assertThat(productProjection.getReviewRatingStatistics().getRatingsDistribution()).isEqualTo(singletonMap(100, 1)); });
@Test public void sortByAverageRating() { checkSorting( m -> m.reviewRatingStatistics().averageRating().desc(), p -> assertThat(p.getReviewRatingStatistics().getAverageRating()).isBetween(2.70D, 2.74D) ); }
assertThat(productProjection.getReviewRatingStatistics()). as("the state has not the role ReviewIncludedInStatistics, so it is not accounted yet") .isNull();