@Test public void variants() throws Exception { assertThat(ProductQueryModel.of().masterData().current().variants().sku().is("bar").toSphereQuery()) .isEqualTo("masterData(current(variants(sku=\"bar\")))"); }
@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)); } }
@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 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 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)); }
@Test public void queryBySku() throws Exception { withProduct(client(), product -> { final String sku = "sku-" + randomString(); final Product productWithSku = client().executeBlocking(ProductUpdateCommand.of(product, SetSku.of(MASTER_VARIANT_ID, sku))); final QueryPredicate<ProductProjection> predicate = model().masterVariant().sku().is(sku); checkOneResult(productWithSku, predicate); }); }
@Test public void lineItemModel() throws Exception { withFilledCart(client(), cart -> { final LineItem lineItem = cart.getLineItems().get(0); final String englishName = lineItem.getName().get(Locale.ENGLISH); final Price price = lineItem.getPrice(); final Long centAmount = price.getValue().query(MonetaryQueries.convertMinorPart()); final ItemState itemState = lineItem.getState().stream().findFirst().get(); final CartQuery query = CartQuery.of() .withLimit(1L) .withPredicates(m -> m.lineItems().id().is(lineItem.getId()) .and(m.lineItems().quantity().is(lineItem.getQuantity())) .and(m.lineItems().productId().is(lineItem.getProductId())) .and(m.lineItems().name().locale(ENGLISH).is(englishName)) .and(m.lineItems().variant().sku().is(lineItem.getVariant().getSku())) .and(m.lineItems().price().discounted().isNotPresent()) .and(m.lineItems().price().id().is(price.getId())) .and(m.lineItems().price().value().centAmount().is(centAmount)) .and(m.lineItems().price().country().is(price.getCountry())) .and(m.lineItems().state().quantity().is(itemState.getQuantity())) .and(m.lineItems().state().state().is(itemState.getState())) ); final CartQuery cartQuery = query.plusPredicates(m -> m.id().is(cart.getId())); final Cart loadedCart = client().executeBlocking(cartQuery).head().get(); assertThat(loadedCart.getId()).isEqualTo(cart.getId()); }); }