From 5a1ab8d5bdb43a428067d5b886a973d3321d1eb9 Mon Sep 17 00:00:00 2001
From: praveenkumarct
Date: Wed, 8 Sep 2021 11:55:58 +0200
Subject: [PATCH 1/3] Set NoShipping to 1, When address is missing.
---
.../model/common/AuthorizationRequest.java | 9 ++
.../payone/mapping/MappingUtil.java | 40 ++++---
.../main/BasicPaymentRequestWorkflow.java | 100 +++++++++++++++-
.../payone/mapping/MappingUtilTest.java | 113 +++++++++++++++---
4 files changed, 222 insertions(+), 40 deletions(-)
diff --git a/service/src/main/java/com/commercetools/pspadapter/payone/domain/payone/model/common/AuthorizationRequest.java b/service/src/main/java/com/commercetools/pspadapter/payone/domain/payone/model/common/AuthorizationRequest.java
index 694bbb1b99..6f0af287ef 100644
--- a/service/src/main/java/com/commercetools/pspadapter/payone/domain/payone/model/common/AuthorizationRequest.java
+++ b/service/src/main/java/com/commercetools/pspadapter/payone/domain/payone/model/common/AuthorizationRequest.java
@@ -120,6 +120,7 @@ public class AuthorizationRequest extends BaseRequest {
private String backurl;
+ private int noShipping;
protected AuthorizationRequest(final PayoneConfig config, final String requestType, final String clearingtype) {
super(config, requestType);
@@ -436,4 +437,12 @@ public String getBackurl() {
public void setBackurl(final String backurl) {
this.backurl = backurl;
}
+
+ public int getNoShipping() {
+ return noShipping;
+ }
+
+ public void setNoShipping(int noShipping) {
+ this.noShipping = noShipping;
+ }
}
diff --git a/service/src/main/java/com/commercetools/pspadapter/payone/mapping/MappingUtil.java b/service/src/main/java/com/commercetools/pspadapter/payone/mapping/MappingUtil.java
index 3c9e2c8994..d39e3d4eec 100644
--- a/service/src/main/java/com/commercetools/pspadapter/payone/mapping/MappingUtil.java
+++ b/service/src/main/java/com/commercetools/pspadapter/payone/mapping/MappingUtil.java
@@ -129,22 +129,30 @@ public static void mapCustomerToRequest(@Nonnull final AuthorizationRequest requ
public static void mapShippingAddressToRequest(final AuthorizationRequest request, final Address shippingAddress) {
- if(shippingAddress == null) {
- throw new IllegalArgumentException("Missing shipping address details");
- }
-
- request.setShipping_firstname(shippingAddress.getFirstName());
- request.setShipping_lastname(shippingAddress.getLastName());
- request.setShipping_street(joinStringsIgnoringNull(Arrays.asList(shippingAddress.getStreetName(),
- shippingAddress.getStreetNumber())));
- request.setShipping_zip(shippingAddress.getPostalCode());
- request.setShipping_city(shippingAddress.getCity());
- request.setShipping_country(shippingAddress.getCountry().toLocale().getCountry());
- request.setShipping_company(joinStringsIgnoringNull(Arrays.asList(shippingAddress.getCompany(),
- shippingAddress.getDepartment())));
-
- if (countriesWithStateAllowed.contains(shippingAddress.getCountry())) {
- request.setShipping_state(shippingAddress.getState());
+ final String shippingCountry = shippingAddress.getCountry().toLocale().getCountry();
+ final String shipping_street = joinStringsIgnoringNull(asList(shippingAddress.getStreetName(),
+ shippingAddress.getStreetNumber()));
+
+ if(shippingAddress == null
+ || StringUtils.isBlank(shippingAddress.getPostalCode())
+ || StringUtils.isBlank(shippingCountry)
+ || StringUtils.isBlank(shipping_street)
+ || StringUtils.isBlank(shippingAddress.getCity())
+ ) {
+ request.setNoShipping(1);
+ } else {
+ request.setShipping_firstname(shippingAddress.getFirstName());
+ request.setShipping_lastname(shippingAddress.getLastName());
+ request.setShipping_street(shipping_street);
+ request.setShipping_zip(shippingAddress.getPostalCode());
+ request.setShipping_city(shippingAddress.getCity());
+ request.setShipping_country(shippingCountry);
+ request.setShipping_company(joinStringsIgnoringNull(Arrays.asList(shippingAddress.getCompany(),
+ shippingAddress.getDepartment())));
+
+ if (countriesWithStateAllowed.contains(shippingAddress.getCountry())) {
+ request.setShipping_state(shippingAddress.getState());
+ }
}
}
diff --git a/service/src/test/java/com/commercetools/main/BasicPaymentRequestWorkflow.java b/service/src/test/java/com/commercetools/main/BasicPaymentRequestWorkflow.java
index ac8cb047a4..01a77b81bf 100644
--- a/service/src/test/java/com/commercetools/main/BasicPaymentRequestWorkflow.java
+++ b/service/src/test/java/com/commercetools/main/BasicPaymentRequestWorkflow.java
@@ -2,24 +2,51 @@
import com.commercetools.Main;
import com.commercetools.pspadapter.payone.config.PropertyProvider;
+import com.commercetools.pspadapter.payone.domain.ctp.CustomTypeBuilder;
+import com.commercetools.pspadapter.payone.mapping.CustomFieldKeys;
+import com.neovisionaries.i18n.CountryCode;
+import io.sphere.sdk.carts.CartDraft;
+import io.sphere.sdk.carts.CartDraftBuilder;
+import io.sphere.sdk.carts.commands.CartCreateCommand;
+import io.sphere.sdk.carts.commands.CartUpdateCommand;
+import io.sphere.sdk.carts.commands.updateactions.AddPayment;
+import io.sphere.sdk.carts.commands.updateactions.SetBillingAddress;
+import io.sphere.sdk.carts.commands.updateactions.SetShippingAddress;
+import io.sphere.sdk.models.Address;
import io.sphere.sdk.payments.Payment;
+import io.sphere.sdk.payments.PaymentDraft;
+import io.sphere.sdk.payments.PaymentDraftBuilder;
+import io.sphere.sdk.payments.PaymentMethodInfoBuilder;
+import io.sphere.sdk.payments.TransactionDraftBuilder;
import io.sphere.sdk.payments.TransactionState;
+import io.sphere.sdk.payments.TransactionType;
+import io.sphere.sdk.payments.commands.PaymentCreateCommand;
+import io.sphere.sdk.payments.commands.PaymentUpdateCommand;
+import io.sphere.sdk.payments.commands.updateactions.AddTransaction;
import io.sphere.sdk.payments.queries.PaymentQuery;
import io.sphere.sdk.queries.PagedQueryResult;
import io.sphere.sdk.queries.QueryPredicate;
+import io.sphere.sdk.types.CustomFieldsDraft;
+import io.sphere.sdk.utils.MoneyImpl;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
-import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.Test;
-import java.net.URISyntaxException;
+import javax.annotation.Nonnull;
+import javax.money.Monetary;
+import javax.money.MonetaryAmount;
+import java.time.ZonedDateTime;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Random;
import java.util.function.Function;
import static com.commercetools.pspadapter.payone.domain.payone.PayonePostServiceImpl.executeGetRequest;
import static com.commercetools.pspadapter.payone.domain.payone.model.common.ResponseStatus.APPROVED;
+import static com.commercetools.pspadapter.payone.domain.payone.model.common.ResponseStatus.REDIRECT;
import static java.lang.String.format;
import static org.assertj.core.api.Assertions.assertThat;
import static util.PaymentRequestHelperUtil.CTP_CLIENT;
@@ -37,10 +64,10 @@
public class BasicPaymentRequestWorkflow {
public static final int DEFAULT_PORT = 8080;
- private final Map testInternalProperties = new HashMap<>();
+ private static final Map testInternalProperties = new HashMap<>();
- @Before
- public void setUp() throws URISyntaxException {
+ @BeforeClass
+ public static void setUp() {
testInternalProperties.put("TENANTS", getTenant());
testInternalProperties.put("TEST_DATA_CT_PROJECT_KEY", getProjectKey());
@@ -89,4 +116,67 @@ public void verifyCreditCardTransferPayoneRequestIsSuccess() throws Exception {
assertThat(payment.getTransactions().get(0).getState()).isEqualTo(TransactionState.SUCCESS);
});
}
+
+ @Test
+ public void verifyPaypalWalletTransferPayoneAuthorizationRequestIsSuccess() throws Exception {
+ // Prepare
+ final String paymentId = preparePaymentWithAuthorizedAmountAndOrder();
+
+ // Test
+ final HttpResponse httpResponse = executeGetRequest(format(URL_HANDLE_PAYMENT+paymentId, DEFAULT_PORT));
+
+ // Assert
+ assertThat(httpResponse.getStatusLine().getStatusCode()).isIn(HttpStatus.SC_ACCEPTED, HttpStatus.SC_OK);
+
+ final PagedQueryResult paymentPagedQueryResult =
+ CTP_CLIENT.execute(PaymentQuery.of()
+ .withPredicates(QueryPredicate.of(format("id=\"%s\"", paymentId))))
+ .toCompletableFuture().join();
+
+ assertThat(paymentPagedQueryResult.getResults().get(0))
+ .satisfies(
+ payment -> {
+ assertThat(payment.getPaymentStatus().getInterfaceCode()).isEqualTo(REDIRECT.toString());
+ });
+ }
+
+ @Nonnull
+ private static String preparePaymentWithAuthorizedAmountAndOrder() {
+ final Map customFieldKeysMap = new HashMap<>();
+ customFieldKeysMap.put(CustomFieldKeys.SUCCESS_URL_FIELD, "https://example.com/success");
+ customFieldKeysMap.put(CustomFieldKeys.ERROR_URL_FIELD, "https://example.com/error");
+ customFieldKeysMap.put(CustomFieldKeys.CANCEL_URL_FIELD, "https://example.com/cancel");
+ customFieldKeysMap.put(CustomFieldKeys.REDIRECT_URL_FIELD, "https://example.com/redirect");
+ customFieldKeysMap.put(CustomFieldKeys.REFERENCE_FIELD, String.valueOf(new Random().nextInt() + System.nanoTime()));
+ customFieldKeysMap.put(CustomFieldKeys.LANGUAGE_CODE_FIELD, "en");
+
+ final MonetaryAmount monetaryAmount = MoneyImpl.ofCents(4000, "EUR");
+ final PaymentDraft paymentDraft =
+ PaymentDraftBuilder.of(monetaryAmount)
+ .paymentMethodInfo(PaymentMethodInfoBuilder.of()
+ .method("WALLET-PAYPAL")
+ .paymentInterface("PAYONE")
+ .build())
+ .custom(CustomFieldsDraft.ofTypeKeyAndObjects(
+ CustomTypeBuilder.PAYMENT_WALLET, customFieldKeysMap))
+ .build();
+
+ final Payment payment = CTP_CLIENT.executeBlocking(PaymentCreateCommand.of(paymentDraft));
+ final CartDraft cartDraft = CartDraftBuilder.of(Monetary.getCurrency("EUR")).build();
+
+ CTP_CLIENT.executeBlocking(CartUpdateCommand.of(
+ CTP_CLIENT.executeBlocking(CartCreateCommand.of(cartDraft)),
+ Arrays.asList(
+ AddPayment.of(payment),
+ SetShippingAddress.of(Address.of(CountryCode.DE)),
+ SetBillingAddress.of(Address.of(CountryCode.DE).withLastName("Test Buyer"))
+ )));
+
+ CTP_CLIENT.executeBlocking(PaymentUpdateCommand.of(payment, AddTransaction.of(TransactionDraftBuilder
+ .of(TransactionType.AUTHORIZATION, monetaryAmount, ZonedDateTime.now())
+ .state(TransactionState.PENDING)
+ .build())));
+
+ return payment.getId();
+ }
}
diff --git a/service/src/test/java/com/commercetools/pspadapter/payone/mapping/MappingUtilTest.java b/service/src/test/java/com/commercetools/pspadapter/payone/mapping/MappingUtilTest.java
index 5328c8b395..b13123e2fc 100644
--- a/service/src/test/java/com/commercetools/pspadapter/payone/mapping/MappingUtilTest.java
+++ b/service/src/test/java/com/commercetools/pspadapter/payone/mapping/MappingUtilTest.java
@@ -70,7 +70,7 @@ public void setUp() throws Exception {
}
@Test
- public void testCountryStateMapping() {
+ public void testBillingAddressCountryStateMapping() {
Address addressDE = Address.of(DE)
.withState("AK");
Address addressUS = Address.of(CountryCode.US)
@@ -84,20 +84,45 @@ public void testCountryStateMapping() {
paymentWithCartLike);
MappingUtil.mapBillingAddressToRequest(authorizationRequestDE, addressDE);
- MappingUtil.mapShippingAddressToRequest(authorizationRequestDE, addressDE);
MappingUtil.mapBillingAddressToRequest(authorizationRequestUS, addressUS);
- MappingUtil.mapShippingAddressToRequest(authorizationRequestUS, addressUS);
softly.assertThat(authorizationRequestDE.getState()).as("DE billing address state").isNullOrEmpty();
- softly.assertThat(authorizationRequestDE.getShipping_state()).as("DE shipping address state").isNullOrEmpty();
softly.assertThat(authorizationRequestUS.getState()).as("US billing address state").isEqualTo("AK");
+
+ softly.assertAll();
+ }
+
+ @Test
+ public void testShippingAddressCountryStateMapping() {
+ Address addressDE = Address.of(DE)
+ .withCity("City")
+ .withPostalCode("123")
+ .withStreetNumber("5")
+ .withState("AK");
+ Address addressUS = Address.of(CountryCode.US)
+ .withCity("City")
+ .withPostalCode("123")
+ .withStreetName("test Street Name")
+ .withState("AK");
+
+ CreditCardAuthorizationRequest authorizationRequestDE =
+ new CreditCardAuthorizationRequest(new PayoneConfig(tenantPropertyProvider), "000123",
+ paymentWithCartLike);
+ CreditCardAuthorizationRequest authorizationRequestUS =
+ new CreditCardAuthorizationRequest(new PayoneConfig(tenantPropertyProvider), "000123",
+ paymentWithCartLike);
+
+ MappingUtil.mapShippingAddressToRequest(authorizationRequestDE, addressDE);
+ MappingUtil.mapShippingAddressToRequest(authorizationRequestUS, addressUS);
+
+ softly.assertThat(authorizationRequestDE.getShipping_state()).as("DE shipping address state").isNullOrEmpty();
softly.assertThat(authorizationRequestUS.getShipping_state()).as("US shipping address state").isEqualTo("AK");
softly.assertAll();
}
@Test
- public void streetJoiningFull() {
+ public void billingAddressStreetJoiningFull() {
Address addressWithNameNumber = Address.of(DE)
.withStreetName("Test Street")
.withStreetNumber("2");
@@ -107,16 +132,29 @@ public void streetJoiningFull() {
paymentWithCartLike);
MappingUtil.mapBillingAddressToRequest(authorizationRequestWithNameNumber, addressWithNameNumber);
- MappingUtil.mapShippingAddressToRequest(authorizationRequestWithNameNumber, addressWithNameNumber);
- softly.assertThat(authorizationRequestWithNameNumber.getStreet()).as("billing address state").isEqualTo(addressWithNameNumber.getStreetName() + " " + addressWithNameNumber.getStreetNumber());
- softly.assertThat(authorizationRequestWithNameNumber.getShipping_street()).as("shipping address state").isEqualTo(addressWithNameNumber.getStreetName() + " " + addressWithNameNumber.getStreetNumber());
+ assertThat(authorizationRequestWithNameNumber.getStreet()).as("billing address state").isEqualTo(addressWithNameNumber.getStreetName() + " " + addressWithNameNumber.getStreetNumber());
+ }
- softly.assertAll();
+ @Test
+ public void ShippingAddressStreetJoiningFull() {
+ Address addressWithNameNumber = Address.of(DE)
+ .withPostalCode("123")
+ .withCity("City")
+ .withStreetName("Test Street")
+ .withStreetNumber("2");
+
+ CreditCardAuthorizationRequest authorizationRequestWithNameNumber =
+ new CreditCardAuthorizationRequest(new PayoneConfig(tenantPropertyProvider), "000123",
+ paymentWithCartLike);
+
+ MappingUtil.mapShippingAddressToRequest(authorizationRequestWithNameNumber, addressWithNameNumber);
+
+ assertThat(authorizationRequestWithNameNumber.getShipping_street()).as("shipping address state").isEqualTo(addressWithNameNumber.getStreetName() + " " + addressWithNameNumber.getStreetNumber());
}
@Test
- public void streetJoiningNoNumber() {
+ public void billingAddressStreetJoiningNoNumber() {
Address addressNoNumber = Address.of(DE)
.withStreetName("Test Street");
@@ -125,16 +163,28 @@ public void streetJoiningNoNumber() {
paymentWithCartLike);
MappingUtil.mapBillingAddressToRequest(authorizationRequestNoNumber, addressNoNumber);
- MappingUtil.mapShippingAddressToRequest(authorizationRequestNoNumber, addressNoNumber);
- softly.assertThat(authorizationRequestNoNumber.getStreet()).as("billing address state").isEqualTo(addressNoNumber.getStreetName());
- softly.assertThat(authorizationRequestNoNumber.getShipping_street()).as("shipping address state").isEqualTo(addressNoNumber.getStreetName());
+ assertThat(authorizationRequestNoNumber.getStreet()).as("billing address state").isEqualTo(addressNoNumber.getStreetName());
+ }
- softly.assertAll();
+ @Test
+ public void shippingAddressStreetJoiningNoNumber() {
+ Address addressNoNumber = Address.of(DE)
+ .withCity("City")
+ .withPostalCode("123")
+ .withStreetName("Test Street");
+
+ CreditCardAuthorizationRequest authorizationRequestNoNumber =
+ new CreditCardAuthorizationRequest(new PayoneConfig(tenantPropertyProvider), "000123",
+ paymentWithCartLike);
+
+ MappingUtil.mapShippingAddressToRequest(authorizationRequestNoNumber, addressNoNumber);
+
+ assertThat(authorizationRequestNoNumber.getShipping_street()).as("shipping address state").isEqualTo(addressNoNumber.getStreetName());
}
@Test
- public void streetJoiningNoName() {
+ public void billingAddressStreetJoiningNoName() {
Address addressNoName = Address.of(DE)
.withStreetNumber("5");
@@ -143,13 +193,38 @@ public void streetJoiningNoName() {
paymentWithCartLike);
MappingUtil.mapBillingAddressToRequest(authorizationRequestNoName, addressNoName);
+
+ assertThat(authorizationRequestNoName.getStreet()).as("DE billing address state").isEqualTo("5");
+ }
+
+ @Test
+ public void shippingAddressStreetJoiningNoName() {
+ Address addressNoName = Address.of(DE)
+ .withCity("City")
+ .withPostalCode("123")
+ .withStreetNumber("5");
+
+ CreditCardAuthorizationRequest authorizationRequestNoName =
+ new CreditCardAuthorizationRequest(new PayoneConfig(tenantPropertyProvider), "000123",
+ paymentWithCartLike);
+
MappingUtil.mapShippingAddressToRequest(authorizationRequestNoName, addressNoName);
- softly.assertThat(authorizationRequestNoName.getStreet()).as("DE billing address state").isEqualTo("5");
- softly.assertThat(authorizationRequestNoName.getShipping_street()).as("DE shipping address state").isEqualTo(
- "5");
+ assertThat(authorizationRequestNoName.getShipping_street()).as("DE shipping address state").isEqualTo(
+ "5");
+ }
- softly.assertAll();
+ @Test
+ public void shippingAddressMissingSetNoShippingToOne() {
+ Address addressMissingFields = Address.of(DE);
+
+ CreditCardAuthorizationRequest authorizationRequestMissingAddress =
+ new CreditCardAuthorizationRequest(new PayoneConfig(tenantPropertyProvider), "000123",
+ paymentWithCartLike);
+
+ MappingUtil.mapShippingAddressToRequest(authorizationRequestMissingAddress, addressMissingFields);
+
+ assertThat(authorizationRequestMissingAddress.getNoShipping()).as("DE shipping address noShipping").isEqualTo(1);
}
@Test
From 6f1625eeeb82416971e4847793c27599ec452c7e Mon Sep 17 00:00:00 2001
From: praveenkumarct
Date: Thu, 9 Sep 2021 11:23:12 +0200
Subject: [PATCH 2/3] Move noShipping parameter only to Paypal wallet
transcations.
---
.../model/common/AuthorizationRequest.java | 10 --
.../wallet/WalletAuthorizationRequest.java | 9 +-
.../wallet/WalletPreauthorizationRequest.java | 10 +-
.../payone/mapping/MappingUtil.java | 39 +++--
.../payone/mapping/PayoneRequestFactory.java | 3 +-
.../payone/mapping/WalletRequestFactory.java | 11 +-
.../mapping/BaseWalletRequestFactoryTest.java | 4 +-
.../payone/mapping/MappingUtilTest.java | 134 +++++++-----------
.../pspadapter/tenant/TenantFactoryTest.java | 3 +-
9 files changed, 109 insertions(+), 114 deletions(-)
diff --git a/service/src/main/java/com/commercetools/pspadapter/payone/domain/payone/model/common/AuthorizationRequest.java b/service/src/main/java/com/commercetools/pspadapter/payone/domain/payone/model/common/AuthorizationRequest.java
index 6f0af287ef..7eb01786fc 100644
--- a/service/src/main/java/com/commercetools/pspadapter/payone/domain/payone/model/common/AuthorizationRequest.java
+++ b/service/src/main/java/com/commercetools/pspadapter/payone/domain/payone/model/common/AuthorizationRequest.java
@@ -120,8 +120,6 @@ public class AuthorizationRequest extends BaseRequest {
private String backurl;
- private int noShipping;
-
protected AuthorizationRequest(final PayoneConfig config, final String requestType, final String clearingtype) {
super(config, requestType);
@@ -437,12 +435,4 @@ public String getBackurl() {
public void setBackurl(final String backurl) {
this.backurl = backurl;
}
-
- public int getNoShipping() {
- return noShipping;
- }
-
- public void setNoShipping(int noShipping) {
- this.noShipping = noShipping;
- }
}
diff --git a/service/src/main/java/com/commercetools/pspadapter/payone/domain/payone/model/wallet/WalletAuthorizationRequest.java b/service/src/main/java/com/commercetools/pspadapter/payone/domain/payone/model/wallet/WalletAuthorizationRequest.java
index 5356d9afba..4d5ca98d97 100644
--- a/service/src/main/java/com/commercetools/pspadapter/payone/domain/payone/model/wallet/WalletAuthorizationRequest.java
+++ b/service/src/main/java/com/commercetools/pspadapter/payone/domain/payone/model/wallet/WalletAuthorizationRequest.java
@@ -13,10 +13,13 @@ public class WalletAuthorizationRequest extends AuthorizationRequest {
private String wallettype;
- public WalletAuthorizationRequest(final PayoneConfig config, final ClearingType clearingType) {
+ private int noShipping;
+
+ public WalletAuthorizationRequest(final PayoneConfig config, final ClearingType clearingType, final int noShipping) {
super(config, RequestType.AUTHORIZATION.getType(), clearingType.getPayoneCode());
this.wallettype = clearingType.getSubType();
+ this.noShipping = noShipping;
}
//**************************************************************
@@ -27,4 +30,8 @@ public WalletAuthorizationRequest(final PayoneConfig config, final ClearingType
public String getWallettype() {
return wallettype;
}
+
+ public int getNoShipping() {
+ return noShipping;
+ }
}
diff --git a/service/src/main/java/com/commercetools/pspadapter/payone/domain/payone/model/wallet/WalletPreauthorizationRequest.java b/service/src/main/java/com/commercetools/pspadapter/payone/domain/payone/model/wallet/WalletPreauthorizationRequest.java
index f29d3892b0..4c3b1477a7 100644
--- a/service/src/main/java/com/commercetools/pspadapter/payone/domain/payone/model/wallet/WalletPreauthorizationRequest.java
+++ b/service/src/main/java/com/commercetools/pspadapter/payone/domain/payone/model/wallet/WalletPreauthorizationRequest.java
@@ -13,10 +13,13 @@ public class WalletPreauthorizationRequest extends AuthorizationRequest {
private String wallettype;
- public WalletPreauthorizationRequest(final PayoneConfig config, final ClearingType clearingType) {
+ private int noShipping;
+
+ public WalletPreauthorizationRequest(final PayoneConfig config, final ClearingType clearingType, final int noShipping) {
super(config, RequestType.PREAUTHORIZATION.getType(), clearingType.getPayoneCode());
this.wallettype = clearingType.getSubType();
+ this.noShipping = noShipping;
}
//**************************************************************
@@ -27,4 +30,9 @@ public WalletPreauthorizationRequest(final PayoneConfig config, final ClearingTy
public String getWallettype() {
return wallettype;
}
+
+ public int getNoShipping() {
+ return noShipping;
+ }
+
}
diff --git a/service/src/main/java/com/commercetools/pspadapter/payone/mapping/MappingUtil.java b/service/src/main/java/com/commercetools/pspadapter/payone/mapping/MappingUtil.java
index d39e3d4eec..0f9b6f2834 100644
--- a/service/src/main/java/com/commercetools/pspadapter/payone/mapping/MappingUtil.java
+++ b/service/src/main/java/com/commercetools/pspadapter/payone/mapping/MappingUtil.java
@@ -1,6 +1,7 @@
package com.commercetools.pspadapter.payone.mapping;
import com.commercetools.pspadapter.payone.domain.ctp.PaymentWithCartLike;
+import com.commercetools.pspadapter.payone.domain.ctp.paymentmethods.MethodKeys;
import com.commercetools.pspadapter.payone.domain.payone.model.common.AuthorizationRequest;
import com.neovisionaries.i18n.CountryCode;
import io.sphere.sdk.carts.CartLike;
@@ -127,33 +128,41 @@ public static void mapCustomerToRequest(@Nonnull final AuthorizationRequest requ
});
}
- public static void mapShippingAddressToRequest(final AuthorizationRequest request, final Address shippingAddress) {
+ public static void mapShippingAddressToRequest(final AuthorizationRequest request,
+ final Address shippingAddress,
+ final String paymentMethod) {
- final String shippingCountry = shippingAddress.getCountry().toLocale().getCountry();
- final String shipping_street = joinStringsIgnoringNull(asList(shippingAddress.getStreetName(),
- shippingAddress.getStreetNumber()));
-
- if(shippingAddress == null
- || StringUtils.isBlank(shippingAddress.getPostalCode())
- || StringUtils.isBlank(shippingCountry)
- || StringUtils.isBlank(shipping_street)
- || StringUtils.isBlank(shippingAddress.getCity())
- ) {
- request.setNoShipping(1);
- } else {
+ if(shippingAddress != null) {
request.setShipping_firstname(shippingAddress.getFirstName());
request.setShipping_lastname(shippingAddress.getLastName());
- request.setShipping_street(shipping_street);
+ request.setShipping_street(joinStringsIgnoringNull(Arrays.asList(shippingAddress.getStreetName(),
+ shippingAddress.getStreetNumber())));
request.setShipping_zip(shippingAddress.getPostalCode());
request.setShipping_city(shippingAddress.getCity());
- request.setShipping_country(shippingCountry);
+ request.setShipping_country(shippingAddress.getCountry().toLocale().getCountry());
request.setShipping_company(joinStringsIgnoringNull(Arrays.asList(shippingAddress.getCompany(),
shippingAddress.getDepartment())));
if (countriesWithStateAllowed.contains(shippingAddress.getCountry())) {
request.setShipping_state(shippingAddress.getState());
}
+ } else if(!MethodKeys.WALLET_PAYPAL.equals(paymentMethod)) {
+ throw new IllegalArgumentException("Missing shipping address details");
+ }
+ }
+
+ public static int checkForMissingShippingAddress(Address shippingAddress) {
+
+ if(shippingAddress == null
+ || StringUtils.isBlank(shippingAddress.getPostalCode())
+ || StringUtils.isBlank(shippingAddress.getCity())
+ || StringUtils.isBlank(shippingAddress.getCountry().toLocale().getCountry())
+ || StringUtils.isBlank(joinStringsIgnoringNull(asList(shippingAddress.getStreetName(),
+ shippingAddress.getStreetNumber())))
+ ) {
+ return 1;
}
+ return 0;
}
public static void mapCustomFieldsFromPayment(final AuthorizationRequest request, final CustomFields ctPaymentCustomFields) {
diff --git a/service/src/main/java/com/commercetools/pspadapter/payone/mapping/PayoneRequestFactory.java b/service/src/main/java/com/commercetools/pspadapter/payone/mapping/PayoneRequestFactory.java
index d27f2eff52..fdca04bb6d 100644
--- a/service/src/main/java/com/commercetools/pspadapter/payone/mapping/PayoneRequestFactory.java
+++ b/service/src/main/java/com/commercetools/pspadapter/payone/mapping/PayoneRequestFactory.java
@@ -101,7 +101,8 @@ protected void mapFormPaymentWithCartLike(final AuthorizationRequest request,
}
try {
- MappingUtil.mapShippingAddressToRequest(request, ctCartLike.getShippingAddress());
+ MappingUtil.mapShippingAddressToRequest(request, ctCartLike.getShippingAddress(),
+ ctPayment.getPaymentMethodInfo().getMethod());
} catch (final IllegalArgumentException ex) {
logger.debug(
createTenantKeyValue(tenantConfig.getName()),
diff --git a/service/src/main/java/com/commercetools/pspadapter/payone/mapping/WalletRequestFactory.java b/service/src/main/java/com/commercetools/pspadapter/payone/mapping/WalletRequestFactory.java
index 318b143837..b943c2338f 100644
--- a/service/src/main/java/com/commercetools/pspadapter/payone/mapping/WalletRequestFactory.java
+++ b/service/src/main/java/com/commercetools/pspadapter/payone/mapping/WalletRequestFactory.java
@@ -7,6 +7,8 @@
import com.commercetools.pspadapter.payone.domain.payone.model.wallet.WalletAuthorizationRequest;
import com.commercetools.pspadapter.payone.domain.payone.model.wallet.WalletPreauthorizationRequest;
import com.commercetools.pspadapter.tenant.TenantConfig;
+import com.commercetools.util.function.TriFunction;
+import io.sphere.sdk.carts.CartLike;
import io.sphere.sdk.payments.Payment;
import io.sphere.sdk.payments.PaymentMethodInfo;
@@ -16,7 +18,8 @@
/**
* Requests factory for Wallet based payments, like PayPal and Paydirekt.
* Based on {@link PaymentMethodInfo#getMethod() Payment#paymentMethodInfo#method} value the request will be created
- * with respective {@link WalletAuthorizationRequest#clearingtype} and {@link WalletAuthorizationRequest#wallettype}
+ * with respective {@link WalletAuthorizationRequest#clearingtype}, {@link WalletAuthorizationRequest#wallettype}
+ * and {@link WalletAuthorizationRequest#noShipping}
*/
public class WalletRequestFactory extends PayoneRequestFactory {
@@ -38,16 +41,18 @@ public WalletAuthorizationRequest createAuthorizationRequest(@Nonnull final Paym
@Nonnull
private WR createRequestInternal(@Nonnull final PaymentWithCartLike paymentWithCartLike,
- @Nonnull final BiFunction super PayoneConfig, ClearingType, WR> requestConstructor) {
+ @Nonnull final TriFunction super PayoneConfig, ClearingType, Integer, WR> requestConstructor) {
final Payment ctPayment = paymentWithCartLike.getPayment();
+ final CartLike ctCartLike = paymentWithCartLike.getCartLike();
if(ctPayment.getCustom() == null) {
throw new IllegalArgumentException("Missing custom fields on payment!");
}
+ final int noShippingAddress = MappingUtil.checkForMissingShippingAddress(ctCartLike.getShippingAddress());
final ClearingType clearingType = ClearingType.getClearingTypeByKey(ctPayment.getPaymentMethodInfo().getMethod());
- WR request = requestConstructor.apply(getPayoneConfig(), clearingType);
+ WR request = requestConstructor.apply(getPayoneConfig(), clearingType, noShippingAddress);
mapFormPaymentWithCartLike(request, paymentWithCartLike);
diff --git a/service/src/test/java/com/commercetools/pspadapter/payone/mapping/BaseWalletRequestFactoryTest.java b/service/src/test/java/com/commercetools/pspadapter/payone/mapping/BaseWalletRequestFactoryTest.java
index 2e0c6a070c..6afa7a9f93 100644
--- a/service/src/test/java/com/commercetools/pspadapter/payone/mapping/BaseWalletRequestFactoryTest.java
+++ b/service/src/test/java/com/commercetools/pspadapter/payone/mapping/BaseWalletRequestFactoryTest.java
@@ -58,6 +58,7 @@ protected final void createFullPreauthorizationRequestFromValidPayment(Payment p
//clearing type
softly.assertThat(result.getClearingtype()).isEqualTo(expectedClearingtype);
softly.assertThat(result.getWallettype()).isEqualTo(expectedWalletType);
+ softly.assertThat(result.getNoShipping()).isEqualTo(0);
//references
softly.assertThat(result.getReference()).isEqualTo(paymentWithCartLike.getReference());
@@ -134,6 +135,7 @@ protected void createFullAuthorizationRequestFromValidPayment(Payment payment,
//clearing type
softly.assertThat(result.getClearingtype()).isEqualTo(expectedClearingtype);
softly.assertThat(result.getWallettype()).isEqualTo(expectedWalletType);
+ softly.assertThat(result.getNoShipping()).isEqualTo(0);
//references
softly.assertThat(result.getReference()).isEqualTo(paymentWithCartLike.getReference());
@@ -181,4 +183,4 @@ protected void createFullAuthorizationRequestFromValidPayment(Payment payment,
softly.assertAll();
}
-}
\ No newline at end of file
+}
diff --git a/service/src/test/java/com/commercetools/pspadapter/payone/mapping/MappingUtilTest.java b/service/src/test/java/com/commercetools/pspadapter/payone/mapping/MappingUtilTest.java
index b13123e2fc..26ea80737b 100644
--- a/service/src/test/java/com/commercetools/pspadapter/payone/mapping/MappingUtilTest.java
+++ b/service/src/test/java/com/commercetools/pspadapter/payone/mapping/MappingUtilTest.java
@@ -26,6 +26,8 @@
import java.util.Locale;
import java.util.Optional;
+import static com.commercetools.pspadapter.payone.domain.ctp.paymentmethods.MethodKeys.CREDIT_CARD;
+import static com.commercetools.pspadapter.payone.domain.ctp.paymentmethods.MethodKeys.WALLET_PAYPAL;
import static com.commercetools.pspadapter.payone.mapping.CustomFieldKeys.GENDER_FIELD;
import static com.commercetools.pspadapter.payone.mapping.CustomFieldKeys.LANGUAGE_CODE_FIELD;
import static com.commercetools.pspadapter.payone.mapping.MappingUtil.getPaymentLanguage;
@@ -70,7 +72,7 @@ public void setUp() throws Exception {
}
@Test
- public void testBillingAddressCountryStateMapping() {
+ public void testCountryStateMapping() {
Address addressDE = Address.of(DE)
.withState("AK");
Address addressUS = Address.of(CountryCode.US)
@@ -84,45 +86,20 @@ public void testBillingAddressCountryStateMapping() {
paymentWithCartLike);
MappingUtil.mapBillingAddressToRequest(authorizationRequestDE, addressDE);
+ MappingUtil.mapShippingAddressToRequest(authorizationRequestDE, addressDE, CREDIT_CARD);
MappingUtil.mapBillingAddressToRequest(authorizationRequestUS, addressUS);
+ MappingUtil.mapShippingAddressToRequest(authorizationRequestUS, addressUS, CREDIT_CARD);
softly.assertThat(authorizationRequestDE.getState()).as("DE billing address state").isNullOrEmpty();
- softly.assertThat(authorizationRequestUS.getState()).as("US billing address state").isEqualTo("AK");
-
- softly.assertAll();
- }
-
- @Test
- public void testShippingAddressCountryStateMapping() {
- Address addressDE = Address.of(DE)
- .withCity("City")
- .withPostalCode("123")
- .withStreetNumber("5")
- .withState("AK");
- Address addressUS = Address.of(CountryCode.US)
- .withCity("City")
- .withPostalCode("123")
- .withStreetName("test Street Name")
- .withState("AK");
-
- CreditCardAuthorizationRequest authorizationRequestDE =
- new CreditCardAuthorizationRequest(new PayoneConfig(tenantPropertyProvider), "000123",
- paymentWithCartLike);
- CreditCardAuthorizationRequest authorizationRequestUS =
- new CreditCardAuthorizationRequest(new PayoneConfig(tenantPropertyProvider), "000123",
- paymentWithCartLike);
-
- MappingUtil.mapShippingAddressToRequest(authorizationRequestDE, addressDE);
- MappingUtil.mapShippingAddressToRequest(authorizationRequestUS, addressUS);
-
softly.assertThat(authorizationRequestDE.getShipping_state()).as("DE shipping address state").isNullOrEmpty();
+ softly.assertThat(authorizationRequestUS.getState()).as("US billing address state").isEqualTo("AK");
softly.assertThat(authorizationRequestUS.getShipping_state()).as("US shipping address state").isEqualTo("AK");
softly.assertAll();
}
@Test
- public void billingAddressStreetJoiningFull() {
+ public void streetJoiningFull() {
Address addressWithNameNumber = Address.of(DE)
.withStreetName("Test Street")
.withStreetNumber("2");
@@ -132,29 +109,16 @@ public void billingAddressStreetJoiningFull() {
paymentWithCartLike);
MappingUtil.mapBillingAddressToRequest(authorizationRequestWithNameNumber, addressWithNameNumber);
+ MappingUtil.mapShippingAddressToRequest(authorizationRequestWithNameNumber, addressWithNameNumber, CREDIT_CARD);
- assertThat(authorizationRequestWithNameNumber.getStreet()).as("billing address state").isEqualTo(addressWithNameNumber.getStreetName() + " " + addressWithNameNumber.getStreetNumber());
- }
-
- @Test
- public void ShippingAddressStreetJoiningFull() {
- Address addressWithNameNumber = Address.of(DE)
- .withPostalCode("123")
- .withCity("City")
- .withStreetName("Test Street")
- .withStreetNumber("2");
-
- CreditCardAuthorizationRequest authorizationRequestWithNameNumber =
- new CreditCardAuthorizationRequest(new PayoneConfig(tenantPropertyProvider), "000123",
- paymentWithCartLike);
-
- MappingUtil.mapShippingAddressToRequest(authorizationRequestWithNameNumber, addressWithNameNumber);
+ softly.assertThat(authorizationRequestWithNameNumber.getStreet()).as("billing address state").isEqualTo(addressWithNameNumber.getStreetName() + " " + addressWithNameNumber.getStreetNumber());
+ softly.assertThat(authorizationRequestWithNameNumber.getShipping_street()).as("shipping address state").isEqualTo(addressWithNameNumber.getStreetName() + " " + addressWithNameNumber.getStreetNumber());
- assertThat(authorizationRequestWithNameNumber.getShipping_street()).as("shipping address state").isEqualTo(addressWithNameNumber.getStreetName() + " " + addressWithNameNumber.getStreetNumber());
+ softly.assertAll();
}
@Test
- public void billingAddressStreetJoiningNoNumber() {
+ public void streetJoiningNoNumber() {
Address addressNoNumber = Address.of(DE)
.withStreetName("Test Street");
@@ -163,28 +127,16 @@ public void billingAddressStreetJoiningNoNumber() {
paymentWithCartLike);
MappingUtil.mapBillingAddressToRequest(authorizationRequestNoNumber, addressNoNumber);
+ MappingUtil.mapShippingAddressToRequest(authorizationRequestNoNumber, addressNoNumber, CREDIT_CARD);
- assertThat(authorizationRequestNoNumber.getStreet()).as("billing address state").isEqualTo(addressNoNumber.getStreetName());
- }
-
- @Test
- public void shippingAddressStreetJoiningNoNumber() {
- Address addressNoNumber = Address.of(DE)
- .withCity("City")
- .withPostalCode("123")
- .withStreetName("Test Street");
-
- CreditCardAuthorizationRequest authorizationRequestNoNumber =
- new CreditCardAuthorizationRequest(new PayoneConfig(tenantPropertyProvider), "000123",
- paymentWithCartLike);
+ softly.assertThat(authorizationRequestNoNumber.getStreet()).as("billing address state").isEqualTo(addressNoNumber.getStreetName());
+ softly.assertThat(authorizationRequestNoNumber.getShipping_street()).as("shipping address state").isEqualTo(addressNoNumber.getStreetName());
- MappingUtil.mapShippingAddressToRequest(authorizationRequestNoNumber, addressNoNumber);
-
- assertThat(authorizationRequestNoNumber.getShipping_street()).as("shipping address state").isEqualTo(addressNoNumber.getStreetName());
+ softly.assertAll();
}
@Test
- public void billingAddressStreetJoiningNoName() {
+ public void streetJoiningNoName() {
Address addressNoName = Address.of(DE)
.withStreetNumber("5");
@@ -193,38 +145,58 @@ public void billingAddressStreetJoiningNoName() {
paymentWithCartLike);
MappingUtil.mapBillingAddressToRequest(authorizationRequestNoName, addressNoName);
+ MappingUtil.mapShippingAddressToRequest(authorizationRequestNoName, addressNoName, CREDIT_CARD);
- assertThat(authorizationRequestNoName.getStreet()).as("DE billing address state").isEqualTo("5");
- }
+ softly.assertThat(authorizationRequestNoName.getStreet()).as("DE billing address state").isEqualTo("5");
+ softly.assertThat(authorizationRequestNoName.getShipping_street()).as("DE shipping address state").isEqualTo(
+ "5");
- @Test
- public void shippingAddressStreetJoiningNoName() {
- Address addressNoName = Address.of(DE)
- .withCity("City")
- .withPostalCode("123")
- .withStreetNumber("5");
+ softly.assertAll();
+ }
+ @Test(expected = IllegalArgumentException.class)
+ public void WhenNoShippingAddressThrowException() {
CreditCardAuthorizationRequest authorizationRequestNoName =
new CreditCardAuthorizationRequest(new PayoneConfig(tenantPropertyProvider), "000123",
paymentWithCartLike);
- MappingUtil.mapShippingAddressToRequest(authorizationRequestNoName, addressNoName);
+ MappingUtil.mapShippingAddressToRequest(authorizationRequestNoName, null, CREDIT_CARD);
+ }
- assertThat(authorizationRequestNoName.getShipping_street()).as("DE shipping address state").isEqualTo(
- "5");
+ @Test
+ public void WhenShippingAddressIsNullReturnOneToSetValueForNoShipping() {
+
+ assertThat(MappingUtil.checkForMissingShippingAddress(null)).isEqualTo(1);
}
@Test
- public void shippingAddressMissingSetNoShippingToOne() {
- Address addressMissingFields = Address.of(DE);
+ public void WhenMissingShippingAddressReturnOneToSetValueForNoShipping() {
+ Address missingAddressFields = Address.of(DE)
+ .withStreetName("Test Street");
- CreditCardAuthorizationRequest authorizationRequestMissingAddress =
+ assertThat(MappingUtil.checkForMissingShippingAddress(missingAddressFields)).isEqualTo(1);
+ }
+
+ @Test
+ public void WhenShippingAddressIsPresentReturnZeroToSetValueForNoShipping() {
+ Address missingAddressFields = Address.of(DE)
+ .withPostalCode("123")
+ .withStreetNumber("5")
+ .withStreetName("Test Street")
+ .withCity("Test city");
+
+ assertThat(MappingUtil.checkForMissingShippingAddress(missingAddressFields)).isEqualTo(0);
+ }
+
+ @Test
+ public void WhenWalletPaymentAndNoShippingAddressShouldNotThrowException() {
+ CreditCardAuthorizationRequest authorizationRequest =
new CreditCardAuthorizationRequest(new PayoneConfig(tenantPropertyProvider), "000123",
paymentWithCartLike);
- MappingUtil.mapShippingAddressToRequest(authorizationRequestMissingAddress, addressMissingFields);
+ MappingUtil.mapShippingAddressToRequest(authorizationRequest, null, WALLET_PAYPAL);
- assertThat(authorizationRequestMissingAddress.getNoShipping()).as("DE shipping address noShipping").isEqualTo(1);
+ assertThat(authorizationRequest.getShipping_country()).isEqualTo(null);
}
@Test
diff --git a/service/src/test/java/com/commercetools/pspadapter/tenant/TenantFactoryTest.java b/service/src/test/java/com/commercetools/pspadapter/tenant/TenantFactoryTest.java
index cefc25528d..cefc409adb 100644
--- a/service/src/test/java/com/commercetools/pspadapter/tenant/TenantFactoryTest.java
+++ b/service/src/test/java/com/commercetools/pspadapter/tenant/TenantFactoryTest.java
@@ -175,7 +175,7 @@ public void createRequestFactory_paypal_preauthorization() throws Exception {
}
@Test
- public void createRequestFactory_paypal_authorization() throws Exception {
+ public void createRequestFactory_with_NoShippingAddress_paypal_authorization() throws Exception {
PayoneRequestFactory requestFactory = factory.createRequestFactory(WALLET_PAYPAL, tenantConfig);
PaymentWithCartLike paymentWithCartLike = testHelper.createPaypalPaymentWithCartLike();
AuthorizationRequest authorizationRequest = requestFactory.createAuthorizationRequest(paymentWithCartLike);
@@ -185,6 +185,7 @@ public void createRequestFactory_paypal_authorization() throws Exception {
assertThat(actual.get("request")).isEqualTo("authorization");
assertThat(actual.get("clearingtype")).isEqualTo("wlt");
assertThat(actual.get("wallettype")).isEqualTo("PPE");
+ assertThat(actual.get("noShipping")).isEqualTo(1);
}
@Test
From 9d1d6af4cdadb371319debfb31e4c016d82dde7c Mon Sep 17 00:00:00 2001
From: praveenkumarct
Date: Fri, 10 Sep 2021 20:56:14 +0200
Subject: [PATCH 3/3] Rename the IT test class name.
---
...tRequestWorkflow.java => BasicPaymentRequestWorkflowIT.java} | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
rename service/src/test/java/com/commercetools/main/{BasicPaymentRequestWorkflow.java => BasicPaymentRequestWorkflowIT.java} (99%)
diff --git a/service/src/test/java/com/commercetools/main/BasicPaymentRequestWorkflow.java b/service/src/test/java/com/commercetools/main/BasicPaymentRequestWorkflowIT.java
similarity index 99%
rename from service/src/test/java/com/commercetools/main/BasicPaymentRequestWorkflow.java
rename to service/src/test/java/com/commercetools/main/BasicPaymentRequestWorkflowIT.java
index 01a77b81bf..91f1a2390f 100644
--- a/service/src/test/java/com/commercetools/main/BasicPaymentRequestWorkflow.java
+++ b/service/src/test/java/com/commercetools/main/BasicPaymentRequestWorkflowIT.java
@@ -61,7 +61,7 @@
import static util.PropertiesHelperUtil.getProjectKey;
import static util.PropertiesHelperUtil.getTenant;
-public class BasicPaymentRequestWorkflow {
+public class BasicPaymentRequestWorkflowIT {
public static final int DEFAULT_PORT = 8080;
private static final Map testInternalProperties = new HashMap<>();