From 899f196fdadf625ad15ee8322a7433dbbc5d337f Mon Sep 17 00:00:00 2001 From: Jens Schulze Date: Wed, 9 Nov 2022 09:26:50 +0100 Subject: [PATCH 1/2] add test for order update --- .../commercetools/cart/CartsFixtures.java | 28 ++++--- .../order/OrderIntegrationTests.java | 34 ++++++++ .../commercetools/order/OrdersFixtures.java | 80 +++++++++++++++++++ .../product/ProductFixtures.java | 13 +++ .../ConcurrentModificationMiddlewareImpl.java | 2 +- 5 files changed, 145 insertions(+), 12 deletions(-) create mode 100644 commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/order/OrderIntegrationTests.java diff --git a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/cart/CartsFixtures.java b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/cart/CartsFixtures.java index cbca564c39e..78efd618ff6 100644 --- a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/cart/CartsFixtures.java +++ b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/cart/CartsFixtures.java @@ -13,21 +13,27 @@ import com.commercetools.api.models.customer.Customer; import commercetools.utils.CommercetoolsTestUtils; +import io.vrap.rmf.base.client.error.NotFoundException; + import org.junit.jupiter.api.Assertions; public class CartsFixtures { public static Cart deleteCart(final String id, final Long version) { - Cart cart = CommercetoolsTestUtils.getProjectApiRoot() - .carts() - .withId(id) - .delete() - .withVersion(version) - .executeBlocking() - .getBody(); - - Assertions.assertNotNull(cart); - Assertions.assertEquals(cart.getId(), id); - + Cart cart = null; + try { + cart = CommercetoolsTestUtils.getProjectApiRoot() + .carts() + .withId(id) + .delete() + .withVersion(version) + .executeBlocking() + .getBody(); + + Assertions.assertNotNull(cart); + Assertions.assertEquals(cart.getId(), id); + } + catch (NotFoundException ignored) { + } return cart; } diff --git a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/order/OrderIntegrationTests.java b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/order/OrderIntegrationTests.java new file mode 100644 index 00000000000..4409bf23bc6 --- /dev/null +++ b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/order/OrderIntegrationTests.java @@ -0,0 +1,34 @@ + +package commercetools.order; + +import com.commercetools.api.models.order.Order; +import com.commercetools.api.models.order.OrderUpdate; +import commercetools.utils.CommercetoolsTestUtils; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +public class OrderIntegrationTests { + + @Test + public void testOrderUpdate() { + OrdersFixtures.withUpdateableOrder(order -> { + Assertions.assertThat(order).isNotNull(); + + Assertions.assertThat(order.getBillingAddress()).isNull(); + Order updatedOrder = CommercetoolsTestUtils.getProjectApiRoot() + .orders() + .withId(order.getId()) + .post(OrderUpdate.builder() + .version(order.getVersion()) + .plusActions(builder -> builder.setBillingAddressBuilder() + .address(address -> address.country("DE").state("Berlin"))) + .build()) + .executeBlocking() + .getBody(); + + Assertions.assertThat(updatedOrder.getBillingAddress().getCountry()).isEqualTo("DE"); + return updatedOrder; + }); + } +} diff --git a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/order/OrdersFixtures.java b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/order/OrdersFixtures.java index c1213522efd..de1df495fe0 100644 --- a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/order/OrdersFixtures.java +++ b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/order/OrdersFixtures.java @@ -1,8 +1,15 @@ package commercetools.order; +import java.util.function.Consumer; +import java.util.function.UnaryOperator; + +import com.commercetools.api.models.cart.*; import com.commercetools.api.models.order.Order; +import com.commercetools.api.models.order.OrderFromCartDraft; import com.commercetools.api.models.order_edit.OrderEdit; +import commercetools.cart.CartsFixtures; +import commercetools.product.ProductFixtures; import commercetools.utils.CommercetoolsTestUtils; import org.junit.jupiter.api.Assertions; @@ -38,4 +45,77 @@ public static OrderEdit deleteOrderEdit(final String id, final Long version) { return orderEdit; } + + private static void withCreateOrder(final Consumer execFn) { + ProductFixtures.withPublishedProduct(product -> { + CartsFixtures.withUpdateableCart(cart -> { + Cart updatedCart = CommercetoolsTestUtils.getProjectApiRoot() + .carts() + .withId(cart.getId()) + .post(CartUpdate.builder() + .version(cart.getVersion()) + .plusActions(builder -> builder.addLineItemBuilder() + .sku(product.getMasterData().getCurrent().getMasterVariant().getSku())) + .plusActions(builder -> builder.setShippingAddressBuilder() + .address( + baseAddressBuilder -> baseAddressBuilder.country("DE").state("Berlin"))) + .build()) + .executeBlocking() + .getBody(); + + OrderFromCartDraft orderDraft = OrderFromCartDraft.builder() + .cart((CartResourceIdentifier) updatedCart.toResourceIdentifier()) + .version(updatedCart.getVersion()) + .build(); + + Order order = createOrder(orderDraft); + execFn.accept(order); + + try { + return CommercetoolsTestUtils.getProjectApiRoot() + .carts() + .withId(updatedCart.getId()) + .get() + .executeBlocking() + .getBody(); + } + catch (Exception ignored) { + } + + return updatedCart; + }); + + }); + } + + public static void withOrder(final Consumer consumer) { + withCreateOrder(order -> { + try { + consumer.accept(order); + } + finally { + deleteOrder(order.getId(), order.getVersion()); + } + }); + } + + public static void withUpdateableOrder(final UnaryOperator operator) { + withCreateOrder(order -> { + try { + order = operator.apply(order); + } + finally { + deleteOrder(order.getId(), order.getVersion()); + } + }); + } + + public static Order createOrder(final OrderFromCartDraft orderDraft) { + Order order = CommercetoolsTestUtils.getProjectApiRoot().orders().post(orderDraft).executeBlocking().getBody(); + + Assertions.assertNotNull(order); + Assertions.assertEquals(order.getCart().getId(), orderDraft.getCart().getId()); + + return order; + } } diff --git a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/product/ProductFixtures.java b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/product/ProductFixtures.java index e75a6c05d8e..6f911f6740d 100644 --- a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/product/ProductFixtures.java +++ b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/product/ProductFixtures.java @@ -42,6 +42,19 @@ public static void withProduct(final Consumer consumer) { }))); } + public static void withPublishedProduct(final Consumer consumer) { + withTaxCategory( + taxCategory -> withCategory(category -> withProductType(createProductTypeDraft(), productType -> { + Product product = createProduct(productType, category, taxCategory, true); + try { + consumer.accept(product); + } + finally { + deleteProductById(product.getId(), product.getVersion()); + } + }))); + } + public static void withUpdateableProduct(final UnaryOperator operator) { withTaxCategory( taxCategory -> withCategory(category -> withProductType(createProductTypeDraft(), productType -> { diff --git a/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/client/ConcurrentModificationMiddlewareImpl.java b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/client/ConcurrentModificationMiddlewareImpl.java index 15dec67276d..ea065967fde 100644 --- a/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/client/ConcurrentModificationMiddlewareImpl.java +++ b/commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/client/ConcurrentModificationMiddlewareImpl.java @@ -71,7 +71,7 @@ public CompletableFuture> invoke(ApiHttpRequest request, if (throwable instanceof ConcurrentModificationException) { final Long newVersion = ((ConcurrentModificationException) throwable).getCurrentVersion(); final JsonNode jsonNode; - if (newVersion != null) { + if (newVersion != null && request.getMethod() == ApiHttpMethod.POST) { try { jsonNode = mapper.readTree(request.getBody()); if (jsonNode instanceof ObjectNode && jsonNode.has(VERSION)) { From 7ef053645bd72abfa2bf04cf8388027d12e94b10 Mon Sep 17 00:00:00 2001 From: Jens Schulze Date: Wed, 9 Nov 2022 09:48:03 +0100 Subject: [PATCH 2/2] add second update action --- .../java/commercetools/order/OrderIntegrationTests.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/order/OrderIntegrationTests.java b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/order/OrderIntegrationTests.java index 4409bf23bc6..ee0d0a1eb81 100644 --- a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/order/OrderIntegrationTests.java +++ b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/order/OrderIntegrationTests.java @@ -2,6 +2,7 @@ package commercetools.order; import com.commercetools.api.models.order.Order; +import com.commercetools.api.models.order.OrderState; import com.commercetools.api.models.order.OrderUpdate; import commercetools.utils.CommercetoolsTestUtils; @@ -23,6 +24,7 @@ public void testOrderUpdate() { .version(order.getVersion()) .plusActions(builder -> builder.setBillingAddressBuilder() .address(address -> address.country("DE").state("Berlin"))) + .plusActions(builder -> builder.changeOrderStateBuilder().orderState(OrderState.CONFIRMED)) .build()) .executeBlocking() .getBody();