From ddc85214bed786cf3ece162d49f8d7e896c46205 Mon Sep 17 00:00:00 2001 From: lojzatran Date: Mon, 24 Jul 2023 12:32:27 +0300 Subject: [PATCH 1/3] Add example for custom cart update action --- .../custom_command/CartDecoratorTest.java | 116 ++++++++++++++++++ .../IncludeCartCartUpdateBuilder.java | 36 ++++++ .../WithCartCartUpdateImpl.java | 23 ++++ 3 files changed, 175 insertions(+) create mode 100644 commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/CartDecoratorTest.java create mode 100644 commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/IncludeCartCartUpdateBuilder.java create mode 100644 commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/WithCartCartUpdateImpl.java diff --git a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/CartDecoratorTest.java b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/CartDecoratorTest.java new file mode 100644 index 00000000000..b6c1da1afb1 --- /dev/null +++ b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/CartDecoratorTest.java @@ -0,0 +1,116 @@ +package commercetools.custom_command; + +import com.commercetools.api.client.ByProjectKeyCartsByIDPost; +import com.commercetools.api.client.PagedQueryResourceRequest; +import com.commercetools.api.client.ProjectApiRoot; +import com.commercetools.api.models.cart.*; +import com.commercetools.api.models.category.CategoryPagedQueryResponse; +import com.commercetools.api.models.project.Project; +import commercetools.DecoratorTest; +import commercetools.utils.CommercetoolsTestUtils; +import io.vrap.rmf.base.client.ApiHttpClient; +import io.vrap.rmf.base.client.ApiHttpRequest; +import io.vrap.rmf.base.client.ApiHttpResponse; +import io.vrap.rmf.base.client.CreateHttpRequestCommand; +import io.vrap.rmf.base.client.ResponseSerializer; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.net.URI; +import java.time.Duration; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; + +public class CartDecoratorTest { + @Test + public void decoratedClient() { + final ProjectApiRoot apiRoot = CommercetoolsTestUtils.getProjectApiRoot(); + final DecoratedApiHttpClient client = new DecoratedApiHttpClient(apiRoot.getApiHttpClient()); + final ProjectApiRoot decoratedRoot = ProjectApiRoot.fromClient(apiRoot.getProjectKey(), client); + final CartDraft cartDraft = CartDraftBuilder.of().currency("EUR").build(); + + final CartRecalculateAction cartRecalculateAction + = CartUpdateActionBuilder.of().recalculateBuilder().build(); + final CartChangeTaxModeAction cartChangeTaxModeAction = CartUpdateActionBuilder.of().changeTaxModeBuilder().taxMode(TaxMode.DISABLED).build(); + final Cart cart = decoratedRoot.carts().create(cartDraft).execute().thenApply(ApiHttpResponse::getBody).join(); + final Cart updatedCart = decoratedRoot.carts() + .withId(cart.getId()) + .post(IncludeCartCartUpdateBuilder.of() + .cart(cart) + .version(cart.getVersion()) + .actions(cartRecalculateAction, cartChangeTaxModeAction) + .build() + ) + .execute() + .thenApply(ApiHttpResponse::getBody) + .join(); + } + + public static class DecoratedApiHttpClient implements ApiHttpClient { + private final ApiHttpClient apiHttpClient; + + private ApiHttpRequest lastRequest; + + public DecoratedApiHttpClient(ApiHttpClient apiHttpClient) { + this.apiHttpClient = apiHttpClient; + } + + @Override + public ResponseSerializer getSerializerService() { + return apiHttpClient.getSerializerService(); + } + + @Override + public URI getBaseUri() { + return apiHttpClient.getBaseUri(); + } + + @Override + public CompletableFuture> execute(ApiHttpRequest request) { + lastRequest = request; + return apiHttpClient.execute(request); + } + + @Override + public CompletableFuture> execute(CreateHttpRequestCommand request, + Function, ApiHttpResponse> mapper) { + return ApiHttpClient.super.execute(resetLineItemExternalTotals(request), mapper); + } + + @Override + public ApiHttpResponse executeBlocking(CreateHttpRequestCommand method, + Function, ApiHttpResponse> mapper, Duration timeout) { + return ApiHttpClient.super.executeBlocking(resetLineItemExternalTotals(method), mapper, timeout); + } + + @Override + public CompletableFuture> send(CreateHttpRequestCommand method) { + return ApiHttpClient.super.send(resetLineItemExternalTotals(method)); + } + + @Override + public ApiHttpResponse sendBlocking(CreateHttpRequestCommand method, Duration timeout) { + return ApiHttpClient.super.sendBlocking(resetLineItemExternalTotals(method), timeout); + } + + @Override + public void close() throws Exception { + apiHttpClient.close(); + } + + public CreateHttpRequestCommand resetLineItemExternalTotals(CreateHttpRequestCommand method) { + if (method instanceof ByProjectKeyCartsByIDPost) { + final ByProjectKeyCartsByIDPost byProjectKeyCartsByIDPost = (ByProjectKeyCartsByIDPost) method; + final CartUpdate cartUpdate = byProjectKeyCartsByIDPost.getBody(); + if (cartUpdate instanceof WithCartCartUpdateImpl) { + final WithCartCartUpdateImpl withCartCartUpdate = (WithCartCartUpdateImpl) cartUpdate; + final Cart cart = withCartCartUpdate.getCart(); + + // do sth with the cart + } + } + + return method; + } + } +} diff --git a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/IncludeCartCartUpdateBuilder.java b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/IncludeCartCartUpdateBuilder.java new file mode 100644 index 00000000000..120b72559ab --- /dev/null +++ b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/IncludeCartCartUpdateBuilder.java @@ -0,0 +1,36 @@ +package commercetools.custom_command; + +import com.commercetools.api.models.cart.Cart; +import com.commercetools.api.models.cart.CartUpdate; +import com.commercetools.api.models.cart.CartUpdateAction; +import com.commercetools.api.models.cart.CartUpdateBuilder; + +import java.util.List; +import java.util.Objects; + +public class IncludeCartCartUpdateBuilder extends CartUpdateBuilder { + private Cart cart; + + public Cart getCart() { + return cart; + } + + public IncludeCartCartUpdateBuilder cart(Cart cart){ + this.cart = cart; + return this; + } + + public static IncludeCartCartUpdateBuilder of() { + return new IncludeCartCartUpdateBuilder(); + } + + @Override + public CartUpdate build() { + final Long version = super.getVersion(); + final List actions = super.getActions(); + Objects.requireNonNull(version, CartUpdate.class + ": version is missing"); + Objects.requireNonNull(actions, CartUpdate.class + ": actions is missing"); + Objects.requireNonNull(cart, CartUpdate.class + ": cart is missing"); + return new WithCartCartUpdateImpl(cart, version, actions); + } +} diff --git a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/WithCartCartUpdateImpl.java b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/WithCartCartUpdateImpl.java new file mode 100644 index 00000000000..05c8d5f7cbb --- /dev/null +++ b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/WithCartCartUpdateImpl.java @@ -0,0 +1,23 @@ +package commercetools.custom_command; + +import com.commercetools.api.models.cart.Cart; + +public class WithCartCartUpdateImpl extends com.commercetools.api.models.cart.CartUpdateImpl { + + private Cart cart; + + public WithCartCartUpdateImpl(final Cart cart, final Long version, + final java.util.List actions) { + this.cart = cart; + super.setActions(actions); + super.setVersion(version); + } + + public Cart getCart() { + return cart; + } + + public void setCart(final Cart cart) { + this.cart = cart; + } +} From 0d1544cab9bfa8b3ac6e4ef78d50f6a68c2ec558 Mon Sep 17 00:00:00 2001 From: Auto Mation Date: Mon, 24 Jul 2023 09:35:43 +0000 Subject: [PATCH 2/3] spotless: Fix code style --- .../custom_command/CartDecoratorTest.java | 29 +++++++++---------- .../IncludeCartCartUpdateBuilder.java | 9 +++--- .../WithCartCartUpdateImpl.java | 3 +- 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/CartDecoratorTest.java b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/CartDecoratorTest.java index b6c1da1afb1..46d688fc406 100644 --- a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/CartDecoratorTest.java +++ b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/CartDecoratorTest.java @@ -1,25 +1,23 @@ + package commercetools.custom_command; +import java.net.URI; +import java.time.Duration; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; + import com.commercetools.api.client.ByProjectKeyCartsByIDPost; -import com.commercetools.api.client.PagedQueryResourceRequest; import com.commercetools.api.client.ProjectApiRoot; import com.commercetools.api.models.cart.*; -import com.commercetools.api.models.category.CategoryPagedQueryResponse; -import com.commercetools.api.models.project.Project; -import commercetools.DecoratorTest; import commercetools.utils.CommercetoolsTestUtils; + import io.vrap.rmf.base.client.ApiHttpClient; import io.vrap.rmf.base.client.ApiHttpRequest; import io.vrap.rmf.base.client.ApiHttpResponse; import io.vrap.rmf.base.client.CreateHttpRequestCommand; import io.vrap.rmf.base.client.ResponseSerializer; -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.Test; -import java.net.URI; -import java.time.Duration; -import java.util.concurrent.CompletableFuture; -import java.util.function.Function; +import org.junit.jupiter.api.Test; public class CartDecoratorTest { @Test @@ -29,9 +27,11 @@ public void decoratedClient() { final ProjectApiRoot decoratedRoot = ProjectApiRoot.fromClient(apiRoot.getProjectKey(), client); final CartDraft cartDraft = CartDraftBuilder.of().currency("EUR").build(); - final CartRecalculateAction cartRecalculateAction - = CartUpdateActionBuilder.of().recalculateBuilder().build(); - final CartChangeTaxModeAction cartChangeTaxModeAction = CartUpdateActionBuilder.of().changeTaxModeBuilder().taxMode(TaxMode.DISABLED).build(); + final CartRecalculateAction cartRecalculateAction = CartUpdateActionBuilder.of().recalculateBuilder().build(); + final CartChangeTaxModeAction cartChangeTaxModeAction = CartUpdateActionBuilder.of() + .changeTaxModeBuilder() + .taxMode(TaxMode.DISABLED) + .build(); final Cart cart = decoratedRoot.carts().create(cartDraft).execute().thenApply(ApiHttpResponse::getBody).join(); final Cart updatedCart = decoratedRoot.carts() .withId(cart.getId()) @@ -39,8 +39,7 @@ public void decoratedClient() { .cart(cart) .version(cart.getVersion()) .actions(cartRecalculateAction, cartChangeTaxModeAction) - .build() - ) + .build()) .execute() .thenApply(ApiHttpResponse::getBody) .join(); diff --git a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/IncludeCartCartUpdateBuilder.java b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/IncludeCartCartUpdateBuilder.java index 120b72559ab..cd15ff80c9d 100644 --- a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/IncludeCartCartUpdateBuilder.java +++ b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/IncludeCartCartUpdateBuilder.java @@ -1,13 +1,14 @@ + package commercetools.custom_command; +import java.util.List; +import java.util.Objects; + import com.commercetools.api.models.cart.Cart; import com.commercetools.api.models.cart.CartUpdate; import com.commercetools.api.models.cart.CartUpdateAction; import com.commercetools.api.models.cart.CartUpdateBuilder; -import java.util.List; -import java.util.Objects; - public class IncludeCartCartUpdateBuilder extends CartUpdateBuilder { private Cart cart; @@ -15,7 +16,7 @@ public Cart getCart() { return cart; } - public IncludeCartCartUpdateBuilder cart(Cart cart){ + public IncludeCartCartUpdateBuilder cart(Cart cart) { this.cart = cart; return this; } diff --git a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/WithCartCartUpdateImpl.java b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/WithCartCartUpdateImpl.java index 05c8d5f7cbb..c1d49456ad0 100644 --- a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/WithCartCartUpdateImpl.java +++ b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/WithCartCartUpdateImpl.java @@ -1,3 +1,4 @@ + package commercetools.custom_command; import com.commercetools.api.models.cart.Cart; @@ -7,7 +8,7 @@ public class WithCartCartUpdateImpl extends com.commercetools.api.models.cart.Ca private Cart cart; public WithCartCartUpdateImpl(final Cart cart, final Long version, - final java.util.List actions) { + final java.util.List actions) { this.cart = cart; super.setActions(actions); super.setVersion(version); From 42500a6d5cbb8daad42bf6351f70c1353d117488 Mon Sep 17 00:00:00 2001 From: lojzatran Date: Tue, 25 Jul 2023 16:08:22 +0300 Subject: [PATCH 3/3] =?UTF-8?q?Add=20param=20to=20enable/disable=20custom?= =?UTF-8?q?=20code=CB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commercetools/custom_command/CartDecoratorTest.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/CartDecoratorTest.java b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/CartDecoratorTest.java index b6c1da1afb1..c9f9e5d1cef 100644 --- a/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/CartDecoratorTest.java +++ b/commercetools/commercetools-sdk-java-api/src/integrationTest/java/commercetools/custom_command/CartDecoratorTest.java @@ -25,7 +25,7 @@ public class CartDecoratorTest { @Test public void decoratedClient() { final ProjectApiRoot apiRoot = CommercetoolsTestUtils.getProjectApiRoot(); - final DecoratedApiHttpClient client = new DecoratedApiHttpClient(apiRoot.getApiHttpClient()); + final DecoratedApiHttpClient client = new DecoratedApiHttpClient(apiRoot.getApiHttpClient(), true); final ProjectApiRoot decoratedRoot = ProjectApiRoot.fromClient(apiRoot.getProjectKey(), client); final CartDraft cartDraft = CartDraftBuilder.of().currency("EUR").build(); @@ -51,8 +51,11 @@ public static class DecoratedApiHttpClient implements ApiHttpClient { private ApiHttpRequest lastRequest; - public DecoratedApiHttpClient(ApiHttpClient apiHttpClient) { + private boolean enableResetLineItemExternalTotals; + + public DecoratedApiHttpClient(ApiHttpClient apiHttpClient, boolean enableResetLineItemExternalTotals) { this.apiHttpClient = apiHttpClient; + this.enableResetLineItemExternalTotals = enableResetLineItemExternalTotals; } @Override @@ -99,7 +102,7 @@ public void close() throws Exception { } public CreateHttpRequestCommand resetLineItemExternalTotals(CreateHttpRequestCommand method) { - if (method instanceof ByProjectKeyCartsByIDPost) { + if (enableResetLineItemExternalTotals && method instanceof ByProjectKeyCartsByIDPost) { final ByProjectKeyCartsByIDPost byProjectKeyCartsByIDPost = (ByProjectKeyCartsByIDPost) method; final CartUpdate cartUpdate = byProjectKeyCartsByIDPost.getBody(); if (cartUpdate instanceof WithCartCartUpdateImpl) {