@SuppressWarnings("unchecked") private QueryPredicate<T> where(final QueryPredicate<EmbeddedProductVariantQueryModel> embeddedPredicate) { final WithEmbeddedSharedProductProjectionProductDataQueryModel<T> parent = Optional.ofNullable((WithEmbeddedSharedProductProjectionProductDataQueryModel<T>) getParent()) .orElseThrow(() -> new UnsupportedOperationException("A proper parent model is required.")); return parent.where(m -> m.masterVariant().where(embeddedPredicate).or(m.variants().where(embeddedPredicate))); }
@Override public QueryPredicate<T> where(final Function<EmbeddedProductDataQueryModel, QueryPredicate<EmbeddedProductDataQueryModel>> embeddedPredicate) { return where(embeddedPredicate.apply(EmbeddedProductDataQueryModel.of())); }
@Test public void combinedEmbeddedQueries() throws Exception { final QueryPredicate<EmbeddedProductDataQueryModel> predicate = DATA_QUERY_MODEL.name().lang(ENGLISH).is("Yes").or(DATA_QUERY_MODEL.name().lang(GERMAN).is("Ja")); final QueryPredicate<Product> resultPredicate = ProductQueryModel.of().masterData().where(m -> m.current().where(predicate).and(m.staged().where(predicate))); assertThat(resultPredicate.toSphereQuery()).isEqualTo("masterData(current(name(en=\"Yes\") or name(de=\"Ja\")) and staged(name(en=\"Yes\") or name(de=\"Ja\")))"); } }
@SuppressWarnings("unchecked") private QueryPredicate<T> where(final QueryPredicate<EmbeddedProductVariantQueryModel> embeddedPredicate) { final WithEmbeddedSharedProductProjectionProductDataQueryModel<T> parent = Optional.ofNullable((WithEmbeddedSharedProductProjectionProductDataQueryModel<T>) getParent()) .orElseThrow(() -> new UnsupportedOperationException("A proper parent model is required.")); return parent.where(m -> m.masterVariant().where(embeddedPredicate).or(m.variants().where(embeddedPredicate))); }
@Override public QueryPredicate<T> where(final Function<EmbeddedProductDataQueryModel, QueryPredicate<EmbeddedProductDataQueryModel>> embeddedPredicate) { return where(embeddedPredicate.apply(EmbeddedProductDataQueryModel.of())); }
@Test public void allVariantsInProductProjection() throws Exception { assertThat(ProductProjectionQueryModel.of().allVariants().where(m -> m.sku().is("bar"))) .isEqualTo(ProductProjectionQueryModel.of().where(m -> m.masterVariant().sku().is("bar").or(m.variants().sku().is("bar")))) .isEqualTo(QueryPredicate.<ProductProjection>of(embeddedProductProjectionPredicate)); } }
@Test public void allVariantsInProduct() throws Exception { assertThat(ProductQueryModel.of().masterData().current().allVariants().where(m -> m.sku().is("bar"))) .isEqualTo(ProductQueryModel.of().masterData().current().where(m -> m.masterVariant().sku().is("bar").or(m.variants().sku().is("bar")))) .isEqualTo(QueryPredicate.<Product>of(embeddedProductPredicate)); }