private CompletionStage<List<Product>> findNext(final ProductQuery seedQuery, final ProductQuery query, final List<Product> products) { final CompletionStage<PagedQueryResult<Product>> pageResult = sphereClient().execute(query); return pageResult.thenCompose(page -> { final List<Product> results = page.getResults(); products.addAll(results); final boolean isLastQueryPage = results.size() < PAGE_SIZE; if (isLastQueryPage) { return CompletableFuture.completedFuture(products); } else { final String lastId = getIdForNextQuery(page); return findNext(seedQuery, seedQuery .plusPredicates(m -> m.id().isGreaterThan(lastId)), products); } }); }
private void checkIsFoundByPublishedFlag(final Product product, final boolean value) { final Optional<Product> productFromQuery = client().executeBlocking(ProductQuery.of() .withPredicates(m -> { return m.masterData().isPublished().is(value); }) .plusPredicates(m -> m.id().is(product.getId()))).head(); assertThat(productFromQuery.get().getId()).isEqualTo(product.getId()); }
@Test public void queryByReviewRating() { withProduct(client(), product -> { withReview(client(), b -> b.target(product).rating(1), review1 -> { withReview(client(), b -> b.target(product).rating(3), review2 -> { assertEventually(() -> { final ProductQuery query = ProductQuery.of() .withPredicates(m -> m.reviewRatingStatistics().averageRating().is(2.0)) .plusPredicates(m -> m.reviewRatingStatistics().count().is(2)) .plusPredicates(m -> m.is(product)); final List<Product> results = client().executeBlocking(query).getResults(); assertThat(results).hasSize(1); final Product loadedProduct = results.get(0); assertThat(loadedProduct.getId()).isEqualTo(product.getId()); assertThat(loadedProduct.getReviewRatingStatistics().getCount()).isEqualTo(2); }); }); }); }); }
@Test public void queryByTiersWithMinimumQuantity() { withProduct(client(), product -> { final ProductQuery productQuery = ProductQuery.of() .withPredicates(m -> m.masterData().current().variants().prices().tiers().minimumQuantity().isGreaterThan(5)) .plusPredicates(m -> m.is(product)); final List<Product> results = client().executeBlocking(productQuery).getResults(); assertThat(results).hasSize(0); }); }
@Test public void queryByTiersWithValue() { withProduct(client(), product -> { final ProductQuery productQuery = ProductQuery.of() .withPredicates(m -> m.masterData().current().variants().prices().tiers().value().currencyCode().is("EUR")) .plusPredicates(m -> m.is(product)); final List<Product> results = client().executeBlocking(productQuery).getResults(); assertThat(results).hasSize(0); }); }