public static Product referenceableProduct(final BlockingSphereClient client) { final ProductType productType = ProductTypeFixtures.defaultProductType(client); final ProductVariantDraft variantDraft = ProductVariantDraftBuilder.of().price(PRICE).build(); final String slugEn = "referenceable-product-2"; final ProductDraft productDraft = ProductDraftBuilder.of(productType, en("referenceable product"), en(slugEn), variantDraft).build(); return client.executeBlocking(ProductQuery.of().bySlug(ProductProjectionType.STAGED, ENGLISH, slugEn)).head() .orElseGet(() -> client.executeBlocking(ProductCreateCommand.of(productDraft))); }
@Test public void createProductWithCustomPrice() { withEmptyProductType(client(), randomKey(), productType -> withUpdateableType(client(), type -> { final String value = "foo"; final PriceDraft price = PriceDraft.of(EURO_1) .withCustom(CustomFieldsDraft.ofTypeIdAndObjects(type.getId(), singletonMap(STRING_FIELD_NAME, value))); final ProductVariantDraft masterVariant = ProductVariantDraftBuilder.of().price(price).build(); final ProductDraft productDraft = ProductDraftBuilder.of(productType, randomSlug(), randomSlug(), masterVariant).build(); final Product product = client().executeBlocking(ProductCreateCommand.of(productDraft)); final Price loadedPrice = product.getMasterData().getStaged().getMasterVariant().getPrices().get(0); assertThat(loadedPrice.getValue()).isEqualTo(EURO_1); assertThat(loadedPrice.getCustom().getFieldAsString(STRING_FIELD_NAME)).isEqualTo(value); client().executeBlocking(ProductDeleteCommand.of(product)); return type; }) ); }
private static Product createTestProduct(final ProductType productType, final String germanName, final String englishName, final String color, final int size1, final int size2, final String sku, final String slug) { final LocalizedString name = LocalizedString.of(GERMAN, germanName, ENGLISH, englishName); final ProductVariantDraft masterVariant = ProductVariantDraftBuilder.of() .attributes(AttributeDraft.of(ATTR_NAME_SIZE, size1), AttributeDraft.of(ATTR_NAME_COLOR, color)) .price(PriceDraft.of(new BigDecimal("23.45"), EUR)) .sku(sku) .key(slug + "-master-variant-key") .build(); final ProductVariantDraft variant = ProductVariantDraftBuilder.of() .attributes(AttributeDraft.of(ATTR_NAME_SIZE, size2)) .price(PriceDraft.of(new BigDecimal("27.45"), EUR)) .key(slug + "-variant2-key") .build(); final ProductDraft productDraft = ProductDraftBuilder.of(productType, name, LocalizedString.of(ENGLISH, slug), masterVariant) .plusVariants(variant) .key(slug + "-product-key") .build(); return client().executeBlocking(ProductCreateCommand.of(productDraft)); }
@Test public void createProductWithTiers() { withEmptyProductType(client(), randomKey(), productType -> withUpdateableType(client(), type -> { final List<PriceTier> tiers = Arrays.asList(PriceTierBuilder.of(10, EURO_5).build()); final PriceDraft priceWithTiers = PriceDraftBuilder.of(EURO_1) .tiers(tiers) .build(); final ProductVariantDraft masterVariant = ProductVariantDraftBuilder.of() .price(priceWithTiers) .build(); final ProductDraft productDraft = ProductDraftBuilder.of(productType, randomSlug(), randomSlug(), masterVariant).build(); final Product product = client().executeBlocking(ProductCreateCommand.of(productDraft)); final Price loadedPrice = product.getMasterData().getStaged().getMasterVariant().getPrices().get(0); assertThat(loadedPrice.getValue()).isEqualTo(EURO_1); assertThat(loadedPrice.getTiers()).containsExactlyElementsOf(tiers); client().executeBlocking(ProductDeleteCommand.of(product)); return type; }) ); }
public static void withUpdateableProductDiscount(final BlockingSphereClient client, final BiFunction<ProductDiscount, Product, ProductDiscount> function) { withUpdateableProduct(client, builder -> builder.masterVariant(ProductVariantDraftBuilder.of().price(PRICE).build()), product -> { final ProductDiscountPredicate predicate = ProductDiscountPredicate.of("product.id = \"" + product.getId() + "\""); final AbsoluteProductDiscountValue discountValue = AbsoluteProductDiscountValue.of(EURO_1); final LocalizedString name = en("demo product discount"); final LocalizedString description = en("description"); final boolean active = true; final String sortOrder = randomSortOrder(); final ProductDiscountDraft discountDraft = ProductDiscountDraft.of(name, description, predicate, discountValue, sortOrder, active); final ProductDiscount productDiscount = client.executeBlocking(ProductDiscountCreateCommand.of(discountDraft)); final ProductDiscount updatedDiscount = function.apply(productDiscount, product); client.executeBlocking(ProductDiscountDeleteCommand.of(updatedDiscount)); return client.executeBlocking(ProductByIdGet.of(product)); }); }
AttributeAccess.ofDateTimeSet().ofName(ATTR_NAME_DATE_TIME_SET).draftOf(asSet(DATE_TIME_2001_22H, DATE_TIME_2002_23H)), AttributeAccess.ofProductReferenceSet().ofName(ATTR_NAME_REF_SET).draftOf(asSet(referencedProductA.toReference(), referencedProductB.toReference()))) .price(PriceDraft.of(new BigDecimal("23.45"), EUR)) .sku(SKU1) .build();
public static Product createProduct2(final BlockingSphereClient client, final Referenceable<Product> referencedProductA, final Referenceable<Product> referencedProductB, final Referenceable<ProductType> productTypeReferenceable) { final ProductVariantDraft masterVariant = ProductVariantDraftBuilder.of() .attributes( AttributeAccess.ofBoolean().ofName(ATTR_NAME_BOOLEAN).draftOf(false), AttributeAccess.ofText().ofName(ATTR_NAME_TEXT).draftOf(TEXT_BAR), AttributeAccess.ofLocalizedString().ofName(ATTR_NAME_LOC_TEXT).draftOf(LOC_TEXT_BAR), AttributeAccess.ofEnumValue().ofName(ATTR_NAME_ENUM).draftOf(ENUM_THREE), AttributeAccess.ofLocalizedEnumValue().ofName(ATTR_NAME_LOC_ENUM).draftOf(LOC_ENUM_THREE), AttributeAccess.ofDouble().ofName(ATTR_NAME_NUMBER).draftOf(NUMBER_10.doubleValue()), AttributeAccess.ofMoney().ofName(ATTR_NAME_MONEY).draftOf(MONEY_1000_USD), AttributeAccess.ofDate().ofName(ATTR_NAME_DATE).draftOf(DATE_2002), AttributeAccess.ofTime().ofName(ATTR_NAME_TIME).draftOf(TIME_23H), AttributeAccess.ofDateTime().ofName(ATTR_NAME_DATE_TIME).draftOf(DATE_TIME_2002_23H), AttributeAccess.ofProductReference().ofName(ATTR_NAME_REF).draftOf(referencedProductB.toReference()), AttributeAccess.ofBooleanSet().ofName(ATTR_NAME_BOOLEAN_SET).draftOf(asSet(true)), AttributeAccess.ofStringSet().ofName(ATTR_NAME_TEXT_SET).draftOf(asSet(TEXT_FOO)), AttributeAccess.ofLocalizedStringSet().ofName(ATTR_NAME_LOC_TEXT_SET).draftOf(asSet(LOC_TEXT_FOO)), AttributeAccess.ofEnumValueSet().ofName(ATTR_NAME_ENUM_SET).draftOf(asSet(ENUM_TWO)), AttributeAccess.ofLocalizedEnumValueSet().ofName(ATTR_NAME_LOC_ENUM_SET).draftOf(asSet(LOC_ENUM_TWO)), AttributeAccess.ofDoubleSet().ofName(ATTR_NAME_NUMBER_SET).draftOf(asSet(NUMBER_5.doubleValue())), AttributeAccess.ofMoneySet().ofName(ATTR_NAME_MONEY_SET).draftOf(asSet(MONEY_500_EUR)), AttributeAccess.ofDateSet().ofName(ATTR_NAME_DATE_SET).draftOf(asSet(DATE_2001)), AttributeAccess.ofTimeSet().ofName(ATTR_NAME_TIME_SET).draftOf(asSet(TIME_22H)), AttributeAccess.ofDateTimeSet().ofName(ATTR_NAME_DATE_TIME_SET).draftOf(asSet(DATE_TIME_2001_22H)), AttributeAccess.ofProductReferenceSet().ofName(ATTR_NAME_REF_SET).draftOf(asSet(referencedProductA.toReference()))) .price(PriceDraft.of(new BigDecimal("46.80"), USD)) .sku(SKU2) .build(); return createTestProduct(client, "Product two", masterVariant, productTypeReferenceable); }