public ProductCatalogDataQueryModel<Product> masterData() { return new ProductCatalogDataQueryModel<>(this, "masterData"); }
public ProductDataQueryModel<M> staged() { return newProductDataQueryModel("staged"); }
default ProductQuery bySlug(final ProductProjectionType type, final Locale locale, final String slug) { return withPredicates(m -> m.masterData().forProjection(type).slug().lang(locale).is(slug)); }
@Test public void variants() throws Exception { assertThat(ProductQueryModel.of().masterData().current().variants().sku().is("bar").toSphereQuery()) .isEqualTo("masterData(current(variants(sku=\"bar\")))"); }
@BeforeClass public static void setupProducts() { productType = client().executeBlocking(ProductTypeQuery.of().byName(PRODUCT_TYPE_NAME)).head() .orElseGet(() -> createProductType()); evilProductType = client().executeBlocking(ProductTypeQuery.of().byName(EVIL_PRODUCT_TYPE_NAME)).head() .orElseGet(() -> createEvilProductType()); final Query<Product> query = ProductQuery.of() .withPredicates(product -> product.masterData().staged().masterVariant().sku().isIn(asList(SKU1, SKU2, SKU3, SKU_A, SKU_B))); final List<Product> products = client().executeBlocking(query).getResults(); final Function<String, Optional<Product>> findBySku = sku -> products.stream().filter(p -> sku.equals(p.getMasterData().getStaged().getMasterVariant().getSku())).findFirst(); product1 = findBySku.apply(SKU1).orElseGet(() -> createTestProduct(productType, "Schuh", "shoe", "blue", 38, 46, SKU1, SLUG1)); product2 = findBySku.apply(SKU2).orElseGet(() -> createTestProduct(productType, "Hemd", "shirt", "red", 36, 44, SKU2, SLUG2)); product3 = findBySku.apply(SKU3).orElseGet(() -> createTestProduct(productType, "Kleider", "dress", "blue", 40, 42, SKU3, SLUG3)); evilProduct1 = findBySku.apply(SKU_A).orElseGet(() -> createEvilTestProduct(evilProductType, EVIL_CHARACTER_WORD, EVIL_PRODUCT_TYPE_NAME + "foo", SKU_A)); evilProduct2 = findBySku.apply(SKU_B).orElseGet(() -> createEvilTestProduct(evilProductType, EVIL_PRODUCT_TYPE_NAME + "bar", EVIL_CHARACTER_WORD, SKU_B)); }
public QueryPredicate<M> where(final Function<PartialProductCatalogDataQueryModel, QueryPredicate<PartialProductCatalogDataQueryModel>> embeddedPredicate) { return where(embeddedPredicate.apply(PartialProductCatalogDataQueryModel.of())); } }
public BooleanQueryModel<M> published() { return booleanModel("published"); }
default ProductQuery bySlug(final ProductProjectionType type, final Locale locale, final String slug) { return withPredicates(m -> m.masterData().forProjection(type).slug().lang(locale).is(slug)); }
@Test public void pure() throws Exception { final QueryPredicate<Product> purePredicate = ProductQueryModel.of().masterData().current().name().lang(ENGLISH).is("Yes"); assertThat(purePredicate.toSphereQuery()).isEqualTo("masterData(current(name(en=\"Yes\")))"); }
public static Data createScenario(final BlockingSphereClient client) { final ProductType productType = client.executeBlocking(ProductTypeQuery.of().byName(PRODUCT_TYPE_NAME)).head() .orElseGet(() -> createProductType(client)); final Query<Product> query = ProductQuery.of() .withPredicates(m -> m.masterData().staged().masterVariant().sku().isIn(asList(SKU1, SKU2, SKU_SOME_ID, SKU_OTHER_ID))); final List<Product> products = client.executeBlocking(query).getResults(); final Function<String, Optional<Product>> findBySku = sku -> products.stream().filter(p -> sku.equals(p.getMasterData().getStaged().getMasterVariant().getSku())).findFirst(); final Product productA = findBySku.apply(SKU_SOME_ID).orElseGet(() -> createTestProduct(client, "Some Id", ProductVariantDraftBuilder.of().sku(SKU_SOME_ID).build(), productType)); final Product productB = findBySku.apply(SKU_OTHER_ID).orElseGet(() -> createTestProduct(client, "Other Id", ProductVariantDraftBuilder.of().sku(SKU_OTHER_ID).build(), productType)); final Product product1 = findBySku.apply(SKU1).orElseGet(() -> createProduct1(client, productA, productB, productType)); final Product product2 = findBySku.apply(SKU2).orElseGet(() -> createProduct2(client, productA, productB, productType)); final Data data = new Data(productType, product1, product2, productA, productB); return data; }
@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\")))"); } }
default ProductQuery bySlug(final ProductProjectionType type, final Locale locale, final String slug) { return withPredicates(m -> m.masterData().forProjection(type).slug().lang(locale).is(slug)); }
@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)); }
public ProductDataQueryModel<M> staged() { return newProductDataQueryModel("staged"); }
@Test public void queryProductsWithAnyDiscount() throws Exception { withUpdateableProductDiscount(client(), (ProductDiscount productDiscount, Product product) -> { final ProductQuery query = ProductQuery.of() .withPredicates(m -> m.id().is(product.getId()) .and(m.masterData().staged().masterVariant().prices().discounted().isPresent())); final Duration maxWaitTime = Duration.ofMinutes(2); final Duration waitBeforeRetry = Duration.ofMillis(500); assertEventually(maxWaitTime, waitBeforeRetry, () -> { final Optional<Product> loadedProduct = client().executeBlocking(query).head(); assertThat(loadedProduct.isPresent()).isTrue(); assertThat(loadedProduct.get().getId()).isEqualTo(product.getId()); }); return productDiscount; }); }
public ProductCatalogDataQueryModel<Product> masterData() { return new ProductCatalogDataQueryModel<>(Optional.of(this), Optional.of("masterData")); }
public QueryDsl<Product> bySlug(final ProductProjectionType type, final Locale locale, final String slug) { return withPredicate(model().masterData().forProjection(type).slug().lang(locale).is(slug)); }