@Test public void findFirstMatchingVariantOnSearch() throws Exception { final ProductProjection product = getProductProjectionFromSearch(); assertThat(product.findFirstMatchingVariant().get().getId()).isEqualTo(2); }
@Test public void findFirstMatchingVariantOnQuery() throws Exception { final ProductProjection product = getProductProjectionFromQuery(); assertThat(product.findFirstMatchingVariant()).isEmpty(); }
private void testBlueFilter(final Function<List<FilterExpression<ProductProjection>>, ProductProjectionSearch> createSearch) { final ProductProjectionSearch search = createSearch.apply(PRODUCT_MODEL.allVariants().attribute().ofString(ATTR_NAME_COLOR).is("blue")); testResult(search, result -> { final List<ProductProjection> results = result.getResults(); final Predicate<ProductVariant> isBlue = variant -> variant.findAttribute(COLOR_ATTRIBUTE_ACCESS) .map(color -> color.equals("blue")) .orElse(false); final Condition<ProductVariant> blueVariant = new Condition<>(isBlue, "variant is blue"); assertThat(results) .flatExtracting(ProductProjection::getAllVariants) .areAtLeastOne(notMatching(blueVariant)) .areAtLeastOne(blueVariant); final List<ProductVariant> allMatchingVariants = results.stream() .flatMap(r -> r.findMatchingVariants().stream()) .collect(toList()); assertThat(allMatchingVariants).are(blueVariant); assertThat(results) .extracting(r -> r.findFirstMatchingVariant().get()) .containsOnlyElementsOf(allMatchingVariants); }); }
.extracting(ResourceView::getId).contains(product.getId()); final ProductVariant matchingVariant = resultForCurrentValue.getResults().get(0).findFirstMatchingVariant().orElse(null); s.assertThat(matchingVariant).isNotNull(); s.assertThat(matchingVariant.getScopedPrice().getValue()).as("value").isEqualTo(EURO_30); final List<ProductProjection> results = discountedSearchResult.getResults(); assertThat(results).hasSize(1); final ProductVariant discountedVariant = results.get(0).findFirstMatchingVariant().orElse(null); assertThat(discountedVariant).isNotNull(); s.assertThat(discountedVariant.getScopedPrice()).isEqualTo(matchingVariant.getScopedPrice());