@Test
public void sortByScopedPriceDiscounted() {
withProductOfPrices(asList(PriceDraft.of(EURO_20), PriceDraft.of(EURO_30).withCountry(DE)), product1 -> {
withProductOfPrices(asList(PriceDraft.of(EURO_30), PriceDraft.of(EURO_40).withCountry(DE)), product2 -> {
final ProductDiscountDraft productDiscountDraft1 = discountDraftOfAbsoluteValue(product1, EURO_5);
withProductDiscount(client(), productDiscountDraft1, productDiscount1 -> {
assertEventually(s -> {
final ProductProjectionSearch search = ProductProjectionSearch.ofStaged()
.withPriceSelection(PriceSelection.of(EUR).withPriceCountry(DE))
.plusQueryFilters(m -> m.id().isIn(asList(product1.getId(), product2.getId())))
.plusSort(m -> m.allVariants().scopedPriceDiscounted().asc());
final PagedSearchResult<ProductProjection> results = client().executeBlocking(search);
assertThat(results.getResults()).hasSize(2);
s.assertThat(results.getResults()).extracting(ResourceView::getId).containsExactly(product2.getId(), product1.getId());
final ProductProjectionSearch searchDescending = ProductProjectionSearch.ofStaged()
.withPriceSelection(PriceSelection.of(EUR).withPriceCountry(DE))
.plusQueryFilters(m -> m.id().isIn(asList(product1.getId(), product2.getId())))
.plusSort(m -> m.allVariants().scopedPriceDiscounted().desc());
final PagedSearchResult<ProductProjection> resultsDescending = client().executeBlocking(searchDescending);
assertThat(resultsDescending.getResults()).hasSize(2);
s.assertThat(resultsDescending.getResults()).extracting(ResourceView::getId).containsExactly(product1.getId(), product2.getId());
assertThat(resultsDescending.getResults().get(0).getMasterVariant().getPrice().getDiscounted()).isNotNull();
});
});
});
});
}