From faad70907b38f3bb8367848d4a5d7c8027de0369 Mon Sep 17 00:00:00 2001 From: devs+paytrail Date: Mon, 29 Apr 2024 23:41:22 +0700 Subject: [PATCH 01/28] commit --- .../src/main/java/io/paytrailpayment/Main.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java b/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java index 2a643c2..c4500fb 100644 --- a/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java +++ b/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java @@ -1,9 +1,7 @@ package io.paytrailpayment; import io.paytrailpayment.dto.request.CreatePaymentRequest; -import io.paytrailpayment.dto.request.model.CallbackUrl; -import io.paytrailpayment.dto.request.model.Customer; -import io.paytrailpayment.dto.request.model.Item; +import io.paytrailpayment.dto.request.model.*; import io.paytrailpayment.dto.response.CreatePaymentResponse; import io.paytrailpayment.utilites.ResponseMessage; @@ -19,8 +17,8 @@ public static void main(String[] args) { req.setStamp(UUID.randomUUID().toString()); req.setReference("9187445"); - req.setCurrency("EUR"); - req.setLanguage("FI"); + req.setCurrency(Currency.EUR); + req.setLanguage(Language.EN); req.setOrderId("12335"); req.setAmount(1590); From 1cb87318dfe8e07e0ddb4123463c7e8275092b88 Mon Sep 17 00:00:00 2001 From: devs+paytrail Date: Tue, 30 Apr 2024 00:12:13 +0700 Subject: [PATCH 02/28] fix/refactor-exception --- .../main/java/io/paytrailpayment/Main.java | 8 +- paytrailpayment-sdk/pom.xml | 11 +- .../java/io/paytrailpayment/Paytrail.java | 15 +- .../io/paytrailpayment/PaytrailClient.java | 210 ++++++++---------- .../dto/request/CreatePaymentRequest.java | 84 +++---- .../dto/request/CreateRefundRequest.java | 34 ++- .../paytrailpayment/dto/request/Request.java | 18 +- .../dto/request/ValidationResult.java | 21 +- .../dto/request/model/Address.java | 42 ++-- .../dto/request/model/CallbackUrl.java | 17 +- .../dto/request/model/Commission.java | 15 +- .../dto/request/model/Customer.java | 40 ++-- .../dto/request/model/Item.java | 27 +-- .../{Currency.java => PaytrailCurrency.java} | 4 +- .../{Language.java => PaytrailLanguage.java} | 4 +- ...p.java => PaytrailPaymentMethodGroup.java} | 2 +- .../dto/request/model/RefundItem.java | 34 +-- .../dto/response/CreatePaymentResponse.java | 5 + .../dto/response/CreateRefundResponse.java | 6 + .../dto/response/GetPaymentResponse.java | 5 + .../dto/response/data/GetPaymentData.java | 2 +- .../dto/response/model/ApplePay.java | 4 +- .../dto/response/model/Provider.java | 4 +- .../exception/AppException.java | 13 -- .../exception/PaytrailBaseException.java | 19 ++ .../exception/PaytrailClientException.java | 14 ++ .../PaytrailCommunicationException.java | 12 + .../utilites/ResponseMessage.java | 2 +- .../src/test/java/CreatePaymentUnitTest.java | 16 +- .../java/CreateRefundRequestUnitTest.java | 8 +- .../src/test/java/GetPaymentUnitTest.java | 4 +- 31 files changed, 335 insertions(+), 365 deletions(-) rename paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/{Currency.java => PaytrailCurrency.java} (70%) rename paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/{Language.java => PaytrailLanguage.java} (73%) rename paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/{PaymentMethodGroup.java => PaytrailPaymentMethodGroup.java} (70%) delete mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/exception/AppException.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/exception/PaytrailBaseException.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/exception/PaytrailClientException.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/exception/PaytrailCommunicationException.java diff --git a/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java b/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java index c4500fb..2a643c2 100644 --- a/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java +++ b/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java @@ -1,7 +1,9 @@ package io.paytrailpayment; import io.paytrailpayment.dto.request.CreatePaymentRequest; -import io.paytrailpayment.dto.request.model.*; +import io.paytrailpayment.dto.request.model.CallbackUrl; +import io.paytrailpayment.dto.request.model.Customer; +import io.paytrailpayment.dto.request.model.Item; import io.paytrailpayment.dto.response.CreatePaymentResponse; import io.paytrailpayment.utilites.ResponseMessage; @@ -17,8 +19,8 @@ public static void main(String[] args) { req.setStamp(UUID.randomUUID().toString()); req.setReference("9187445"); - req.setCurrency(Currency.EUR); - req.setLanguage(Language.EN); + req.setCurrency("EUR"); + req.setLanguage("FI"); req.setOrderId("12335"); req.setAmount(1590); diff --git a/paytrailpayment-sdk/pom.xml b/paytrailpayment-sdk/pom.xml index 0435a19..eb0a084 100644 --- a/paytrailpayment-sdk/pom.xml +++ b/paytrailpayment-sdk/pom.xml @@ -45,7 +45,16 @@ 5.10.0 test - + + com.google.code.gson + gson + 2.8.9 + + + org.apache.commons + commons-lang3 + 3.12.0 + 8 diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/Paytrail.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/Paytrail.java index a726b1a..3d84627 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/Paytrail.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/Paytrail.java @@ -1,6 +1,8 @@ package io.paytrailpayment; import io.paytrailpayment.dto.response.data.DataResponse; +import io.paytrailpayment.exception.PaytrailClientException; +import io.paytrailpayment.exception.PaytrailCommunicationException; import io.paytrailpayment.utilites.Constants; import io.paytrailpayment.utilites.ResponseMessage; import io.paytrailpayment.utilites.Signature; @@ -13,6 +15,7 @@ import org.apache.hc.core5.http.io.HttpClientResponseHandler; import org.apache.hc.core5.http.io.entity.EntityUtils; +import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.*; @@ -61,7 +64,7 @@ protected String calculateHmac(Map hdparams, String body) throws return Signature.calculateHmac(this.secretKey, hdparams, body, Constants.SHA256_ALGORITHM); } - protected DataResponse handleRequest(String method, String url, String body, String transactionId, String checkoutTokenizationId) { + protected DataResponse handleRequest(String method, String url, String body, String transactionId, String checkoutTokenizationId) throws PaytrailClientException, PaytrailCommunicationException{ DataResponse res = new DataResponse(); try { Map hdparams = getHeaders(method, transactionId, checkoutTokenizationId); @@ -120,10 +123,12 @@ protected DataResponse handleRequest(String method, String url, String body, Str } return res; - } catch (Exception ex) { - res.setStatusCode(ResponseMessage.RESPONSE_ERROR.getCode()); - res.setData(ex.toString()); - return res; + } catch (NoSuchAlgorithmException | InvalidKeyException e) { + // throw the exception related to the client. + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.toString(), e); + } catch (IOException e) { + // throw the exception related to the communication with the server. + throw new PaytrailCommunicationException(ResponseMessage.EXCEPTION.getCode(), e.getMessage(), e); } } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java index a6166a8..46691dd 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java @@ -1,5 +1,6 @@ package io.paytrailpayment; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.paytrailpayment.dto.request.CreatePaymentRequest; import io.paytrailpayment.dto.request.CreateRefundRequest; @@ -11,15 +12,21 @@ import io.paytrailpayment.dto.response.data.DataResponse; import io.paytrailpayment.dto.response.data.CreatePaymentData; import io.paytrailpayment.dto.response.data.GetPaymentData; -import io.paytrailpayment.exception.AppException; +import io.paytrailpayment.exception.PaytrailClientException; +import io.paytrailpayment.exception.PaytrailCommunicationException; import io.paytrailpayment.utilites.Constants; import io.paytrailpayment.utilites.ResponseMessage; import lombok.*; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + import static io.paytrailpayment.utilites.Constants.GET_METHOD; @NoArgsConstructor -@Getter @Setter +@Getter +@Setter public class PaytrailClient extends Paytrail implements IPaytrail { public PaytrailClient(String merchantId, String secretKey, String platformName) { this.merchantId = merchantId; @@ -29,180 +36,141 @@ public PaytrailClient(String merchantId, String secretKey, String platformName) @Override public CreatePaymentResponse createPayment(CreatePaymentRequest req) { - CreatePaymentResponse res = new CreatePaymentResponse(); - try { - if (!validateCreatePaymentRequest(req, res)) { - return res; + ValidationResult validationResult = validateCreatePaymentRequest(req); + if (!validationResult.isValid()) { + CreatePaymentResponse response = new CreatePaymentResponse(); + response.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + response.setReturnMessage(validationResult.getMessagesAsJson()); + return response; } - - ObjectMapper mapper = new ObjectMapper(); - String jsonRequest = mapper.writeValueAsString(req); - res = createPayment(jsonRequest); - - return res; - } catch (Exception e) { - throw new AppException(ResponseMessage.RESPONSE_ERROR.getCode(), e.toString()); + return executeCreatePayment(req); + } catch (PaytrailClientException | PaytrailCommunicationException e) { + return new CreatePaymentResponse(e.getErrorCode(), e.getMessage(), null); } } - @Override - public GetPaymentResponse getPaymentInfo(String transactionId) { - GetPaymentResponse res = new GetPaymentResponse(); - - try { - if (!validateGetPaymentRequest(transactionId, res)) { - return res; - } - - res = getPayment(transactionId); - - return res; - } catch (Exception e) { - throw new AppException(ResponseMessage.RESPONSE_ERROR.getCode(), e.toString()); + private ValidationResult validateCreatePaymentRequest(CreatePaymentRequest req) { + if (req == null) { + Map error = new HashMap<>(); + error.put("error", ResponseMessage.BAD_REQUEST.getDescription()); + return new ValidationResult(false, error); } + return req.validate(); } - @Override - public CreateRefundResponse createRefundRequest(CreateRefundRequest req, String transactionId) { - CreateRefundResponse res = new CreateRefundResponse(); - + private CreatePaymentResponse executeCreatePayment(CreatePaymentRequest req) throws PaytrailCommunicationException, PaytrailClientException{ try { - if (!validateCreateRefundRequest(req, res, transactionId)) { - return res; - } - ObjectMapper mapper = new ObjectMapper(); String jsonRequest = mapper.writeValueAsString(req); - res = createRefundRequest(transactionId, jsonRequest); - - return res; - } catch (Exception e) { - throw new AppException(ResponseMessage.RESPONSE_ERROR.getCode(), e.toString()); - } - } - - private CreatePaymentResponse createPayment(String body) { - CreatePaymentResponse res = new CreatePaymentResponse(); - - try { String targetURL = Constants.API_ENDPOINT + "/payments"; - DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, body, null, null); + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); if (data.getStatusCode() != ResponseMessage.CREATED.getCode()) { - res.setReturnCode(data.getStatusCode()); - res.setReturnMessage(data.getData()); + return new CreatePaymentResponse(data.getStatusCode(), data.getData(), null); } else { - ObjectMapper mapper = new ObjectMapper(); + // Successfully created the payment and parse the result CreatePaymentData dataMapper = mapper.readValue(data.getData(), CreatePaymentData.class); - - res.setReturnCode(data.getStatusCode()); - res.setReturnMessage(ResponseMessage.OK.getDescription()); - res.setData(dataMapper); + return new CreatePaymentResponse(data.getStatusCode(), ResponseMessage.OK.getDescription(), dataMapper); } - return res; + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } - } catch (Exception e) { - throw new AppException(ResponseMessage.RESPONSE_ERROR.getCode(), e.toString()); + @Override + public GetPaymentResponse getPaymentInfo(String transactionId) { + try { + ValidationResult validationResult = validateGetPaymentRequest(transactionId); + if (!validationResult.isValid()) { + GetPaymentResponse response = new GetPaymentResponse(); + response.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + response.setReturnMessage(validationResult.getMessagesAsJson()); + return response; + } + return executeGetPayment(transactionId); + } catch (PaytrailClientException | PaytrailCommunicationException e) { + return new GetPaymentResponse(e.getErrorCode(), e.getMessage(), null); } } - private GetPaymentResponse getPayment(String transactionId) { + private ValidationResult validateGetPaymentRequest(String transactionId) { + if (transactionId == null || transactionId.trim().isEmpty()) { + Map error = new HashMap<>(); + error.put("error", ResponseMessage.BAD_REQUEST.getDescription()); + return new ValidationResult(false, error); + } + return new ValidationResult(true, Collections.emptyMap()); + } + private GetPaymentResponse executeGetPayment(String transactionId) throws PaytrailClientException { + ObjectMapper mapper = new ObjectMapper(); GetPaymentResponse res = new GetPaymentResponse(); - try { String targetURL = Constants.API_ENDPOINT + "/payments/" + transactionId; - DataResponse data = this.handleRequest(GET_METHOD, targetURL, null, transactionId, null); - + DataResponse data = this.handleRequest(Constants.GET_METHOD, targetURL, null, transactionId, null); if (data.getStatusCode() != ResponseMessage.OK.getCode()) { res.setReturnCode(data.getStatusCode()); res.setReturnMessage(data.getData()); } else { - ObjectMapper mapper = new ObjectMapper(); GetPaymentData dataMapper = mapper.readValue(data.getData(), GetPaymentData.class); - res.setReturnCode(data.getStatusCode()); res.setReturnMessage(ResponseMessage.OK.getDescription()); res.setData(dataMapper); } - return res; + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } - } catch (Exception e) { - throw new AppException(ResponseMessage.RESPONSE_ERROR.getCode(), e.toString()); + @Override + public CreateRefundResponse createRefundRequest(CreateRefundRequest req, String transactionId) { + try { + ValidationResult validationResult = validateCreateRefundRequest(req, transactionId); + if (!validationResult.isValid()) { + CreateRefundResponse response = new CreateRefundResponse(); + response.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + response.setReturnMessage(validationResult.getMessagesAsJson()); + return response; + } + return executeCreateRefund(req, transactionId); + } catch (PaytrailClientException | PaytrailCommunicationException e) { + return new CreateRefundResponse(e.getErrorCode(), e.getMessage(), null); } } - private CreateRefundResponse createRefundRequest(String transactionId, String body) { - CreateRefundResponse res = new CreateRefundResponse(); + private ValidationResult validateCreateRefundRequest(CreateRefundRequest req, String transactionId) { + if (req == null || transactionId == null || transactionId.isEmpty()) { + Map error = new HashMap<>(); + error.put("error", ResponseMessage.BAD_REQUEST.getDescription()); + return new ValidationResult(false, error); + } + return req.validate(); + } + private CreateRefundResponse executeCreateRefund(CreateRefundRequest req, String transactionId) throws PaytrailClientException, PaytrailCommunicationException { + CreateRefundResponse res = new CreateRefundResponse(); + ObjectMapper mapper = new ObjectMapper(); try { + String jsonRequest = mapper.writeValueAsString(req); String targetURL = Constants.API_ENDPOINT + "/payments/" + transactionId + "/refund"; - DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, body, transactionId, null); + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, transactionId, null); if (data.getStatusCode() != ResponseMessage.CREATED.getCode()) { res.setReturnCode(data.getStatusCode()); res.setReturnMessage(data.getData()); } else { - ObjectMapper mapper = new ObjectMapper(); CreateRefundData dataMapper = mapper.readValue(data.getData(), CreateRefundData.class); - res.setReturnCode(data.getStatusCode()); res.setReturnMessage(ResponseMessage.OK.getDescription()); res.setData(dataMapper); } - return res; - - } catch (Exception e) { - throw new AppException(ResponseMessage.RESPONSE_ERROR.getCode(), e.toString()); - } - } - - private boolean validateCreatePaymentRequest(CreatePaymentRequest req, CreatePaymentResponse res) { - if (req == null) { - res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); - res.setReturnMessage(ResponseMessage.BAD_REQUEST.getDescription()); - return false; - } - - ValidationResult validationResult = req.validate(); - - if (!validationResult.isValid()) { - res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); - res.setReturnMessage(validationResult.getMessage().toString()); - return false; - } - - return true; - } - - private boolean validateGetPaymentRequest(String transactionId, GetPaymentResponse res) { - if (transactionId == null || transactionId.isEmpty()) { - res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); - res.setReturnMessage(ResponseMessage.BAD_REQUEST.getDescription()); - return false; + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); } - - return true; } - private boolean validateCreateRefundRequest(CreateRefundRequest req, CreateRefundResponse res, String transactionId) { - if (req == null || transactionId == null || transactionId.isEmpty()) { - res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); - res.setReturnMessage(ResponseMessage.BAD_REQUEST.getDescription()); - return false; - } - - ValidationResult validationResult = req.validate(); - if (!validationResult.isValid()) { - res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); - res.setReturnMessage(validationResult.getMessage().toString()); - return false; - } - - return true; - } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreatePaymentRequest.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreatePaymentRequest.java index 84d32cf..417b0b1 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreatePaymentRequest.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreatePaymentRequest.java @@ -7,6 +7,7 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; + import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; @@ -17,7 +18,6 @@ @NoArgsConstructor @AllArgsConstructor @JsonInclude(JsonInclude.Include.NON_DEFAULT) - public class CreatePaymentRequest extends Request { /** * Merchant unique identifier for the order. Maximum of 200 characters. @@ -30,19 +30,19 @@ public class CreatePaymentRequest extends Request { private String reference; /** - * Total amount of the payment in currency's minor units, e.g. for Euros use cents. + * Total amount of the payment in paytrailCurrency's minor units, e.g. for Euros use cents. */ private int amount; /** - * Currency, only EUR supported at the moment. + * PaytrailCurrency, only EUR supported at the moment. */ - private Currency currency; + private PaytrailCurrency currency; /** - * Payment's language, currently supported are FI, SV, and EN. + * Payment's paytrailLanguage, currently supported are FI, SV, and EN. */ - private Language language; + private PaytrailLanguage language; /** * Order ID. Used for e.g. Walley/Collector payments order ID. @@ -102,22 +102,19 @@ public class CreatePaymentRequest extends Request { private boolean usePricesWithoutVat; @Override() - protected ValidationResult specificValidate() { + protected void specificValidate() { StringBuilder message = new StringBuilder(); boolean isValid = true; if (amount <= 0) { - isValid = false; - message.append("Amount must be more than zero. "); + addValidationError("amount", "Amount must be more than zero."); } else if (amount > 99999999) { - isValid = false; - message.append("Amount can't be more than 99999999. "); + addValidationError("amount", "Amount must be less than 99999999."); } if (orderId == null || orderId.isEmpty()) { if (reference == null || reference.isEmpty()) { - isValid = false; - message.append("OrderId is not provided, then reference must be provided. "); + addValidationError("orderId", "OrderId is not provided, then reference must be provided. "); } } @@ -125,107 +122,96 @@ protected ValidationResult specificValidate() { for (Item item : items) { ValidationResult itemValidationResult = item.validate(); if (!itemValidationResult.isValid()) { - isValid = false; - message.append(itemValidationResult.getMessage()); + addValidationError("item", itemValidationResult.getMessagesAsJson()); + // Assuming we stop checking further items after the first invalid one break; } } - // Calculate total amount from items. + // Calculate total amount from items int itemsTotal = items.stream() .mapToInt(item -> item.getUnitPrice() * item.getUnits()) .sum(); - if (amount != itemsTotal) { - message.append("Amount doesn't match ItemsTotal. "); + addValidationError("amount", "Amount doesn't match total of items."); } + } else { + addValidationError("items", "Items list cannot be null."); } + if (stamp == null || stamp.isEmpty()) { - isValid = false; - message.append("Stamp can't be null or empty. "); + addValidationError("stamp", "Stamp can't be null or empty."); } else if (stamp.length() > 200) { - isValid = false; - message.append("Stamp is more than 200 characters. "); + addValidationError("stamp", "Stamp is more than 200 characters."); } if (reference == null || reference.isEmpty()) { - isValid = false; - message.append("Reference can't be null. "); + addValidationError("reference", "Reference can't be null or empty."); } else if (reference.length() > 200) { - isValid = false; - message.append("Reference is more than 200 characters. "); + addValidationError("reference", "Reference is more than 200 characters."); } if (currency == null) { - isValid = false; - message.append("Currency can't be null. "); + addValidationError("currency", "Currency can't be null."); } if (language == null) { - isValid = false; - message.append("Currency can't be null. "); + addValidationError("language", "Language can't be null."); } if (customer == null) { - isValid = false; - message.append("Customer can't be null. "); + addValidationError("customer", "Customer can't be null."); } else { ValidationResult customerValidationResult = customer.validate(); if (!customerValidationResult.isValid()) { - isValid = false; - message.append(customerValidationResult.getMessage()); + // Prefix is assumed to be part of ValidationResult's message itself for clarity + addValidationError("customer", customerValidationResult.getMessagesAsJson()); } } + // Validation for redirectUrls if (redirectUrls == null) { - isValid = false; - message.append("Object redirectUrls can't be null. "); + addValidationError("redirectUrls", "Object redirectUrls can't be null."); } else { ValidationResult redirectUrlsValidationResult = redirectUrls.validate(); if (!redirectUrlsValidationResult.isValid()) { - isValid = false; - message.append(redirectUrlsValidationResult.getMessage()); + addValidationError("redirectUrls", redirectUrlsValidationResult.getMessagesAsJson()); } } if (callbackUrls != null) { ValidationResult callbackUrlsValidationResult = callbackUrls.validate(); if (!callbackUrlsValidationResult.isValid()) { - isValid = false; - message.append(callbackUrlsValidationResult.getMessage()); + addValidationError("callbackUrls", callbackUrlsValidationResult.getMessagesAsJson()); } } if (deliveryAddress != null) { ValidationResult deliveryAddressValidationResult = deliveryAddress.validate(); if (!deliveryAddressValidationResult.isValid()) { - isValid = false; - message.append(deliveryAddressValidationResult.getMessage()); + addValidationError("deliveryAddress", deliveryAddressValidationResult.getMessagesAsJson()); } } if (invoicingAddress != null) { ValidationResult invoicingAddressValidationResult = invoicingAddress.validate(); if (!invoicingAddressValidationResult.isValid()) { - isValid = false; - message.append(invoicingAddressValidationResult.getMessage()); + addValidationError("invoicingAddress", invoicingAddressValidationResult.getMessagesAsJson()); } } +// Checking if provided payment method groups are valid if (groups != null) { - Set allowedGroups = EnumSet.allOf(PaymentMethodGroup.class).stream() + Set allowedGroups = EnumSet.allOf(PaytrailPaymentMethodGroup.class).stream() .map(Enum::toString) .collect(Collectors.toSet()); - for (String group : groups) { if (!allowedGroups.contains(group)) { - isValid = false; - message.append(" value ").append(group).append(" is not in the list of payment methods"); + addValidationError("groups", "Value '" + group + "' is not in the list of allowed payment methods."); } } } - return new ValidationResult(isValid, message); } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreateRefundRequest.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreateRefundRequest.java index 6cd6025..dfe1df8 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreateRefundRequest.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreateRefundRequest.java @@ -49,40 +49,36 @@ public class CreateRefundRequest extends Request { private CallbackUrl callbackUrls; @Override() - protected ValidationResult specificValidate() { - StringBuilder message = new StringBuilder(); - boolean isValid = true; - - Pattern emailPattern = Pattern.compile(Constants.EMAIL_REGEX); - Matcher emailMatcher = emailPattern.matcher(email); - - if (items != null) { + protected void specificValidate() { + if (items != null && !items.isEmpty()) { for (RefundItem item : items) { ValidationResult itemValidationResult = item.validate(); if (!itemValidationResult.isValid()) { - isValid = false; - message.append(itemValidationResult.getMessage()); + addValidationError("items", itemValidationResult.getMessagesAsJson()); break; } } } - if (email != null && !emailMatcher.matches()) { - isValid = false; - message.append("Email is not a valid email address. "); + // Validate email using Regex + if (email != null && !email.isEmpty()) { + Pattern emailPattern = Pattern.compile(Constants.EMAIL_REGEX); + Matcher emailMatcher = emailPattern.matcher(email); + if (!emailMatcher.matches()) { + addValidationError("email", "Email is not a valid email address."); + } + } else { + addValidationError("email", "Email cannot be null or empty."); } + // Validate callbackUrls if (callbackUrls == null) { - isValid = false; - message.append("Object callbackUrls can't be null. "); + addValidationError("callbackUrls", "Callback Urls can't be null."); } else { ValidationResult callbackUrlsValidationResult = callbackUrls.validate(); if (!callbackUrlsValidationResult.isValid()) { - isValid = false; - message.append(callbackUrlsValidationResult.getMessage()); + addValidationError("callbackUrls", callbackUrlsValidationResult.getMessagesAsJson()); } } - - return new ValidationResult(isValid, message); } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/Request.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/Request.java index 928487c..4ca8dfd 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/Request.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/Request.java @@ -1,11 +1,21 @@ package io.paytrailpayment.dto.request; +import java.util.HashMap; +import java.util.Map; + public abstract class Request { - protected abstract ValidationResult specificValidate(); + private final Map validationErrors = new HashMap<>(); + protected abstract void specificValidate(); public ValidationResult validate() { - ValidationResult specificResult = specificValidate(); - // Add common validation logic if needed - return specificResult; + specificValidate(); + if (validationErrors.isEmpty()) { + return new ValidationResult(true, null); // Assuming success + } else { + return new ValidationResult(false, validationErrors); + } + } + protected void addValidationError(String field, String message) { + validationErrors.put(field, message); } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/ValidationResult.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/ValidationResult.java index 0dc6c9b..4758888 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/ValidationResult.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/ValidationResult.java @@ -1,26 +1,27 @@ package io.paytrailpayment.dto.request; +import com.google.gson.Gson; import lombok.Getter; import lombok.Setter; +import java.util.Map; + @Getter @Setter public class ValidationResult { private final boolean isValid; - private final StringBuilder message; + private Map messages; + private static final Gson gson = new Gson(); - public ValidationResult(boolean isValid, StringBuilder message) { + public ValidationResult(boolean isValid, Map messages) { this.isValid = isValid; - this.message = message; - } - - public void addMessage(String msg) { - if (message.length() > 0) { - message.append(" "); - } - message.append(msg); + this.messages = messages; } public boolean isValid() { return isValid; } + + public String getMessagesAsJson() { + return gson.toJson(this.messages); + } } \ No newline at end of file diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Address.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Address.java index 6d84b67..6109883 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Address.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Address.java @@ -6,6 +6,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; @Data @NoArgsConstructor @@ -38,44 +39,31 @@ public class Address extends Request { private String country; @Override - protected ValidationResult specificValidate() { - boolean isValid = true; - StringBuilder message = new StringBuilder(); - - if (streetAddress == null || streetAddress.isEmpty()) { - message.append("Address's streetAddress can't be null. "); - isValid = false; + protected void specificValidate() { + if (StringUtils.isBlank(streetAddress)) { + addValidationError("streetAddress", "Address's streetAddress can't be null or empty."); } else if (streetAddress.length() > 50) { - message.append("Address's streetAddress is more than 50 characters. "); - isValid = false; + addValidationError("streetAddress", "Address's streetAddress is more than 50 characters."); } - if (postalCode == null || postalCode.isEmpty()) { - message.append("Address's postalCode can't be null. "); - isValid = false; + if (StringUtils.isBlank(postalCode)) { + addValidationError("postalCode", "Address's postalCode can't be null or empty."); } else if (postalCode.length() > 15) { - message.append("Address's postalCode is more than 15 characters. "); - isValid = false; + addValidationError("postalCode", "Address's postalCode is more than 15 characters."); } - if (city == null || city.isEmpty()) { - message.append("Address's city can't be null. "); - isValid = false; + if (StringUtils.isBlank(city)) { + addValidationError("city", "Address's city can't be null or empty."); } else if (city.length() > 30) { - message.append("Address's city is more than 30 characters. "); - isValid = false; + addValidationError("city", "Address's city is more than 30 characters."); } - if (country == null || country.isEmpty()) { - message.append("Address's country can't be null. "); - isValid = false; + if (StringUtils.isBlank(country)) { + addValidationError("country", "Address's country can't be null or empty."); } - if (county != null && county.length() > 200) { - message.append("Address's county is more than 200 characters. "); - isValid = false; + if (StringUtils.isNotBlank(county) && county.length() > 200) { + addValidationError("county", "Address's county is more than 200 characters."); } - - return new ValidationResult(isValid, message); } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/CallbackUrl.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/CallbackUrl.java index 27ed8e0..aead5e8 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/CallbackUrl.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/CallbackUrl.java @@ -6,6 +6,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; @Data @NoArgsConstructor @@ -23,19 +24,13 @@ public class CallbackUrl extends Request { private String cancel; @Override() - protected ValidationResult specificValidate() { - boolean isValid = true; - StringBuilder message = new StringBuilder(); - - if (success == null || success.isEmpty()) { - isValid = false; - message.append("Url success can't be null. "); + protected void specificValidate() { + if (StringUtils.isBlank(success)) { + addValidationError("success", "Url success can't be null or empty."); } - if (cancel == null || cancel.isEmpty()) { - isValid = false; - message.append("Url cancel can't be null. "); + if (StringUtils.isBlank(cancel)) { + addValidationError("cancel", "Url cancel can't be null or empty."); } - return new ValidationResult(isValid, message); } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Commission.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Commission.java index ea9e604..6ccf464 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Commission.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Commission.java @@ -6,6 +6,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; @Data @NoArgsConstructor @@ -23,22 +24,16 @@ public class Commission extends Request { private int amount; @Override() - protected ValidationResult specificValidate() { - boolean isValid = true; - StringBuilder message = new StringBuilder(); - - if (merchant == null || merchant.isEmpty()) + protected void specificValidate() { + if (StringUtils.isBlank(merchant)) { - message.append("Commission's merchant is null or empty. "); - isValid = false; + addValidationError("merchant", "Commission's merchant is null or empty. "); } if (amount < 0) { - message.append("Commission's amount can't be a negative number. "); - isValid = false; + addValidationError("amount", "Commission's amount can't be a negative number. "); } - return new ValidationResult(isValid, message); } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Customer.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Customer.java index b6ac147..2650ccd 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Customer.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Customer.java @@ -7,7 +7,9 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -47,40 +49,26 @@ public class Customer extends Request { private String companyName; @Override() - protected ValidationResult specificValidate() { - boolean isValid = true; - StringBuilder message = new StringBuilder(); - - Pattern emailPattern = Pattern.compile(Constants.EMAIL_REGEX); - Matcher emailMatcher = emailPattern.matcher(email); - - if (email == null) { - isValid = false; - message.append("Customer's email can't be null. "); - } else if (!emailMatcher.matches()) { - isValid = false; - message.append("Customer's email is not a valid email address. "); + protected void specificValidate() { + if (Objects.isNull(email)) { + addValidationError("email", "Customer's email can't be null."); + } else if (!Pattern.compile(Constants.EMAIL_REGEX).matcher(email).matches()) { + addValidationError("email", "Customer's email is not a valid email address."); } else if (email.length() > 200) { - isValid = false; - message.append("Customer's email is more than 200 characters. "); + addValidationError("email", "Customer's email is more than 200 characters."); } - if (firstName != null && firstName.length() > 50) { - isValid = false; - message.append("Customer's firstName is more than 50 characters. "); + if (Objects.nonNull(firstName) && firstName.length() > 50) { + addValidationError("firstName", "Customer's firstName is more than 50 characters."); } - if (lastName != null && lastName.length() > 50) { - isValid = false; - message.append("Customer's lastName is more than 50 characters. "); + if (Objects.nonNull(lastName) && lastName.length() > 50) { + addValidationError("lastName", "Customer's lastName is more than 50 characters."); } - if (companyName != null && companyName.length() > 100) { - isValid = false; - message.append("Customer's companyName is more than 100 characters. "); + if (Objects.nonNull(companyName) && companyName.length() > 100) { + addValidationError("companyName", "Customer's companyName is more than 100 characters."); } - - return new ValidationResult(isValid, message); } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Item.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Item.java index 0f4a057..2f4239f 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Item.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Item.java @@ -68,44 +68,33 @@ public class Item extends Request { private Commission commission; @Override() - protected ValidationResult specificValidate() { - boolean isValid = true; - StringBuilder message = new StringBuilder(); - + protected void specificValidate() { if (unitPrice < 0) { - isValid = false; - message.append("Item's unitPrice can't be a negative number. "); + addValidationError("unitPrice", "Item's unit Price can't be a negative number."); } if (units < 0 || units > 99999998) { - isValid = false; - message.append("Item's units are invalid. "); + addValidationError("units", "Item's units are invalid. "); } if (vatPercentage < 0) { - isValid = false; - message.append("Item's vatPercentage can't be a negative number. "); + addValidationError("vatPercentage", "Item's vat Percentage can't be a negative number."); } if (productCode == null) { - isValid = false; - message.append("Item's productCode can't be null. "); + addValidationError("productCode", "Item's product Code can't be null or empty."); } else if (productCode.length() > 100) { - isValid = false; - message.append("Item's productCode is more than 100 characters. "); + addValidationError("productCode", "Item's product Code is more than 100 characters."); } if (category != null && category.length() > 100) { - isValid = false; - message.append("Item's category is more than 100 characters. "); + addValidationError("category", "Item's category is more than 100 characters."); } if (description != null && description.length() > 1000) { - isValid = false; - message.append("Item's description is more than 1000 characters. "); + addValidationError("description", "Item's description is more than 1000 characters."); } - return new ValidationResult(isValid, message); } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Currency.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailCurrency.java similarity index 70% rename from paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Currency.java rename to paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailCurrency.java index 7bd2b55..f225630 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Currency.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailCurrency.java @@ -3,11 +3,11 @@ import lombok.Getter; @Getter -public enum Currency { +public enum PaytrailCurrency { EUR("EUR"); private final String currency; - Currency(String currency) { + PaytrailCurrency(String currency) { this.currency = currency; } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Language.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailLanguage.java similarity index 73% rename from paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Language.java rename to paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailLanguage.java index 60de9ca..57493d7 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Language.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailLanguage.java @@ -3,13 +3,13 @@ import lombok.Getter; @Getter -public enum Language { +public enum PaytrailLanguage { FI("FI"), SV("SV"), EN("EN"); private final String language; - Language(String language) { + PaytrailLanguage(String language) { this.language = language; } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaymentMethodGroup.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailPaymentMethodGroup.java similarity index 70% rename from paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaymentMethodGroup.java rename to paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailPaymentMethodGroup.java index 5500701..b707f00 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaymentMethodGroup.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailPaymentMethodGroup.java @@ -1,6 +1,6 @@ package io.paytrailpayment.dto.request.model; -public enum PaymentMethodGroup { +public enum PaytrailPaymentMethodGroup { mobile, bank, creditcard, diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/RefundItem.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/RefundItem.java index c5d8b3f..cbfd883 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/RefundItem.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/RefundItem.java @@ -7,6 +7,9 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; + +import java.util.Objects; @EqualsAndHashCode(callSuper = true) @Data @@ -40,42 +43,29 @@ public class RefundItem extends Request { private Commission commission; @Override() - protected ValidationResult specificValidate() { - boolean isValid = true; - StringBuilder message = new StringBuilder(); - + protected void specificValidate() { if (amount < 0 || amount > 99999998) { - isValid = false; - message.append("Item's amount are invalid. "); + addValidationError("amount", "Item's amount is invalid. "); } - if (stamp == null || stamp.isEmpty()) + if (StringUtils.isBlank(stamp)) { - isValid = false; - message.append("Item's stamp can't be null. "); - } - - if (stamp != null && stamp.length() > 200) { - isValid = false; - message.append("Item's stamp is more than 200 characters. "); + addValidationError("stamp", "Item's stamp can't be null or empty."); + } else if (stamp.length() > 200) { + addValidationError("stamp","Item's stamp is more than 200 characters. "); } - if (refundStamp != null && refundStamp.length() > 200) { - isValid = false; - message.append("Item's refundStamp is more than 200 characters. "); + if (Objects.nonNull(refundStamp) && refundStamp.length() > 200) { + addValidationError("refundStamp", "Item's refund stamp is more than 200 characters. "); } if (commission != null) { ValidationResult itemValidationResult = commission.validate(); - if (!itemValidationResult.isValid()) { - isValid = false; - message.append(itemValidationResult.getMessage()); + addValidationError("commission", itemValidationResult.getMessagesAsJson()); } } - - return new ValidationResult(isValid, message); } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/CreatePaymentResponse.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/CreatePaymentResponse.java index 8316bac..ee92847 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/CreatePaymentResponse.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/CreatePaymentResponse.java @@ -10,6 +10,11 @@ @AllArgsConstructor public class CreatePaymentResponse extends Response { private CreatePaymentData data; + + public CreatePaymentResponse(int statusCode, String description, CreatePaymentData dataMapper) { + super(statusCode, description); + this.data = dataMapper; + } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/CreateRefundResponse.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/CreateRefundResponse.java index 5799bda..f934a5b 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/CreateRefundResponse.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/CreateRefundResponse.java @@ -1,5 +1,6 @@ package io.paytrailpayment.dto.response; +import io.paytrailpayment.dto.response.data.CreatePaymentData; import io.paytrailpayment.dto.response.data.CreateRefundData; import lombok.AllArgsConstructor; import lombok.Data; @@ -10,4 +11,9 @@ @AllArgsConstructor public class CreateRefundResponse extends Response { private CreateRefundData data; + + public CreateRefundResponse(int statusCode, String description, CreateRefundData dataMapper) { + super(statusCode, description); + this.data = dataMapper; + } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/GetPaymentResponse.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/GetPaymentResponse.java index c883073..4bba357 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/GetPaymentResponse.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/GetPaymentResponse.java @@ -1,5 +1,6 @@ package io.paytrailpayment.dto.response; +import io.paytrailpayment.dto.response.data.CreateRefundData; import io.paytrailpayment.dto.response.data.GetPaymentData; import lombok.AllArgsConstructor; import lombok.Data; @@ -10,4 +11,8 @@ @AllArgsConstructor public class GetPaymentResponse extends Response { private GetPaymentData data; + public GetPaymentResponse(int statusCode, String description, GetPaymentData dataMapper) { + super(statusCode, description); + this.data = dataMapper; + } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/GetPaymentData.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/GetPaymentData.java index 8a4b73c..42b07ed 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/GetPaymentData.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/GetPaymentData.java @@ -24,7 +24,7 @@ public class GetPaymentData { private int amount; /** - * Currency + * PaytrailCurrency */ private String currency; diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/model/ApplePay.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/model/ApplePay.java index 71120f3..394519b 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/model/ApplePay.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/model/ApplePay.java @@ -1,6 +1,6 @@ package io.paytrailpayment.dto.response.model; -import io.paytrailpayment.dto.request.model.PaymentMethodGroup; +import io.paytrailpayment.dto.request.model.PaytrailPaymentMethodGroup; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -23,7 +23,7 @@ public class ApplePay { /** * Group. */ - private PaymentMethodGroup group; + private PaytrailPaymentMethodGroup group; /** * Parameters. diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/model/Provider.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/model/Provider.java index 593a068..0a2f4c4 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/model/Provider.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/model/Provider.java @@ -1,6 +1,6 @@ package io.paytrailpayment.dto.response.model; -import io.paytrailpayment.dto.request.model.PaymentMethodGroup; +import io.paytrailpayment.dto.request.model.PaytrailPaymentMethodGroup; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -33,7 +33,7 @@ public class Provider { * Provider group. Provider groups allow presenting same type of providers in separate * groups which usually makes it easier for the customer to select a payment method. */ - private PaymentMethodGroup group; + private PaytrailPaymentMethodGroup group; /** * ID of the provider. diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/exception/AppException.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/exception/AppException.java deleted file mode 100644 index ea93b41..0000000 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/exception/AppException.java +++ /dev/null @@ -1,13 +0,0 @@ -package io.paytrailpayment.exception; - -import lombok.Getter; - -@Getter -public class AppException extends RuntimeException { - private final int status; - - public AppException(int status, String message) { - super(message); - this.status = status; - } -} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/exception/PaytrailBaseException.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/exception/PaytrailBaseException.java new file mode 100644 index 0000000..8562a39 --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/exception/PaytrailBaseException.java @@ -0,0 +1,19 @@ +package io.paytrailpayment.exception; + +import lombok.Getter; + +public class PaytrailBaseException extends RuntimeException { + private final int errorCode; + + public PaytrailBaseException(int errorCode, String message) { + super(message); + this.errorCode = errorCode; + } + public PaytrailBaseException(int errorCode, String message, Throwable cause) { + super(message, cause); + this.errorCode = errorCode; + } + public int getErrorCode() { + return errorCode; + } +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/exception/PaytrailClientException.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/exception/PaytrailClientException.java new file mode 100644 index 0000000..ece15e8 --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/exception/PaytrailClientException.java @@ -0,0 +1,14 @@ +package io.paytrailpayment.exception; + +import lombok.Getter; + +@Getter +public class PaytrailClientException extends PaytrailBaseException { + + public PaytrailClientException(int errorCode, String message) { + super(errorCode, message); + } + public PaytrailClientException(int errorCode, String message, Throwable cause) { + super(errorCode, message, cause); + } +} \ No newline at end of file diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/exception/PaytrailCommunicationException.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/exception/PaytrailCommunicationException.java new file mode 100644 index 0000000..82834a3 --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/exception/PaytrailCommunicationException.java @@ -0,0 +1,12 @@ +package io.paytrailpayment.exception; + +public class PaytrailCommunicationException extends PaytrailBaseException { + + public PaytrailCommunicationException(int errorCode, String message) { + super(errorCode, message); + } + + public PaytrailCommunicationException(int errorCode, String message, Throwable cause) { + super(errorCode, message, cause); + } +} \ No newline at end of file diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/utilites/ResponseMessage.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/utilites/ResponseMessage.java index 8dc9010..cfd201e 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/utilites/ResponseMessage.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/utilites/ResponseMessage.java @@ -10,7 +10,7 @@ public enum ResponseMessage { RESPONSE_NULL(404, "Paytrail Server Return Null"), RESPONSE_ERROR(500, "Paytrail Server Error"), BAD_REQUEST(400, "Bad Request"), - VALIDATE_FAIL(403, "Validation Failed"), + VALIDATION_FAILED(403, "Validation Failed"), UNAUTHORIZED(401, "Unauthorized"); private final int code; private final String description; diff --git a/paytrailpayment-sdk/src/test/java/CreatePaymentUnitTest.java b/paytrailpayment-sdk/src/test/java/CreatePaymentUnitTest.java index 06aa2f5..de8359e 100644 --- a/paytrailpayment-sdk/src/test/java/CreatePaymentUnitTest.java +++ b/paytrailpayment-sdk/src/test/java/CreatePaymentUnitTest.java @@ -1,7 +1,7 @@ import io.paytrailpayment.PaytrailClient; import io.paytrailpayment.dto.request.CreatePaymentRequest; import io.paytrailpayment.dto.request.model.*; -import io.paytrailpayment.dto.request.model.Currency; +import io.paytrailpayment.dto.request.model.PaytrailCurrency; import io.paytrailpayment.dto.response.CreatePaymentResponse; import io.paytrailpayment.utilites.ResponseMessage; @@ -32,7 +32,7 @@ public void createPaymentReturnStatusCode400WithPayloadNull() { @Test() public void createPaymentReturnStatusCode400WithFieldRequiredNotFilled() { - String messageExpect = "Amount must be more than zero. Amount doesn't match ItemsTotal. Stamp can't be null or empty. Reference can't be null. Currency can't be null. Currency can't be null. "; + String messageExpect = "{\"reference\":\"Reference can't be null or empty.\",\"amount\":\"Amount doesn't match total of items.\",\"stamp\":\"Stamp can't be null or empty.\",\"currency\":\"Currency can't be null.\",\"language\":\"Language can't be null.\"}"; CreatePaymentRequest req = new CreatePaymentRequest(); req.setOrderId("12335"); @@ -80,8 +80,8 @@ public void createPaymentReturnStatusCode400WithPayloadValidateFail() { req.setStamp(UUID.randomUUID().toString()); req.setReference("9187445"); - req.setCurrency(Currency.EUR); - req.setLanguage(Language.EN); + req.setCurrency(PaytrailCurrency.EUR); + req.setLanguage(PaytrailLanguage.EN); req.setAmount(-1590); CreatePaymentResponse res = client.createPayment(req); @@ -97,8 +97,8 @@ public void createPaymentReturnStatusCode201() { req.setStamp(UUID.randomUUID().toString()); req.setReference("9187445"); - req.setCurrency(Currency.EUR); - req.setLanguage(Language.EN); + req.setCurrency(PaytrailCurrency.EUR); + req.setLanguage(PaytrailLanguage.EN); req.setOrderId("12335"); req.setAmount(1590); @@ -147,8 +147,8 @@ public void createPaymentReturnStatusCode401WithFalseAuthenticationInformation() req.setStamp(UUID.randomUUID().toString()); req.setReference("9187445"); - req.setCurrency(Currency.EUR); - req.setLanguage(Language.EN); + req.setCurrency(PaytrailCurrency.EUR); + req.setLanguage(PaytrailLanguage.EN); req.setOrderId("12335"); req.setAmount(1590); diff --git a/paytrailpayment-sdk/src/test/java/CreateRefundRequestUnitTest.java b/paytrailpayment-sdk/src/test/java/CreateRefundRequestUnitTest.java index 2fee1d7..4bc0cd6 100644 --- a/paytrailpayment-sdk/src/test/java/CreateRefundRequestUnitTest.java +++ b/paytrailpayment-sdk/src/test/java/CreateRefundRequestUnitTest.java @@ -26,8 +26,8 @@ public void setUp() { req.setStamp(UUID.randomUUID().toString()); req.setReference("9187445"); - req.setCurrency(Currency.EUR); - req.setLanguage(Language.FI); + req.setCurrency(PaytrailCurrency.EUR); + req.setLanguage(PaytrailLanguage.FI); req.setOrderId("12335"); req.setAmount(1590); @@ -76,7 +76,7 @@ public void createRefundRequestReturnStatusCode400WithPayloadNull() { @Test() public void createRefundRequestReturnStatusCode400WithFieldRequiredNotFilled() { - String messageExpect = "Item's amount are invalid. Object callbackUrls can't be null. "; + String messageExpect = "{\"callbackUrls\":\"Callback Urls can't be null.\",\"items\":\"{\\\"amount\\\":\\\"Item's amount is invalid.\\\"}\"}\n"; CreateRefundRequest req = new CreateRefundRequest(); req.setEmail("test@gmail.com"); @@ -101,7 +101,7 @@ public void createRefundRequestReturnStatusCode400WithFieldRequiredNotFilled() { } @Test() - public void createRefundRequestReturnStatusCode400WithPayloadValidateFail() { + public void createRefundRequestReturnStatusCode403WithPayloadValidateFail() { CreateRefundRequest req = new CreateRefundRequest(); req.setAmount(1590); diff --git a/paytrailpayment-sdk/src/test/java/GetPaymentUnitTest.java b/paytrailpayment-sdk/src/test/java/GetPaymentUnitTest.java index 7ca50ce..d20b6af 100644 --- a/paytrailpayment-sdk/src/test/java/GetPaymentUnitTest.java +++ b/paytrailpayment-sdk/src/test/java/GetPaymentUnitTest.java @@ -25,8 +25,8 @@ public void setUp() { req.setStamp(UUID.randomUUID().toString()); req.setReference("9187445"); - req.setCurrency(Currency.EUR); - req.setLanguage(Language.SV); + req.setCurrency(PaytrailCurrency.EUR); + req.setLanguage(PaytrailLanguage.SV); req.setOrderId("12335"); req.setAmount(1590); From c9c8307d8cfa99638c445586198cd4ab58238432 Mon Sep 17 00:00:00 2001 From: NerdCloud Date: Fri, 18 Oct 2024 16:36:30 +0000 Subject: [PATCH 03/28] CreateMitPaymentAuthorizationHold CreateMitPaymentCommit CreateCitPaymentCharge CreateCitPaymentAuthorizationHold CreateCitPaymentCommit PayAndAddCard createAddCardFormRequest createMitPaymentCharge --- .../java/io/paytrailpayment/IPaytrail.java | 75 +++- .../io/paytrailpayment/PaytrailClient.java | 328 +++++++++++++++++- .../dto/request/AddCardFormRequest.java | 84 +++++ .../request/CreateMitOrCitPaymentRequest.java | 23 ++ .../dto/request/PayAddCardRequest.java | 122 +++++++ .../dto/request/model/Item.java | 34 +- .../model/PaytrailPaymentMethodGroup.java | 8 +- .../dto/request/model/ShopInShopItem.java | 69 ++++ .../dto/response/AddCardFormResponse.java | 18 + .../CreateMitOrCitPaymentResponse.java | 20 ++ .../dto/response/PayAddCardResponse.java | 20 ++ .../dto/response/data/AddCardFormData.java | 12 + .../data/CreateMitPaymentChargeData.java | 13 + .../dto/response/data/PayAddCardData.java | 13 + .../CreateAddCardFormRequestTests.java | 72 ++++ ...reateCitPaymentAuthorizationHoldTests.java | 139 ++++++++ .../CreateCitPaymentChargeTests.java | 139 ++++++++ .../CreateCitPaymentCommitTests.java | 115 ++++++ ...reateMitPaymentAuthorizationHoldTests.java | 139 ++++++++ .../CreateMitPaymentChargeTests.java | 139 ++++++++ .../CreateMitPaymentCommitTests.java | 139 ++++++++ .../CreatePaymentUnitTest.java | 3 +- .../CreateRefundRequestUnitTest.java | 3 +- .../paytrailpayment}/GetPaymentUnitTest.java | 3 +- .../paytrailpayment/PayAndAddCardTests.java | 176 ++++++++++ .../{ => io/paytrailpayment}/TestCase.java | 2 + 26 files changed, 1871 insertions(+), 37 deletions(-) create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/AddCardFormRequest.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreateMitOrCitPaymentRequest.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/PayAddCardRequest.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/ShopInShopItem.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/AddCardFormResponse.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/CreateMitOrCitPaymentResponse.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/PayAddCardResponse.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/AddCardFormData.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/CreateMitPaymentChargeData.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/PayAddCardData.java create mode 100644 paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java create mode 100644 paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java create mode 100644 paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java create mode 100644 paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java create mode 100644 paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java create mode 100644 paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java create mode 100644 paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java rename paytrailpayment-sdk/src/test/java/{ => io/paytrailpayment}/CreatePaymentUnitTest.java (99%) rename paytrailpayment-sdk/src/test/java/{ => io/paytrailpayment}/CreateRefundRequestUnitTest.java (99%) rename paytrailpayment-sdk/src/test/java/{ => io/paytrailpayment}/GetPaymentUnitTest.java (98%) create mode 100644 paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java rename paytrailpayment-sdk/src/test/java/{ => io/paytrailpayment}/TestCase.java (88%) diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/IPaytrail.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/IPaytrail.java index 18b6e2f..27a8a26 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/IPaytrail.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/IPaytrail.java @@ -1,10 +1,7 @@ package io.paytrailpayment; -import io.paytrailpayment.dto.request.CreatePaymentRequest; -import io.paytrailpayment.dto.request.CreateRefundRequest; -import io.paytrailpayment.dto.response.CreatePaymentResponse; -import io.paytrailpayment.dto.response.CreateRefundResponse; -import io.paytrailpayment.dto.response.GetPaymentResponse; +import io.paytrailpayment.dto.request.*; +import io.paytrailpayment.dto.response.*; /** * Defines methods for interacting with the Paytrail payment system. @@ -27,6 +24,7 @@ public interface IPaytrail { * Note! The transaction id needs to be sent on checkout-transaction-id header as well. * * @param transactionId The unique identifier for the transaction. + * @return GetPaymentResponse * @see Paytrail Documentation - Get Payment */ GetPaymentResponse getPaymentInfo(String transactionId); @@ -36,7 +34,74 @@ public interface IPaytrail { * * @param refundRequest The request object containing refund details. * @param transactionId The unique identifier for the transaction to refund. + * @return CreateRefundResponse * @see Paytrail Documentation - Create Refund Request */ CreateRefundResponse createRefundRequest(CreateRefundRequest refundRequest, String transactionId); + + /** + * HTTP POST /tokenization/addcard-form add card form. + * + * @param req The request object containing add card request + * @return AddCardFormResponse + * @see Paytrail Documentation - Create Refund Request + */ + AddCardFormResponse createAddCardFormRequest(AddCardFormRequest req); + + /** + * HTTP POST /payments/token/mit/charge creates a new MIT payment charge. + * @param req + * @return CreateMitPaymentChargeResponse + * @see Paytrail Documentation - Create authorization hold or charge + */ + CreateMitOrCitPaymentResponse createMitPaymentCharge(CreateMitOrCitPaymentRequest req); + /** + * HTTP POST /payments/token/mit/authorization-hold creates a new MIT authorization hold. + * @param createMitPaymentAuthorizationHold + * @return CreateMitPaymentChargeResponse + * @see Paytrail Documentation - Create authorization hold or charge + */ + CreateMitOrCitPaymentResponse createMitPaymentAuthorizationHold(CreateMitOrCitPaymentRequest createMitPaymentAuthorizationHold); + + /** + * HTTP POST /payments/{transactionId}/token/commit commits a MIT payment. + * @param req + * @param transactionId + * @return CreateMitOrCitPaymentResponse + * @see Paytrail Documentation - Create MIT payment commit + */ + CreateMitOrCitPaymentResponse createMitPaymentCommit(CreateMitOrCitPaymentRequest req, String transactionId); + + /** + * HTTP POST /payments/token/cit/charge creates a new CIT payment charge. + * @param req + * @return CreateMitOrCitPaymentResponse + * @see Paytrail Documentation - Create authorization hold or charge + */ + CreateMitOrCitPaymentResponse createCitPaymentCharge(CreateMitOrCitPaymentRequest req); + + + /** + * HTTP POST /payments/token/cit/authorization-hold creates a new CIT authorization hold. + * @param req + * @return CreateMitOrCitPaymentResponse + * @see Paytrail Documentation - Create CIT authorization hold + */ + CreateMitOrCitPaymentResponse createCitPaymentAuthorizationHold(CreateMitOrCitPaymentRequest req); + + /** + * HTTP POST /payments/{transactionId}/token/commit commits a CIT payment. + * @param req + * @param transactionId + * @return CreateMitOrCitPaymentResponse + * @see Paytrail Documentation - Create CIT payment commit + */ + CreateMitOrCitPaymentResponse createCitPaymentCommit(CreateMitOrCitPaymentRequest req, String transactionId); + + /** + * HTTP POST /tokenization/pay-and-add-card pay and add card. + * @param req + * @return + */ + PayAddCardResponse payAndAddCard(PayAddCardRequest req); } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java index 46691dd..0127d9a 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java @@ -2,16 +2,9 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import io.paytrailpayment.dto.request.CreatePaymentRequest; -import io.paytrailpayment.dto.request.CreateRefundRequest; -import io.paytrailpayment.dto.request.ValidationResult; -import io.paytrailpayment.dto.response.CreatePaymentResponse; -import io.paytrailpayment.dto.response.CreateRefundResponse; -import io.paytrailpayment.dto.response.GetPaymentResponse; -import io.paytrailpayment.dto.response.data.CreateRefundData; -import io.paytrailpayment.dto.response.data.DataResponse; -import io.paytrailpayment.dto.response.data.CreatePaymentData; -import io.paytrailpayment.dto.response.data.GetPaymentData; +import io.paytrailpayment.dto.request.*; +import io.paytrailpayment.dto.response.*; +import io.paytrailpayment.dto.response.data.*; import io.paytrailpayment.exception.PaytrailClientException; import io.paytrailpayment.exception.PaytrailCommunicationException; import io.paytrailpayment.utilites.Constants; @@ -22,8 +15,6 @@ import java.util.HashMap; import java.util.Map; -import static io.paytrailpayment.utilites.Constants.GET_METHOD; - @NoArgsConstructor @Getter @Setter @@ -171,6 +162,319 @@ private CreateRefundResponse executeCreateRefund(CreateRefundRequest req, String throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); } } + @Override + public AddCardFormResponse createAddCardFormRequest(AddCardFormRequest req) { + try { + ValidationResult validationResult = validateAddCardFormRequest(req); + if (!validationResult.isValid()) { + AddCardFormResponse response = new AddCardFormResponse(); + response.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + response.setReturnMessage(validationResult.getMessagesAsJson()); + return response; + } + return executeCreateAddCardForm(req); + } catch (PaytrailClientException | PaytrailCommunicationException e) { + return new AddCardFormResponse(e.getErrorCode(), e.getMessage(), null); + } + } + + private ValidationResult validateAddCardFormRequest(AddCardFormRequest req) { + if (req == null) { + Map error = new HashMap<>(); + error.put("error", ResponseMessage.BAD_REQUEST.getDescription()); + return new ValidationResult(false, error); + } + return req.validate(); + } + + private AddCardFormResponse executeCreateAddCardForm(AddCardFormRequest req) throws PaytrailCommunicationException, PaytrailClientException { + try { + ObjectMapper mapper = new ObjectMapper(); + String jsonRequest = mapper.writeValueAsString(req); + String targetURL = Constants.API_ENDPOINT + "/tokenization/addcard-form"; + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); + + if (data.getStatusCode() != ResponseMessage.CREATED.getCode()) { + return new AddCardFormResponse(data.getStatusCode(), data.getData(), null); + } else { + // Successfully created the add card form and parse the result + AddCardFormData dataMapper = mapper.readValue(data.getData(), AddCardFormData.class); + return new AddCardFormResponse(data.getStatusCode(), ResponseMessage.OK.getDescription(), dataMapper); + } + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } + + @Override + public CreateMitOrCitPaymentResponse createMitPaymentCharge(CreateMitOrCitPaymentRequest req) { + CreateMitOrCitPaymentResponse res = new CreateMitOrCitPaymentResponse(); + try { + ValidationResult validationResult = validateCreateMitOrCitPaymentRequest(req); + if (!validationResult.isValid()) { + res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + res.setReturnMessage(validationResult.getMessagesAsJson()); + return res; + } + return executeCreateMitPaymentCharge(req); + } catch (PaytrailClientException | PaytrailCommunicationException e) { + res.setReturnCode(ResponseMessage.EXCEPTION.getCode()); + res.setReturnMessage(e.getMessage()); + return res; + } + } + + private ValidationResult validateCreateMitOrCitPaymentRequest(CreateMitOrCitPaymentRequest req) { + if (req == null) { + Map error = new HashMap<>(); + error.put("error", ResponseMessage.BAD_REQUEST.getDescription()); + return new ValidationResult(false, error); + } + return req.validate(); + } + + private CreateMitOrCitPaymentResponse executeCreateMitPaymentCharge(CreateMitOrCitPaymentRequest req) throws PaytrailClientException, PaytrailCommunicationException { + try { + ObjectMapper mapper = new ObjectMapper(); + String jsonRequest = mapper.writeValueAsString(req); + String targetURL = Constants.API_ENDPOINT + "/payments/token/mit/charge"; + + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); + + if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + return new CreateMitOrCitPaymentResponse(data.getStatusCode(), data.getData(), null); + } else { + CreateMitPaymentChargeData dataMapper = mapper.readValue(data.getData(), CreateMitPaymentChargeData.class); + return new CreateMitOrCitPaymentResponse(ResponseMessage.OK.getCode(), ResponseMessage.OK.getDescription(), dataMapper); + } + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } + + public CreateMitOrCitPaymentResponse createMitPaymentAuthorizationHold(CreateMitOrCitPaymentRequest createMitPaymentAuthorizationHold) { + CreateMitOrCitPaymentResponse res = new CreateMitOrCitPaymentResponse(); + try { + // Validate create mit payment authorization hold + ValidationResult validationResult = validateCreateMitOrCitPaymentRequest(createMitPaymentAuthorizationHold); + if (!validationResult.isValid()) { + res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + res.setReturnMessage(validationResult.getMessagesAsJson()); + return res; + } + return executeCreateMitPaymentAuthorizationHold(createMitPaymentAuthorizationHold); + } catch (Exception ex) { + res.setReturnCode(ResponseMessage.EXCEPTION.getCode()); + res.setReturnMessage(ex.toString()); + return res; + } + } + private CreateMitOrCitPaymentResponse executeCreateMitPaymentAuthorizationHold(CreateMitOrCitPaymentRequest req) throws PaytrailCommunicationException, PaytrailClientException { + try { + ObjectMapper mapper = new ObjectMapper(); + String jsonRequest = mapper.writeValueAsString(req); + String targetURL = Constants.API_ENDPOINT + "/payments/token/mit/authorization-hold"; + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); + + if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + return new CreateMitOrCitPaymentResponse(data.getStatusCode(), data.getData(), null); + } else { + // Successfully created the MIT payment authorization hold and parse the result + CreateMitPaymentChargeData dataMapper = mapper.readValue(data.getData(), CreateMitPaymentChargeData.class); + return new CreateMitOrCitPaymentResponse(data.getStatusCode(), ResponseMessage.OK.getDescription(), dataMapper); + } + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } + + @Override + public CreateMitOrCitPaymentResponse createMitPaymentCommit(CreateMitOrCitPaymentRequest req, String transactionId) { + CreateMitOrCitPaymentResponse res = new CreateMitOrCitPaymentResponse(); + try { + ValidationResult validationResult = validateCreateMitOrCitPaymentRequest(req); + if (!validationResult.isValid()) { + res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + res.setReturnMessage(validationResult.getMessagesAsJson()); + return res; + } + + if (transactionId == null || transactionId.isEmpty()) { + res.setReturnCode(ResponseMessage.RESPONSE_NULL.getCode()); + res.setReturnMessage("transactionId cannot be null"); + return res; + } + + return executeCreateMitOrCitPaymentCommit(req, transactionId); + } catch (Exception ex) { + res.setReturnCode(ResponseMessage.EXCEPTION.getCode()); + res.setReturnMessage(ex.toString()); + return res; + } + } + + private CreateMitOrCitPaymentResponse executeCreateMitOrCitPaymentCommit(CreateMitOrCitPaymentRequest req, String transactionId) throws PaytrailCommunicationException, PaytrailClientException { + try { + ObjectMapper mapper = new ObjectMapper(); + String jsonRequest = mapper.writeValueAsString(req); + String targetURL = Constants.API_ENDPOINT + "/payments/" + transactionId + "token/mit/commit/"; + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, transactionId, null); + + if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + return new CreateMitOrCitPaymentResponse(data.getStatusCode(), data.getData(), null); + } else { + CreateMitPaymentChargeData dataMapper = mapper.readValue(data.getData(), CreateMitPaymentChargeData.class); + return new CreateMitOrCitPaymentResponse(ResponseMessage.OK.getCode(), ResponseMessage.OK.getDescription(), dataMapper); + } + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } + + @Override + public CreateMitOrCitPaymentResponse createCitPaymentCharge(CreateMitOrCitPaymentRequest req) { + CreateMitOrCitPaymentResponse res = new CreateMitOrCitPaymentResponse(); + try { + ValidationResult validationResult = validateCreateMitOrCitPaymentRequest(req); + if (!validationResult.isValid()) { + res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + res.setReturnMessage(validationResult.getMessagesAsJson()); + return res; + } + return executeCreateCitPaymentCharge(req); + } catch (PaytrailClientException | PaytrailCommunicationException e) { + res.setReturnCode(ResponseMessage.EXCEPTION.getCode()); + res.setReturnMessage(e.getMessage()); + return res; + } + } + + private CreateMitOrCitPaymentResponse executeCreateCitPaymentCharge(CreateMitOrCitPaymentRequest req) throws PaytrailClientException, PaytrailCommunicationException { + try { + ObjectMapper mapper = new ObjectMapper(); + String jsonRequest = mapper.writeValueAsString(req); + String targetURL = Constants.API_ENDPOINT + "/payments/token/cit/charge"; + + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); + + if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + return new CreateMitOrCitPaymentResponse(data.getStatusCode(), data.getData(), null); + } else { + CreateMitPaymentChargeData dataMapper = mapper.readValue(data.getData(), CreateMitPaymentChargeData.class); + return new CreateMitOrCitPaymentResponse(ResponseMessage.OK.getCode(), ResponseMessage.OK.getDescription(), dataMapper); + } + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } + + @Override + public CreateMitOrCitPaymentResponse createCitPaymentAuthorizationHold(CreateMitOrCitPaymentRequest req) { + CreateMitOrCitPaymentResponse res = new CreateMitOrCitPaymentResponse(); + try { + ValidationResult validationResult = validateCreateMitOrCitPaymentRequest(req); + if (!validationResult.isValid()) { + res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + res.setReturnMessage(validationResult.getMessagesAsJson()); + return res; + } + return executeCreateCitPaymentAuthorizationHold(req); + } catch (PaytrailClientException | PaytrailCommunicationException e) { + res.setReturnCode(ResponseMessage.EXCEPTION.getCode()); + res.setReturnMessage(e.getMessage()); + return res; + } + } + + private CreateMitOrCitPaymentResponse executeCreateCitPaymentAuthorizationHold(CreateMitOrCitPaymentRequest req) throws PaytrailClientException, PaytrailCommunicationException { + try { + ObjectMapper mapper = new ObjectMapper(); + String jsonRequest = mapper.writeValueAsString(req); + String targetURL = Constants.API_ENDPOINT + "/payments/token/cit/authorization-hold"; + + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); + + if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + return new CreateMitOrCitPaymentResponse(data.getStatusCode(), data.getData(), null); + } else { + CreateMitPaymentChargeData dataMapper = mapper.readValue(data.getData(), CreateMitPaymentChargeData.class); + return new CreateMitOrCitPaymentResponse(ResponseMessage.OK.getCode(), ResponseMessage.OK.getDescription(), dataMapper); + } + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } + + @Override + public CreateMitOrCitPaymentResponse createCitPaymentCommit(CreateMitOrCitPaymentRequest req, String transactionId) { + CreateMitOrCitPaymentResponse res = new CreateMitOrCitPaymentResponse(); + try { + ValidationResult validationResult = validateCreateMitOrCitPaymentRequest(req); + if (!validationResult.isValid()) { + res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + res.setReturnMessage(validationResult.getMessagesAsJson()); + return res; + } + + if (transactionId == null || transactionId.isEmpty()) { + res.setReturnCode(ResponseMessage.RESPONSE_NULL.getCode()); + res.setReturnMessage("transactionId cannot be null"); + return res; + } + + return executeCreateMitOrCitPaymentCommit(req, transactionId); + } catch (Exception ex) { + res.setReturnCode(ResponseMessage.EXCEPTION.getCode()); + res.setReturnMessage(ex.toString()); + return res; + } + } + + @Override + public PayAddCardResponse payAndAddCard(PayAddCardRequest req) { + PayAddCardResponse res = new PayAddCardResponse(); + try { + ValidationResult validationResult = validatePayAndAddCardRequest(req); + if (!validationResult.isValid()) { + res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + res.setReturnMessage(validationResult.getMessagesAsJson()); + return res; + } + return executePayAndAddCard(req); + } catch (Exception ex) { + res.setReturnCode(ResponseMessage.EXCEPTION.getCode()); + res.setReturnMessage(ex.toString()); + return res; + } + } + + private ValidationResult validatePayAndAddCardRequest(PayAddCardRequest req) { + if (req == null) { + Map error = new HashMap<>(); + error.put("error", ResponseMessage.BAD_REQUEST.getDescription()); + return new ValidationResult(false, error); + } + return req.validate(); + } + + private PayAddCardResponse executePayAndAddCard(PayAddCardRequest req) throws PaytrailClientException, PaytrailCommunicationException { + try { + ObjectMapper mapper = new ObjectMapper(); + String jsonRequest = mapper.writeValueAsString(req); + String targetURL = Constants.API_ENDPOINT + "/tokenization/pay-and-add-card"; + + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); + + if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + return new PayAddCardResponse(data.getStatusCode(), data.getData(), null); + } else { + PayAddCardData dataMapper = mapper.readValue(data.getData(), PayAddCardData.class); + return new PayAddCardResponse(ResponseMessage.OK.getCode(), ResponseMessage.OK.getDescription(), dataMapper); + } + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/AddCardFormRequest.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/AddCardFormRequest.java new file mode 100644 index 0000000..71e8b8d --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/AddCardFormRequest.java @@ -0,0 +1,84 @@ +package io.paytrailpayment.dto.request; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.util.Arrays; + +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_DEFAULT) +public class AddCardFormRequest extends Request { + @JsonProperty("checkout-account") + private Integer checkoutAccount; + + @JsonProperty("checkout-algorithm") + private String checkoutAlgorithm; + + @JsonProperty("checkout-method") + private String checkoutMethod; + + @JsonProperty("checkout-nonce") + private String checkoutNonce; + + @JsonProperty("checkout-timestamp") + private String checkoutTimestamp; + + @JsonProperty("checkout-redirect-success-url") + private String checkoutRedirectSuccessUrl; + + @JsonProperty("checkout-redirect-cancel-url") + private String checkoutRedirectCancelUrl; + + @JsonProperty("signature") + private String signature; + + @JsonProperty("checkout-callback-success-url") + private String checkoutCallbackSuccessUrl; + + @JsonProperty("checkout-callback-cancel-url") + private String checkoutCallbackCancelUrl; + + @JsonProperty("language") + private String language; + + @Override + protected void specificValidate() { + String[] supportedLanguages = {"FI", "SV", "EN"}; + String[] supportedMethods = {"GET", "POST"}; + + if (checkoutAccount == null) { + addValidationError("checkout-account", "checkout-account is empty."); + } + + if (checkoutAlgorithm == null || checkoutAlgorithm.isEmpty()) { + addValidationError("checkout-algorithm", "checkout-algorithm is empty."); + } + + if (!Arrays.asList(supportedMethods).contains(checkoutMethod)) { + addValidationError("checkout-method", "unsupported method chosen."); + } + + if (checkoutTimestamp == null || checkoutTimestamp.isEmpty()) { + addValidationError("checkout-timestamp", "checkout-timestamp is empty."); + } + + if (checkoutRedirectSuccessUrl == null || checkoutRedirectSuccessUrl.isEmpty()) { + addValidationError("checkout-redirect-success-url", "checkout-redirect success url is empty."); + } + + if (checkoutRedirectCancelUrl == null || checkoutRedirectCancelUrl.isEmpty()) { + addValidationError("checkout-redirect-cancel-url", "checkout-redirect cancel url is empty."); + } + + if (!Arrays.asList(supportedLanguages).contains(language)) { + addValidationError("language", "unsupported language chosen."); + } + } +} \ No newline at end of file diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreateMitOrCitPaymentRequest.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreateMitOrCitPaymentRequest.java new file mode 100644 index 0000000..53a0891 --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreateMitOrCitPaymentRequest.java @@ -0,0 +1,23 @@ +package io.paytrailpayment.dto.request; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CreateMitOrCitPaymentRequest extends CreatePaymentRequest { + private String token; + + @Override + protected void specificValidate() { + super.specificValidate(); + + if (token == null || token.isEmpty()) { + addValidationError("token", "token can't be null."); + } + } +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/PayAddCardRequest.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/PayAddCardRequest.java new file mode 100644 index 0000000..666deda --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/PayAddCardRequest.java @@ -0,0 +1,122 @@ +package io.paytrailpayment.dto.request; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.paytrailpayment.dto.request.model.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.util.EnumSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_DEFAULT) +public class PayAddCardRequest extends Request { + private String stamp; + private String reference; + private int amount; + private PaytrailCurrency currency; + private PaytrailLanguage language; + private String orderId; + private List items; + private Customer customer; + private Address deliveryAddress; + private Address invoicingAddress; + private boolean manualInvoiceActivation; + private CallbackUrl redirectUrls; + private CallbackUrl callbackUrls; + private int callbackDelay; + private List groups; + private boolean usePricesWithoutVat; + + @Override + protected void specificValidate() { + StringBuilder message = new StringBuilder(); + + if (stamp == null || stamp.isEmpty()) { + addValidationError("stamp", "Stamp can't be null or empty."); + } else if (stamp.length() > 200) { + addValidationError("stamp", "Stamp is more than 200 characters."); + } + + if (reference == null || reference.isEmpty()) { + addValidationError("reference", "Reference can't be null or empty."); + } else if (reference.length() > 200) { + addValidationError("reference", "Reference is more than 200 characters."); + } + + if (amount < 0) { + addValidationError("amount", "Amount can't be less than zero."); + } else if (amount > 99999999) { + addValidationError("amount", "Amount can't be more than 99999999."); + } + + if (customer == null) { + addValidationError("customer", "Customer can't be null."); + } else { + ValidationResult customerValidationResult = customer.validate(); + if (!customerValidationResult.isValid()) { + addValidationError("customer", customerValidationResult.getMessagesAsJson()); + } + } + + if (items != null) { + for (Item item : items) { + ValidationResult itemValidationResult = item.validate(); + if (!itemValidationResult.isValid()) { + addValidationError("item", itemValidationResult.getMessagesAsJson()); + break; + } + } + } + + if (deliveryAddress != null) { + ValidationResult deliveryAddressValidationResult = deliveryAddress.validate(); + if (!deliveryAddressValidationResult.isValid()) { + addValidationError("deliveryAddress", deliveryAddressValidationResult.getMessagesAsJson()); + } + } + + if (invoicingAddress != null) { + ValidationResult invoicingAddressValidationResult = invoicingAddress.validate(); + if (!invoicingAddressValidationResult.isValid()) { + addValidationError("invoicingAddress", invoicingAddressValidationResult.getMessagesAsJson()); + } + } + + if (redirectUrls == null) { + addValidationError("redirectUrls", "Object redirectUrls can't be null."); + } else { + ValidationResult redirectUrlsValidationResult = redirectUrls.validate(); + if (!redirectUrlsValidationResult.isValid()) { + addValidationError("redirectUrls", redirectUrlsValidationResult.getMessagesAsJson()); + } + } + + if (callbackUrls == null) { + addValidationError("callbackUrls", "Object callbackUrls can't be null."); + } else { + ValidationResult callbackUrlsValidationResult = callbackUrls.validate(); + if (!callbackUrlsValidationResult.isValid()) { + addValidationError("callbackUrls", callbackUrlsValidationResult.getMessagesAsJson()); + } + } + + if (groups != null) { + Set allowedGroups = EnumSet.allOf(PaytrailPaymentMethodGroup.class).stream() + .map(Enum::toString) + .collect(Collectors.toSet()); + for (String group : groups) { + if (!allowedGroups.contains(group)) { + addValidationError("groups", "Value '" + group + "' is not in the list of allowed payment methods."); + } + } + } + } +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Item.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Item.java index 2f4239f..8b3ce04 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Item.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Item.java @@ -42,10 +42,10 @@ public class Item extends Request { */ private String category; - /** - * Item level order ID (suborder ID). Mainly useful for Shop-in-Shop purchases. - */ - private String orderId; +// /** +// * Item level order ID (suborder ID). Mainly useful for Shop-in-Shop purchases. +// */ +// private String orderId; /** * Unique identifier for this item. Required for Shop-in-Shop payments. Required for item refunds. @@ -57,15 +57,15 @@ public class Item extends Request { */ private String reference; - /** - * Merchant ID for the item. Required for Shop-in-Shop payments, do not use for normal payments. - */ - private String merchant; - - /** - * Shop-in-Shop commission. Do not use for normal payments. - */ - private Commission commission; +// /** +// * Merchant ID for the item. Required for Shop-in-Shop payments, do not use for normal payments. +// */ +// private String merchant; +// +// /** +// * Shop-in-Shop commission. Do not use for normal payments. +// */ +// private Commission commission; @Override() protected void specificValidate() { @@ -96,5 +96,13 @@ protected void specificValidate() { } } + public Item(int unitPrice, int units, int vatPercentage, String productCode, String category, String description) { + this.unitPrice = unitPrice; + this.units = units; + this.vatPercentage = vatPercentage; + this.productCode = productCode; + this.category = category; + this.description = description; + } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailPaymentMethodGroup.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailPaymentMethodGroup.java index b707f00..ca68070 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailPaymentMethodGroup.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailPaymentMethodGroup.java @@ -1,8 +1,8 @@ package io.paytrailpayment.dto.request.model; public enum PaytrailPaymentMethodGroup { - mobile, - bank, - creditcard, - credit + MOBILE, + BANK, + CREDIT_CARD, + CREDIT } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/ShopInShopItem.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/ShopInShopItem.java new file mode 100644 index 0000000..e66e36b --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/ShopInShopItem.java @@ -0,0 +1,69 @@ +package io.paytrailpayment.dto.request.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.paytrailpayment.dto.request.ValidationResult; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_DEFAULT) +public class ShopInShopItem extends Item { + /** + * Item level order ID (suborder ID). Mainly useful for Shop-in-Shop purchases. + */ + private String orderId; + + /** + * Merchant ID for the item. Required for Shop-in-Shop payments, do not use for normal payments. + */ + private String merchant; + + /** + * Shop-in-Shop commission. Do not use for normal payments. + */ + private Commission commission; + + public ShopInShopItem(int unitPrice, int units, int vatPercentage, String productCode, String category, String description, String stamp, String reference, String orderId, String merchant, Commission commission) { + super(unitPrice, units, vatPercentage, productCode, description, category, stamp, reference); + this.orderId = orderId; + this.merchant = merchant; + this.commission = commission; + } + + public ShopInShopItem(int unitPrice, int units, int vatPercentage, String productCode, String category, String description, String stamp, String reference) { + super(unitPrice, units, vatPercentage, productCode, description, category, stamp, reference); + } + + public ShopInShopItem(int unitPrice, int units, int vatPercentage, String productCode, String category, + String description, String merchant, String stamp, String reference, String orderId) { + super(unitPrice, units, vatPercentage, productCode, description, category, stamp, reference); + this.merchant = merchant; + this.orderId = orderId; + } + + @Override + protected void specificValidate() { + super.specificValidate(); + + if (orderId == null) { + addValidationError("orderId", "Item's orderId can't be null."); + } + + + if (merchant == null || merchant.isEmpty()) { + addValidationError("merchant", "Item's merchant can't be null or empty."); + } + + if (commission != null) { + ValidationResult commissionValidationResult = commission.validate(); + if (!commissionValidationResult.isValid()) { + addValidationError("commission", commissionValidationResult.getMessagesAsJson()); + } + } + } +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/AddCardFormResponse.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/AddCardFormResponse.java new file mode 100644 index 0000000..49eda6c --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/AddCardFormResponse.java @@ -0,0 +1,18 @@ +package io.paytrailpayment.dto.response; + +import io.paytrailpayment.dto.response.data.AddCardFormData; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AddCardFormResponse extends Response { + private AddCardFormData data; + + public AddCardFormResponse(int statusCode, String description, AddCardFormData dataMapper) { + super(statusCode, description); + this.data = dataMapper; + } +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/CreateMitOrCitPaymentResponse.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/CreateMitOrCitPaymentResponse.java new file mode 100644 index 0000000..49d7f3b --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/CreateMitOrCitPaymentResponse.java @@ -0,0 +1,20 @@ +package io.paytrailpayment.dto.response; + +import io.paytrailpayment.dto.response.data.CreateMitPaymentChargeData; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CreateMitOrCitPaymentResponse extends Response { + private CreateMitPaymentChargeData data; + + public CreateMitOrCitPaymentResponse(int statusCode, String description, CreateMitPaymentChargeData dataMapper) { + super(statusCode, description); + this.data = dataMapper; + } +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/PayAddCardResponse.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/PayAddCardResponse.java new file mode 100644 index 0000000..d1c2735 --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/PayAddCardResponse.java @@ -0,0 +1,20 @@ +package io.paytrailpayment.dto.response; + +import io.paytrailpayment.dto.response.data.PayAddCardData; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PayAddCardResponse extends Response { + private PayAddCardData data; + + public PayAddCardResponse(int returnCode, String returnMessage, PayAddCardData data) { + super(returnCode, returnMessage); + this.data = data; + } +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/AddCardFormData.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/AddCardFormData.java new file mode 100644 index 0000000..5fe68e6 --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/AddCardFormData.java @@ -0,0 +1,12 @@ +package io.paytrailpayment.dto.response.data; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AddCardFormData { + private String content; +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/CreateMitPaymentChargeData.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/CreateMitPaymentChargeData.java new file mode 100644 index 0000000..d679a93 --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/CreateMitPaymentChargeData.java @@ -0,0 +1,13 @@ +package io.paytrailpayment.dto.response.data; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CreateMitPaymentChargeData { + private String transactionId; + private String threeDSecureUrl; +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/PayAddCardData.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/PayAddCardData.java new file mode 100644 index 0000000..214d7c3 --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/PayAddCardData.java @@ -0,0 +1,13 @@ +package io.paytrailpayment.dto.response.data; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PayAddCardData { + private String transactionId; + private String redirectUrl; +} diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java new file mode 100644 index 0000000..7e3fd58 --- /dev/null +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java @@ -0,0 +1,72 @@ +package io.paytrailpayment; + +import io.paytrailpayment.dto.request.AddCardFormRequest; +import io.paytrailpayment.dto.response.AddCardFormResponse; +import io.paytrailpayment.utilites.ResponseMessage; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class CreateAddCardFormRequestTests extends TestCase { + private static final String MERCHANTIDSIS = "695861"; + private static final String SECRETKEYSIS = "MONISAIPPUAKAUPPIAS"; + private PaytrailClient payTrail; + + @Before + public void setUp() { + payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + } + + @Test + public void createAddCardFormRequest_RequestNull_ReturnCode400() { + // Arrange + int expected = ResponseMessage.BAD_REQUEST.getCode(); + + // Act + AddCardFormRequest request = null; + AddCardFormResponse res = payTrail.createAddCardFormRequest(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createAddCardFormRequest_ValidateFalse_ReturnCode403() { + // Arrange + int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + + // Act + AddCardFormRequest request = new AddCardFormRequest(); + AddCardFormResponse res = payTrail.createAddCardFormRequest(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createAddCardFormRequest_Success_ReturnCode200() { + // Arrange + int expected = ResponseMessage.OK.getCode(); + + // Act + AddCardFormRequest request = new AddCardFormRequest(); + request.setCheckoutAccount(375917); + request.setCheckoutAlgorithm("sha256"); + request.setCheckoutMethod("POST"); + request.setCheckoutNonce("6501220b16b7"); + request.setCheckoutTimestamp("2023-08-22T04:05:20.253Z"); + request.setCheckoutRedirectSuccessUrl("https://somedomain.com/success"); + request.setCheckoutRedirectCancelUrl("https://somedomain.com/cancel"); + request.setSignature("542e780c253761ed64333d5485391ddd4f55d5e00b7bdc7f60f0f0d15516f889"); + request.setLanguage("EN"); + + AddCardFormResponse res = payTrail.createAddCardFormRequest(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } +} diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java new file mode 100644 index 0000000..289f29b --- /dev/null +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java @@ -0,0 +1,139 @@ +package io.paytrailpayment; + +import io.paytrailpayment.dto.request.*; +import io.paytrailpayment.dto.request.model.*; +import io.paytrailpayment.dto.response.CreateMitOrCitPaymentResponse; +import io.paytrailpayment.utilites.ResponseMessage; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CreateCitPaymentAuthorizationHoldTests { + private static final String MERCHANTIDN = "375917"; + private static final String MERCHANTIDSIS = "695861"; + private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + + @Test + public void createCitPaymentAuthorizationHold_RequestNull_ReturnCode400() { + // Arrange + int expected = ResponseMessage.RESPONSE_NULL.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = null; + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentAuthorizationHold(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createCitPaymentAuthorizationHold_ValidateFalse_ReturnCode403() { + // Arrange + int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = new CreateMitOrCitPaymentRequest(); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createCitPaymentAuthorizationHold_Success_ReturnCode200() { + // Arrange + int expected = ResponseMessage.OK.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createCitPaymentAuthorizationHold_CallPaytrailReturnFail_ReturnCode500() { + // Arrange + int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + private CreateMitOrCitPaymentRequest createValidPayload() { + CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); + payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); + payload.setStamp(UUID.randomUUID().toString()); + payload.setReference("9187445"); + payload.setAmount(1590); + payload.setCurrency(PaytrailCurrency.EUR); + payload.setLanguage(PaytrailLanguage.FI); + payload.setOrderId(""); + + ShopInShopItem item = new ShopInShopItem(); + item.setUnitPrice(1590); + item.setUnits(1); + item.setVatPercentage(24); + item.setProductCode("#927502759"); + item.setCategory("Pet supplies"); + item.setDescription("Cat ladder"); + item.setStamp(UUID.randomUUID().toString()); + item.setReference("9187445"); + payload.setItems(Arrays.asList(item)); + + Customer customer = new Customer(); + customer.setEmail("erja.esimerkki@example.org"); + customer.setFirstName("Erja"); + customer.setVatId("FI12345671"); + customer.setCompanyName("nothing"); + customer.setLastName("+358501234567"); + customer.setPhone("123"); + payload.setCustomer(customer); + + CallbackUrl redirectUrls = new CallbackUrl(); + redirectUrls.setSuccess("https://ecom.example.org/success"); + redirectUrls.setCancel("https://ecom.example.org/cancel"); + payload.setRedirectUrls(redirectUrls); + + CallbackUrl callbackUrls = new CallbackUrl(); + callbackUrls.setSuccess("https://ecom.example.org/success"); + callbackUrls.setCancel("https://ecom.example.org/cancel"); + payload.setCallbackUrls(callbackUrls); + + Address deliveryAddress = new Address(); + deliveryAddress.setCity("Tampere"); + deliveryAddress.setCountry("FI"); + deliveryAddress.setCounty("Pirkanmaa"); + deliveryAddress.setPostalCode("33100"); + deliveryAddress.setStreetAddress("Hämeenkatu 6 B"); + payload.setDeliveryAddress(deliveryAddress); + + Address invoicingAddress = new Address(); + invoicingAddress.setCity("Helsinki"); + invoicingAddress.setCountry("FI"); + invoicingAddress.setCounty("Uusimaa"); + invoicingAddress.setPostalCode("00510"); + invoicingAddress.setStreetAddress("Testikatu 1"); + payload.setInvoicingAddress(invoicingAddress); + + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + return payload; + } +} diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java new file mode 100644 index 0000000..fd16855 --- /dev/null +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java @@ -0,0 +1,139 @@ +package io.paytrailpayment; + +import io.paytrailpayment.dto.request.*; +import io.paytrailpayment.dto.request.model.*; +import io.paytrailpayment.dto.response.CreateMitOrCitPaymentResponse; +import io.paytrailpayment.utilites.ResponseMessage; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CreateCitPaymentChargeTests { + private static final String MERCHANTIDN = "375917"; + private static final String MERCHANTIDSIS = "695861"; + private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + + @Test + public void createCitPaymentCharge_RequestNull_ReturnCode400() { + // Arrange + int expected = ResponseMessage.RESPONSE_NULL.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = null; + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createCitPaymentCharge_ValidateFalse_ReturnCode403() { + // Arrange + int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = new CreateMitOrCitPaymentRequest(); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createCitPaymentCharge_Success_ReturnCode200() { + // Arrange + int expected = ResponseMessage.OK.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createCitPaymentCharge_CallPaytrailReturnFail_ReturnCode500() { + // Arrange + int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + private CreateMitOrCitPaymentRequest createValidPayload() { + CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); + payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); + payload.setStamp(UUID.randomUUID().toString()); + payload.setReference("9187445"); + payload.setAmount(1590); + payload.setCurrency(PaytrailCurrency.EUR); + payload.setLanguage(PaytrailLanguage.FI); + payload.setOrderId(""); + + ShopInShopItem item = new ShopInShopItem(); + item.setUnitPrice(1590); + item.setUnits(1); + item.setVatPercentage(24); + item.setProductCode("#927502759"); + item.setCategory("Pet supplies"); + item.setDescription("Cat ladder"); + item.setStamp(UUID.randomUUID().toString()); + item.setReference("9187445"); + payload.setItems(Arrays.asList(item)); + + Customer customer = new Customer(); + customer.setEmail("erja.esimerkki@example.org"); + customer.setFirstName("Erja"); + customer.setVatId("FI12345671"); + customer.setCompanyName("nothing"); + customer.setLastName("+358501234567"); + customer.setPhone("123"); + payload.setCustomer(customer); + + CallbackUrl redirectUrls = new CallbackUrl(); + redirectUrls.setSuccess("https://ecom.example.org/success"); + redirectUrls.setCancel("https://ecom.example.org/cancel"); + payload.setRedirectUrls(redirectUrls); + + CallbackUrl callbackUrls = new CallbackUrl(); + callbackUrls.setSuccess("https://ecom.example.org/success"); + callbackUrls.setCancel("https://ecom.example.org/cancel"); + payload.setCallbackUrls(callbackUrls); + + Address deliveryAddress = new Address(); + deliveryAddress.setCity("Tampere"); + deliveryAddress.setCountry("FI"); + deliveryAddress.setCounty("Pirkanmaa"); + deliveryAddress.setPostalCode("33100"); + deliveryAddress.setStreetAddress("Hämeenkatu 6 B"); + payload.setDeliveryAddress(deliveryAddress); + + Address invoicingAddress = new Address(); + invoicingAddress.setCity("Helsinki"); + invoicingAddress.setCountry("FI"); + invoicingAddress.setCounty("Uusimaa"); + invoicingAddress.setPostalCode("00510"); + invoicingAddress.setStreetAddress("Testikatu 1"); + payload.setInvoicingAddress(invoicingAddress); + + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + return payload; + } +} diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java new file mode 100644 index 0000000..3d5a235 --- /dev/null +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java @@ -0,0 +1,115 @@ +package io.paytrailpayment; + +import io.paytrailpayment.dto.request.CreateMitOrCitPaymentRequest; +import io.paytrailpayment.dto.request.model.*; +import io.paytrailpayment.dto.response.CreateMitOrCitPaymentResponse; +import io.paytrailpayment.utilites.ResponseMessage; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.UUID; + +public class CreateCitPaymentCommitTests { + private static final String MERCHANTIDN = "375917"; + private static final String MERCHANTIDSIS = "695861"; + private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + + @Test + public void requestNullReturnCode400() { + // Arrange + int expected = ResponseMessage.BAD_REQUEST.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = null; + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCommit(request, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void validateFalseReturnCode403() { + // Arrange + int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = new CreateMitOrCitPaymentRequest(); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCommit(request, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void successReturnCode200() { + // Arrange + int expected = ResponseMessage.OK.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); + payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); + payload.setStamp(UUID.randomUUID().toString()); + payload.setReference("9187445"); + payload.setAmount(1590); + payload.setCurrency(PaytrailCurrency.EUR); + payload.setLanguage(PaytrailLanguage.FI); + payload.setOrderId(""); + payload.setItems(Arrays.asList(new ShopInShopItem( + 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder", + UUID.randomUUID().toString(), "9187445"))); + payload.setCustomer(new Customer( + "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", + "+358501234567", "123")); + payload.setRedirectUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + payload.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + payload.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); + payload.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCommit(payload, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void callPaytrailReturnFailReturnCode500() { + // Arrange + int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); + payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); + payload.setStamp(UUID.randomUUID().toString()); + payload.setReference("9187445"); + payload.setAmount(1590); + payload.setCurrency(PaytrailCurrency.EUR); + payload.setLanguage(PaytrailLanguage.FI); + payload.setOrderId(""); + payload.setItems(Arrays.asList(new ShopInShopItem( + 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder", + UUID.randomUUID().toString(), "9187445"))); + payload.setCustomer(new Customer( + "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", + "+358501234567", "123")); + payload.setRedirectUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + payload.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + payload.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); + payload.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCommit(payload, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } +} diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java new file mode 100644 index 0000000..5bf830e --- /dev/null +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java @@ -0,0 +1,139 @@ +package io.paytrailpayment; + +import io.paytrailpayment.dto.request.*; +import io.paytrailpayment.dto.request.model.*; +import io.paytrailpayment.dto.response.CreateMitOrCitPaymentResponse; +import io.paytrailpayment.utilites.ResponseMessage; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CreateMitPaymentAuthorizationHoldTests { + private static final String MERCHANTIDN = "375917"; + private static final String MERCHANTIDSIS = "695861"; + private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + + @Test + public void createMitPaymentAuthorizationHoldRequestNullReturnCode400() { + // Arrange + int expected = ResponseMessage.RESPONSE_NULL.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = null; + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentAuthorizationHold(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentAuthorizationHoldValidateFalseReturnCode403() { + // Arrange + int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = new CreateMitOrCitPaymentRequest(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentAuthorizationHold(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentAuthorizationHoldSuccessReturnCode200() { + // Arrange + int expected = ResponseMessage.OK.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentAuthorizationHold(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentAuthorizationHoldCallPaytrailReturnFailReturnCode500() { + // Arrange + int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentAuthorizationHold(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + private CreateMitOrCitPaymentRequest createValidPayload() { + CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); + payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); + payload.setStamp(UUID.randomUUID().toString()); + payload.setReference("9187445"); + payload.setAmount(1590); + payload.setCurrency(PaytrailCurrency.EUR); + payload.setLanguage(PaytrailLanguage.FI); + payload.setOrderId(""); + + ShopInShopItem item = new ShopInShopItem(); + item.setUnitPrice(1590); + item.setUnits(1); + item.setVatPercentage(24); + item.setProductCode("#927502759"); + item.setCategory("Pet supplies"); + item.setDescription("Cat ladder"); + item.setStamp(UUID.randomUUID().toString()); + item.setReference("9187445"); + payload.setItems(Arrays.asList(item)); + + Customer customer = new Customer(); + customer.setEmail("erja.esimerkki@example.org"); + customer.setFirstName("Erja"); + customer.setVatId("FI12345671"); + customer.setCompanyName("nothing"); + customer.setLastName("+358501234567"); + customer.setPhone("123"); + payload.setCustomer(customer); + + CallbackUrl redirectUrls = new CallbackUrl(); + redirectUrls.setSuccess("https://ecom.example.org/success"); + redirectUrls.setCancel("https://ecom.example.org/cancel"); + payload.setRedirectUrls(redirectUrls); + + CallbackUrl callbackUrls = new CallbackUrl(); + callbackUrls.setSuccess("https://ecom.example.org/success"); + callbackUrls.setCancel("https://ecom.example.org/cancel"); + payload.setCallbackUrls(callbackUrls); + + Address deliveryAddress = new Address(); + deliveryAddress.setCity("Tampere"); + deliveryAddress.setCountry("FI"); + deliveryAddress.setCounty("Pirkanmaa"); + deliveryAddress.setPostalCode("33100"); + deliveryAddress.setStreetAddress("Hämeenkatu 6 B"); + payload.setDeliveryAddress(deliveryAddress); + + Address invoicingAddress = new Address(); + invoicingAddress.setCity("Helsinki"); + invoicingAddress.setCountry("FI"); + invoicingAddress.setCounty("Uusimaa"); + invoicingAddress.setPostalCode("00510"); + invoicingAddress.setStreetAddress("Testikatu 1"); + payload.setInvoicingAddress(invoicingAddress); + + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + return payload; + } +} diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java new file mode 100644 index 0000000..47cbbec --- /dev/null +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java @@ -0,0 +1,139 @@ +package io.paytrailpayment; + +import io.paytrailpayment.dto.request.*; +import io.paytrailpayment.dto.request.model.*; +import io.paytrailpayment.dto.response.CreateMitOrCitPaymentResponse; +import io.paytrailpayment.utilites.ResponseMessage; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CreateMitPaymentChargeTests { + private static final String MERCHANTIDN = "375917"; + private static final String MERCHANTIDSIS = "695861"; + private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + + @Test + public void createMitPaymentCharge_RequestNull_ReturnCode400() { + // Arrange + int expected = ResponseMessage.RESPONSE_NULL.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = null; + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCharge(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentCharge_ValidateFalse_ReturnCode403() { + // Arrange + int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = new CreateMitOrCitPaymentRequest(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCharge(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentCharge_Success_ReturnCode200() { + // Arrange + int expected = ResponseMessage.OK.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCharge(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentCharge_CallPaytrailReturnFail_ReturnCode500() { + // Arrange + int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCharge(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + private CreateMitOrCitPaymentRequest createValidPayload() { + CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); + payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); + payload.setStamp(UUID.randomUUID().toString()); + payload.setReference("9187445"); + payload.setAmount(1590); + payload.setCurrency(PaytrailCurrency.EUR); + payload.setLanguage(PaytrailLanguage.FI); + payload.setOrderId(""); + + ShopInShopItem item = new ShopInShopItem(); + item.setUnitPrice(1590); + item.setUnits(1); + item.setVatPercentage(24); + item.setProductCode("#927502759"); + item.setCategory("Pet supplies"); + item.setDescription("Cat ladder"); + item.setStamp(UUID.randomUUID().toString()); + item.setReference("9187445"); + payload.setItems(Arrays.asList(item)); + + Customer customer = new Customer(); + customer.setEmail("erja.esimerkki@example.org"); + customer.setFirstName("Erja"); + customer.setVatId("FI12345671"); + customer.setCompanyName("nothing"); + customer.setLastName("+358501234567"); + customer.setPhone("123"); + payload.setCustomer(customer); + + CallbackUrl redirectUrls = new CallbackUrl(); + redirectUrls.setSuccess("https://ecom.example.org/success"); + redirectUrls.setCancel("https://ecom.example.org/cancel"); + payload.setRedirectUrls(redirectUrls); + + CallbackUrl callbackUrls = new CallbackUrl(); + callbackUrls.setSuccess("https://ecom.example.org/success"); + callbackUrls.setCancel("https://ecom.example.org/cancel"); + payload.setCallbackUrls(callbackUrls); + + Address deliveryAddress = new Address(); + deliveryAddress.setCity("Tampere"); + deliveryAddress.setCountry("FI"); + deliveryAddress.setCounty("Pirkanmaa"); + deliveryAddress.setPostalCode("33100"); + deliveryAddress.setStreetAddress("Hämeenkatu 6 B"); + payload.setDeliveryAddress(deliveryAddress); + + Address invoicingAddress = new Address(); + invoicingAddress.setCity("Helsinki"); + invoicingAddress.setCountry("FI"); + invoicingAddress.setCounty("Uusimaa"); + invoicingAddress.setPostalCode("00510"); + invoicingAddress.setStreetAddress("Testikatu 1"); + payload.setInvoicingAddress(invoicingAddress); + + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + return payload; + } +} diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java new file mode 100644 index 0000000..a606159 --- /dev/null +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java @@ -0,0 +1,139 @@ +package io.paytrailpayment; + +import io.paytrailpayment.dto.request.*; +import io.paytrailpayment.dto.request.model.*; +import io.paytrailpayment.dto.response.CreateMitOrCitPaymentResponse; +import io.paytrailpayment.utilites.ResponseMessage; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CreateMitPaymentCommitTests { + private static final String MERCHANTIDN = "375917"; + private static final String MERCHANTIDSIS = "695861"; + private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + + @Test + public void createMitPaymentCommit_RequestNull_ReturnCode400() { + // Arrange + int expected = ResponseMessage.RESPONSE_NULL.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = null; + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCommit(request, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentCommit_ValidateFalse_ReturnCode403() { + // Arrange + int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = new CreateMitOrCitPaymentRequest(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCommit(request, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentCommit_Success_ReturnCode200() { + // Arrange + int expected = ResponseMessage.OK.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCommit(payload, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentCommit_CallPaytrailReturnFail_ReturnCode500() { + // Arrange + int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCommit(payload, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + private CreateMitOrCitPaymentRequest createValidPayload() { + CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); + payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); + payload.setStamp(UUID.randomUUID().toString()); + payload.setReference("9187445"); + payload.setAmount(1590); + payload.setCurrency(PaytrailCurrency.EUR); + payload.setLanguage(PaytrailLanguage.FI); + payload.setOrderId(""); + + ShopInShopItem item = new ShopInShopItem(); + item.setUnitPrice(1590); + item.setUnits(1); + item.setVatPercentage(24); + item.setProductCode("#927502759"); + item.setCategory("Pet supplies"); + item.setDescription("Cat ladder"); + item.setStamp(UUID.randomUUID().toString()); + item.setReference("9187445"); + payload.setItems(Arrays.asList(item)); + + Customer customer = new Customer(); + customer.setEmail("erja.esimerkki@example.org"); + customer.setFirstName("Erja"); + customer.setVatId("FI12345671"); + customer.setCompanyName("nothing"); + customer.setLastName("+358501234567"); + customer.setPhone("123"); + payload.setCustomer(customer); + + CallbackUrl redirectUrls = new CallbackUrl(); + redirectUrls.setSuccess("https://ecom.example.org/success"); + redirectUrls.setCancel("https://ecom.example.org/cancel"); + payload.setRedirectUrls(redirectUrls); + + CallbackUrl callbackUrls = new CallbackUrl(); + callbackUrls.setSuccess("https://ecom.example.org/success"); + callbackUrls.setCancel("https://ecom.example.org/cancel"); + payload.setCallbackUrls(callbackUrls); + + Address deliveryAddress = new Address(); + deliveryAddress.setCity("Tampere"); + deliveryAddress.setCountry("FI"); + deliveryAddress.setCounty("Pirkanmaa"); + deliveryAddress.setPostalCode("33100"); + deliveryAddress.setStreetAddress("Hämeenkatu 6 B"); + payload.setDeliveryAddress(deliveryAddress); + + Address invoicingAddress = new Address(); + invoicingAddress.setCity("Helsinki"); + invoicingAddress.setCountry("FI"); + invoicingAddress.setCounty("Uusimaa"); + invoicingAddress.setPostalCode("00510"); + invoicingAddress.setStreetAddress("Testikatu 1"); + payload.setInvoicingAddress(invoicingAddress); + + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + return payload; + } +} diff --git a/paytrailpayment-sdk/src/test/java/CreatePaymentUnitTest.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java similarity index 99% rename from paytrailpayment-sdk/src/test/java/CreatePaymentUnitTest.java rename to paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java index de8359e..5acae93 100644 --- a/paytrailpayment-sdk/src/test/java/CreatePaymentUnitTest.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java @@ -1,4 +1,5 @@ -import io.paytrailpayment.PaytrailClient; +package io.paytrailpayment; + import io.paytrailpayment.dto.request.CreatePaymentRequest; import io.paytrailpayment.dto.request.model.*; import io.paytrailpayment.dto.request.model.PaytrailCurrency; diff --git a/paytrailpayment-sdk/src/test/java/CreateRefundRequestUnitTest.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java similarity index 99% rename from paytrailpayment-sdk/src/test/java/CreateRefundRequestUnitTest.java rename to paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java index 4bc0cd6..6fabb9f 100644 --- a/paytrailpayment-sdk/src/test/java/CreateRefundRequestUnitTest.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java @@ -1,4 +1,5 @@ -import io.paytrailpayment.PaytrailClient; +package io.paytrailpayment; + import io.paytrailpayment.dto.request.CreatePaymentRequest; import io.paytrailpayment.dto.request.CreateRefundRequest; import io.paytrailpayment.dto.request.model.*; diff --git a/paytrailpayment-sdk/src/test/java/GetPaymentUnitTest.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/GetPaymentUnitTest.java similarity index 98% rename from paytrailpayment-sdk/src/test/java/GetPaymentUnitTest.java rename to paytrailpayment-sdk/src/test/java/io/paytrailpayment/GetPaymentUnitTest.java index d20b6af..ca187d8 100644 --- a/paytrailpayment-sdk/src/test/java/GetPaymentUnitTest.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/GetPaymentUnitTest.java @@ -1,4 +1,5 @@ -import io.paytrailpayment.PaytrailClient; +package io.paytrailpayment; + import io.paytrailpayment.dto.request.CreatePaymentRequest; import io.paytrailpayment.dto.request.model.*; import io.paytrailpayment.dto.response.CreatePaymentResponse; diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java new file mode 100644 index 0000000..6ffc221 --- /dev/null +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java @@ -0,0 +1,176 @@ +package io.paytrailpayment; + +import io.paytrailpayment.dto.request.PayAddCardRequest; +import io.paytrailpayment.dto.request.model.*; +import io.paytrailpayment.dto.response.PayAddCardResponse; +import io.paytrailpayment.utilites.ResponseMessage; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.UUID; + +public class PayAndAddCardTests { + private static final String MERCHANTIDN = "375917"; + private static final String SECRETKEYN = "SAIPPUAKAUPPIAS"; + private static final String MERCHANTIDSISS = "695874"; + + @Test + public void requestNullReturnCode400() { + // Arrange + int expected = ResponseMessage.BAD_REQUEST.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PayAddCardRequest request = null; + PayAddCardResponse res = payTrail.payAndAddCard(request); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void validateFalseReturnCode403() { + // Arrange + int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PayAddCardRequest request = new PayAddCardRequest(); + PayAddCardResponse res = payTrail.payAndAddCard(request); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void successReturnCode200() { + // Arrange + int expected = ResponseMessage.OK.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PayAddCardRequest request = new PayAddCardRequest(); + request.setStamp(UUID.randomUUID().toString()); + request.setReference("9187445"); + request.setAmount(1590); + request.setCurrency(PaytrailCurrency.EUR); + request.setLanguage(PaytrailLanguage.FI); + request.setOrderId(""); + request.setItems(Arrays.asList(new Item( + 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder"))); + request.setCustomer(new Customer( + "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", + "+358501234567", "123")); + request.setRedirectUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + request.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + request.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); + request.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); + request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + PayAddCardResponse res = payTrail.payAndAddCard(request); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void callPaytrailReturnNullReturnCode404() { + // Arrange + int expected = ResponseMessage.RESPONSE_NULL.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PayAddCardRequest request = new PayAddCardRequest(); + request.setStamp(UUID.randomUUID().toString()); + request.setReference("9187445"); + request.setAmount(1590); + request.setCurrency(PaytrailCurrency.EUR); + request.setLanguage(PaytrailLanguage.FI); + request.setOrderId(""); + request.setItems(Arrays.asList(new Item( + 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder"))); + request.setCustomer(new Customer( + "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", + "+358501234567", "123")); + request.setRedirectUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + request.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + request.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); + request.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); + request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + PayAddCardResponse res = payTrail.payAndAddCard(request); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void callPaytrailReturnFailReturnCode500() { + // Arrange + int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PayAddCardRequest request = new PayAddCardRequest(); + request.setStamp(UUID.randomUUID().toString()); + request.setReference("9187445"); + request.setAmount(1590); + request.setCurrency(PaytrailCurrency.EUR); + request.setLanguage(PaytrailLanguage.FI); + request.setOrderId(""); + request.setItems(Arrays.asList(new ShopInShopItem( + 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder", + MERCHANTIDSISS, UUID.randomUUID().toString(), "", ""))); + request.setCustomer(new Customer( + "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", + "+358501234567", "123")); + request.setRedirectUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + request.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + request.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); + request.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); + request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + PayAddCardResponse res = payTrail.payAndAddCard(request); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void callPayExceptionReturnCode503() { + // Arrange + int expected = ResponseMessage.EXCEPTION.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PayAddCardRequest request = new PayAddCardRequest(); + request.setStamp("1222"); + request.setReference("9187445"); + request.setAmount(1590); + request.setCurrency(PaytrailCurrency.EUR); + request.setLanguage(PaytrailLanguage.FI); + request.setOrderId(""); + request.setItems(Arrays.asList(new Item( + 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder"))); + request.setCustomer(new Customer( + "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", + "+358501234567", "123")); + request.setRedirectUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + request.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + request.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); + request.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); + request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + PayAddCardResponse res = payTrail.payAndAddCard(request); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } +} diff --git a/paytrailpayment-sdk/src/test/java/TestCase.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/TestCase.java similarity index 88% rename from paytrailpayment-sdk/src/test/java/TestCase.java rename to paytrailpayment-sdk/src/test/java/io/paytrailpayment/TestCase.java index 87c8b36..95eeed3 100644 --- a/paytrailpayment-sdk/src/test/java/TestCase.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/TestCase.java @@ -1,3 +1,5 @@ +package io.paytrailpayment; + public abstract class TestCase { protected final String merchantId = "375917"; protected final String secretKey = "SAIPPUAKAUPPIAS"; From 3211d28f6113338e7ffd3a894254220bbe6eb124 Mon Sep 17 00:00:00 2001 From: devs+paytrail Date: Mon, 29 Apr 2024 23:41:22 +0700 Subject: [PATCH 04/28] commit --- .../src/main/java/io/paytrailpayment/Main.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java b/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java index 2a643c2..c4500fb 100644 --- a/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java +++ b/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java @@ -1,9 +1,7 @@ package io.paytrailpayment; import io.paytrailpayment.dto.request.CreatePaymentRequest; -import io.paytrailpayment.dto.request.model.CallbackUrl; -import io.paytrailpayment.dto.request.model.Customer; -import io.paytrailpayment.dto.request.model.Item; +import io.paytrailpayment.dto.request.model.*; import io.paytrailpayment.dto.response.CreatePaymentResponse; import io.paytrailpayment.utilites.ResponseMessage; @@ -19,8 +17,8 @@ public static void main(String[] args) { req.setStamp(UUID.randomUUID().toString()); req.setReference("9187445"); - req.setCurrency("EUR"); - req.setLanguage("FI"); + req.setCurrency(Currency.EUR); + req.setLanguage(Language.EN); req.setOrderId("12335"); req.setAmount(1590); From 582797910a58bbabb25e5874e4cf9a506e6c9693 Mon Sep 17 00:00:00 2001 From: devs+paytrail Date: Tue, 30 Apr 2024 00:12:13 +0700 Subject: [PATCH 05/28] fix/refactor-exception --- .../src/main/java/io/paytrailpayment/Main.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java b/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java index c4500fb..2a643c2 100644 --- a/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java +++ b/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java @@ -1,7 +1,9 @@ package io.paytrailpayment; import io.paytrailpayment.dto.request.CreatePaymentRequest; -import io.paytrailpayment.dto.request.model.*; +import io.paytrailpayment.dto.request.model.CallbackUrl; +import io.paytrailpayment.dto.request.model.Customer; +import io.paytrailpayment.dto.request.model.Item; import io.paytrailpayment.dto.response.CreatePaymentResponse; import io.paytrailpayment.utilites.ResponseMessage; @@ -17,8 +19,8 @@ public static void main(String[] args) { req.setStamp(UUID.randomUUID().toString()); req.setReference("9187445"); - req.setCurrency(Currency.EUR); - req.setLanguage(Language.EN); + req.setCurrency("EUR"); + req.setLanguage("FI"); req.setOrderId("12335"); req.setAmount(1590); From 580f6845d0c7018690839dd455f401880e7f06b3 Mon Sep 17 00:00:00 2001 From: NerdCloud Date: Fri, 18 Oct 2024 16:36:30 +0000 Subject: [PATCH 06/28] CreateMitPaymentAuthorizationHold CreateMitPaymentCommit CreateCitPaymentCharge CreateCitPaymentAuthorizationHold CreateCitPaymentCommit PayAndAddCard createAddCardFormRequest createMitPaymentCharge --- .../java/io/paytrailpayment/IPaytrail.java | 75 +++- .../io/paytrailpayment/PaytrailClient.java | 328 +++++++++++++++++- .../dto/request/AddCardFormRequest.java | 84 +++++ .../request/CreateMitOrCitPaymentRequest.java | 23 ++ .../dto/request/PayAddCardRequest.java | 122 +++++++ .../dto/request/model/Item.java | 34 +- .../model/PaytrailPaymentMethodGroup.java | 8 +- .../dto/request/model/ShopInShopItem.java | 69 ++++ .../dto/response/AddCardFormResponse.java | 18 + .../CreateMitOrCitPaymentResponse.java | 20 ++ .../dto/response/PayAddCardResponse.java | 20 ++ .../dto/response/data/AddCardFormData.java | 12 + .../data/CreateMitPaymentChargeData.java | 13 + .../dto/response/data/PayAddCardData.java | 13 + .../CreateAddCardFormRequestTests.java | 72 ++++ ...reateCitPaymentAuthorizationHoldTests.java | 139 ++++++++ .../CreateCitPaymentChargeTests.java | 139 ++++++++ .../CreateCitPaymentCommitTests.java | 115 ++++++ ...reateMitPaymentAuthorizationHoldTests.java | 139 ++++++++ .../CreateMitPaymentChargeTests.java | 139 ++++++++ .../CreateMitPaymentCommitTests.java | 139 ++++++++ .../CreatePaymentUnitTest.java | 0 .../CreateRefundRequestUnitTest.java | 3 +- .../paytrailpayment}/GetPaymentUnitTest.java | 3 +- .../paytrailpayment/PayAndAddCardTests.java | 176 ++++++++++ .../{ => io/paytrailpayment}/TestCase.java | 2 + 26 files changed, 1869 insertions(+), 36 deletions(-) create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/AddCardFormRequest.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreateMitOrCitPaymentRequest.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/PayAddCardRequest.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/ShopInShopItem.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/AddCardFormResponse.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/CreateMitOrCitPaymentResponse.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/PayAddCardResponse.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/AddCardFormData.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/CreateMitPaymentChargeData.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/PayAddCardData.java create mode 100644 paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java create mode 100644 paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java create mode 100644 paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java create mode 100644 paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java create mode 100644 paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java create mode 100644 paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java create mode 100644 paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java rename paytrailpayment-sdk/src/test/java/{ => io/paytrailpayment}/CreatePaymentUnitTest.java (100%) rename paytrailpayment-sdk/src/test/java/{ => io/paytrailpayment}/CreateRefundRequestUnitTest.java (99%) rename paytrailpayment-sdk/src/test/java/{ => io/paytrailpayment}/GetPaymentUnitTest.java (98%) create mode 100644 paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java rename paytrailpayment-sdk/src/test/java/{ => io/paytrailpayment}/TestCase.java (88%) diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/IPaytrail.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/IPaytrail.java index 18b6e2f..27a8a26 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/IPaytrail.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/IPaytrail.java @@ -1,10 +1,7 @@ package io.paytrailpayment; -import io.paytrailpayment.dto.request.CreatePaymentRequest; -import io.paytrailpayment.dto.request.CreateRefundRequest; -import io.paytrailpayment.dto.response.CreatePaymentResponse; -import io.paytrailpayment.dto.response.CreateRefundResponse; -import io.paytrailpayment.dto.response.GetPaymentResponse; +import io.paytrailpayment.dto.request.*; +import io.paytrailpayment.dto.response.*; /** * Defines methods for interacting with the Paytrail payment system. @@ -27,6 +24,7 @@ public interface IPaytrail { * Note! The transaction id needs to be sent on checkout-transaction-id header as well. * * @param transactionId The unique identifier for the transaction. + * @return GetPaymentResponse * @see Paytrail Documentation - Get Payment */ GetPaymentResponse getPaymentInfo(String transactionId); @@ -36,7 +34,74 @@ public interface IPaytrail { * * @param refundRequest The request object containing refund details. * @param transactionId The unique identifier for the transaction to refund. + * @return CreateRefundResponse * @see Paytrail Documentation - Create Refund Request */ CreateRefundResponse createRefundRequest(CreateRefundRequest refundRequest, String transactionId); + + /** + * HTTP POST /tokenization/addcard-form add card form. + * + * @param req The request object containing add card request + * @return AddCardFormResponse + * @see Paytrail Documentation - Create Refund Request + */ + AddCardFormResponse createAddCardFormRequest(AddCardFormRequest req); + + /** + * HTTP POST /payments/token/mit/charge creates a new MIT payment charge. + * @param req + * @return CreateMitPaymentChargeResponse + * @see Paytrail Documentation - Create authorization hold or charge + */ + CreateMitOrCitPaymentResponse createMitPaymentCharge(CreateMitOrCitPaymentRequest req); + /** + * HTTP POST /payments/token/mit/authorization-hold creates a new MIT authorization hold. + * @param createMitPaymentAuthorizationHold + * @return CreateMitPaymentChargeResponse + * @see Paytrail Documentation - Create authorization hold or charge + */ + CreateMitOrCitPaymentResponse createMitPaymentAuthorizationHold(CreateMitOrCitPaymentRequest createMitPaymentAuthorizationHold); + + /** + * HTTP POST /payments/{transactionId}/token/commit commits a MIT payment. + * @param req + * @param transactionId + * @return CreateMitOrCitPaymentResponse + * @see Paytrail Documentation - Create MIT payment commit + */ + CreateMitOrCitPaymentResponse createMitPaymentCommit(CreateMitOrCitPaymentRequest req, String transactionId); + + /** + * HTTP POST /payments/token/cit/charge creates a new CIT payment charge. + * @param req + * @return CreateMitOrCitPaymentResponse + * @see Paytrail Documentation - Create authorization hold or charge + */ + CreateMitOrCitPaymentResponse createCitPaymentCharge(CreateMitOrCitPaymentRequest req); + + + /** + * HTTP POST /payments/token/cit/authorization-hold creates a new CIT authorization hold. + * @param req + * @return CreateMitOrCitPaymentResponse + * @see Paytrail Documentation - Create CIT authorization hold + */ + CreateMitOrCitPaymentResponse createCitPaymentAuthorizationHold(CreateMitOrCitPaymentRequest req); + + /** + * HTTP POST /payments/{transactionId}/token/commit commits a CIT payment. + * @param req + * @param transactionId + * @return CreateMitOrCitPaymentResponse + * @see Paytrail Documentation - Create CIT payment commit + */ + CreateMitOrCitPaymentResponse createCitPaymentCommit(CreateMitOrCitPaymentRequest req, String transactionId); + + /** + * HTTP POST /tokenization/pay-and-add-card pay and add card. + * @param req + * @return + */ + PayAddCardResponse payAndAddCard(PayAddCardRequest req); } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java index 46691dd..0127d9a 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java @@ -2,16 +2,9 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import io.paytrailpayment.dto.request.CreatePaymentRequest; -import io.paytrailpayment.dto.request.CreateRefundRequest; -import io.paytrailpayment.dto.request.ValidationResult; -import io.paytrailpayment.dto.response.CreatePaymentResponse; -import io.paytrailpayment.dto.response.CreateRefundResponse; -import io.paytrailpayment.dto.response.GetPaymentResponse; -import io.paytrailpayment.dto.response.data.CreateRefundData; -import io.paytrailpayment.dto.response.data.DataResponse; -import io.paytrailpayment.dto.response.data.CreatePaymentData; -import io.paytrailpayment.dto.response.data.GetPaymentData; +import io.paytrailpayment.dto.request.*; +import io.paytrailpayment.dto.response.*; +import io.paytrailpayment.dto.response.data.*; import io.paytrailpayment.exception.PaytrailClientException; import io.paytrailpayment.exception.PaytrailCommunicationException; import io.paytrailpayment.utilites.Constants; @@ -22,8 +15,6 @@ import java.util.HashMap; import java.util.Map; -import static io.paytrailpayment.utilites.Constants.GET_METHOD; - @NoArgsConstructor @Getter @Setter @@ -171,6 +162,319 @@ private CreateRefundResponse executeCreateRefund(CreateRefundRequest req, String throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); } } + @Override + public AddCardFormResponse createAddCardFormRequest(AddCardFormRequest req) { + try { + ValidationResult validationResult = validateAddCardFormRequest(req); + if (!validationResult.isValid()) { + AddCardFormResponse response = new AddCardFormResponse(); + response.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + response.setReturnMessage(validationResult.getMessagesAsJson()); + return response; + } + return executeCreateAddCardForm(req); + } catch (PaytrailClientException | PaytrailCommunicationException e) { + return new AddCardFormResponse(e.getErrorCode(), e.getMessage(), null); + } + } + + private ValidationResult validateAddCardFormRequest(AddCardFormRequest req) { + if (req == null) { + Map error = new HashMap<>(); + error.put("error", ResponseMessage.BAD_REQUEST.getDescription()); + return new ValidationResult(false, error); + } + return req.validate(); + } + + private AddCardFormResponse executeCreateAddCardForm(AddCardFormRequest req) throws PaytrailCommunicationException, PaytrailClientException { + try { + ObjectMapper mapper = new ObjectMapper(); + String jsonRequest = mapper.writeValueAsString(req); + String targetURL = Constants.API_ENDPOINT + "/tokenization/addcard-form"; + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); + + if (data.getStatusCode() != ResponseMessage.CREATED.getCode()) { + return new AddCardFormResponse(data.getStatusCode(), data.getData(), null); + } else { + // Successfully created the add card form and parse the result + AddCardFormData dataMapper = mapper.readValue(data.getData(), AddCardFormData.class); + return new AddCardFormResponse(data.getStatusCode(), ResponseMessage.OK.getDescription(), dataMapper); + } + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } + + @Override + public CreateMitOrCitPaymentResponse createMitPaymentCharge(CreateMitOrCitPaymentRequest req) { + CreateMitOrCitPaymentResponse res = new CreateMitOrCitPaymentResponse(); + try { + ValidationResult validationResult = validateCreateMitOrCitPaymentRequest(req); + if (!validationResult.isValid()) { + res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + res.setReturnMessage(validationResult.getMessagesAsJson()); + return res; + } + return executeCreateMitPaymentCharge(req); + } catch (PaytrailClientException | PaytrailCommunicationException e) { + res.setReturnCode(ResponseMessage.EXCEPTION.getCode()); + res.setReturnMessage(e.getMessage()); + return res; + } + } + + private ValidationResult validateCreateMitOrCitPaymentRequest(CreateMitOrCitPaymentRequest req) { + if (req == null) { + Map error = new HashMap<>(); + error.put("error", ResponseMessage.BAD_REQUEST.getDescription()); + return new ValidationResult(false, error); + } + return req.validate(); + } + + private CreateMitOrCitPaymentResponse executeCreateMitPaymentCharge(CreateMitOrCitPaymentRequest req) throws PaytrailClientException, PaytrailCommunicationException { + try { + ObjectMapper mapper = new ObjectMapper(); + String jsonRequest = mapper.writeValueAsString(req); + String targetURL = Constants.API_ENDPOINT + "/payments/token/mit/charge"; + + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); + + if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + return new CreateMitOrCitPaymentResponse(data.getStatusCode(), data.getData(), null); + } else { + CreateMitPaymentChargeData dataMapper = mapper.readValue(data.getData(), CreateMitPaymentChargeData.class); + return new CreateMitOrCitPaymentResponse(ResponseMessage.OK.getCode(), ResponseMessage.OK.getDescription(), dataMapper); + } + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } + + public CreateMitOrCitPaymentResponse createMitPaymentAuthorizationHold(CreateMitOrCitPaymentRequest createMitPaymentAuthorizationHold) { + CreateMitOrCitPaymentResponse res = new CreateMitOrCitPaymentResponse(); + try { + // Validate create mit payment authorization hold + ValidationResult validationResult = validateCreateMitOrCitPaymentRequest(createMitPaymentAuthorizationHold); + if (!validationResult.isValid()) { + res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + res.setReturnMessage(validationResult.getMessagesAsJson()); + return res; + } + return executeCreateMitPaymentAuthorizationHold(createMitPaymentAuthorizationHold); + } catch (Exception ex) { + res.setReturnCode(ResponseMessage.EXCEPTION.getCode()); + res.setReturnMessage(ex.toString()); + return res; + } + } + private CreateMitOrCitPaymentResponse executeCreateMitPaymentAuthorizationHold(CreateMitOrCitPaymentRequest req) throws PaytrailCommunicationException, PaytrailClientException { + try { + ObjectMapper mapper = new ObjectMapper(); + String jsonRequest = mapper.writeValueAsString(req); + String targetURL = Constants.API_ENDPOINT + "/payments/token/mit/authorization-hold"; + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); + + if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + return new CreateMitOrCitPaymentResponse(data.getStatusCode(), data.getData(), null); + } else { + // Successfully created the MIT payment authorization hold and parse the result + CreateMitPaymentChargeData dataMapper = mapper.readValue(data.getData(), CreateMitPaymentChargeData.class); + return new CreateMitOrCitPaymentResponse(data.getStatusCode(), ResponseMessage.OK.getDescription(), dataMapper); + } + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } + + @Override + public CreateMitOrCitPaymentResponse createMitPaymentCommit(CreateMitOrCitPaymentRequest req, String transactionId) { + CreateMitOrCitPaymentResponse res = new CreateMitOrCitPaymentResponse(); + try { + ValidationResult validationResult = validateCreateMitOrCitPaymentRequest(req); + if (!validationResult.isValid()) { + res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + res.setReturnMessage(validationResult.getMessagesAsJson()); + return res; + } + + if (transactionId == null || transactionId.isEmpty()) { + res.setReturnCode(ResponseMessage.RESPONSE_NULL.getCode()); + res.setReturnMessage("transactionId cannot be null"); + return res; + } + + return executeCreateMitOrCitPaymentCommit(req, transactionId); + } catch (Exception ex) { + res.setReturnCode(ResponseMessage.EXCEPTION.getCode()); + res.setReturnMessage(ex.toString()); + return res; + } + } + + private CreateMitOrCitPaymentResponse executeCreateMitOrCitPaymentCommit(CreateMitOrCitPaymentRequest req, String transactionId) throws PaytrailCommunicationException, PaytrailClientException { + try { + ObjectMapper mapper = new ObjectMapper(); + String jsonRequest = mapper.writeValueAsString(req); + String targetURL = Constants.API_ENDPOINT + "/payments/" + transactionId + "token/mit/commit/"; + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, transactionId, null); + + if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + return new CreateMitOrCitPaymentResponse(data.getStatusCode(), data.getData(), null); + } else { + CreateMitPaymentChargeData dataMapper = mapper.readValue(data.getData(), CreateMitPaymentChargeData.class); + return new CreateMitOrCitPaymentResponse(ResponseMessage.OK.getCode(), ResponseMessage.OK.getDescription(), dataMapper); + } + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } + + @Override + public CreateMitOrCitPaymentResponse createCitPaymentCharge(CreateMitOrCitPaymentRequest req) { + CreateMitOrCitPaymentResponse res = new CreateMitOrCitPaymentResponse(); + try { + ValidationResult validationResult = validateCreateMitOrCitPaymentRequest(req); + if (!validationResult.isValid()) { + res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + res.setReturnMessage(validationResult.getMessagesAsJson()); + return res; + } + return executeCreateCitPaymentCharge(req); + } catch (PaytrailClientException | PaytrailCommunicationException e) { + res.setReturnCode(ResponseMessage.EXCEPTION.getCode()); + res.setReturnMessage(e.getMessage()); + return res; + } + } + + private CreateMitOrCitPaymentResponse executeCreateCitPaymentCharge(CreateMitOrCitPaymentRequest req) throws PaytrailClientException, PaytrailCommunicationException { + try { + ObjectMapper mapper = new ObjectMapper(); + String jsonRequest = mapper.writeValueAsString(req); + String targetURL = Constants.API_ENDPOINT + "/payments/token/cit/charge"; + + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); + + if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + return new CreateMitOrCitPaymentResponse(data.getStatusCode(), data.getData(), null); + } else { + CreateMitPaymentChargeData dataMapper = mapper.readValue(data.getData(), CreateMitPaymentChargeData.class); + return new CreateMitOrCitPaymentResponse(ResponseMessage.OK.getCode(), ResponseMessage.OK.getDescription(), dataMapper); + } + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } + + @Override + public CreateMitOrCitPaymentResponse createCitPaymentAuthorizationHold(CreateMitOrCitPaymentRequest req) { + CreateMitOrCitPaymentResponse res = new CreateMitOrCitPaymentResponse(); + try { + ValidationResult validationResult = validateCreateMitOrCitPaymentRequest(req); + if (!validationResult.isValid()) { + res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + res.setReturnMessage(validationResult.getMessagesAsJson()); + return res; + } + return executeCreateCitPaymentAuthorizationHold(req); + } catch (PaytrailClientException | PaytrailCommunicationException e) { + res.setReturnCode(ResponseMessage.EXCEPTION.getCode()); + res.setReturnMessage(e.getMessage()); + return res; + } + } + + private CreateMitOrCitPaymentResponse executeCreateCitPaymentAuthorizationHold(CreateMitOrCitPaymentRequest req) throws PaytrailClientException, PaytrailCommunicationException { + try { + ObjectMapper mapper = new ObjectMapper(); + String jsonRequest = mapper.writeValueAsString(req); + String targetURL = Constants.API_ENDPOINT + "/payments/token/cit/authorization-hold"; + + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); + + if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + return new CreateMitOrCitPaymentResponse(data.getStatusCode(), data.getData(), null); + } else { + CreateMitPaymentChargeData dataMapper = mapper.readValue(data.getData(), CreateMitPaymentChargeData.class); + return new CreateMitOrCitPaymentResponse(ResponseMessage.OK.getCode(), ResponseMessage.OK.getDescription(), dataMapper); + } + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } + + @Override + public CreateMitOrCitPaymentResponse createCitPaymentCommit(CreateMitOrCitPaymentRequest req, String transactionId) { + CreateMitOrCitPaymentResponse res = new CreateMitOrCitPaymentResponse(); + try { + ValidationResult validationResult = validateCreateMitOrCitPaymentRequest(req); + if (!validationResult.isValid()) { + res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + res.setReturnMessage(validationResult.getMessagesAsJson()); + return res; + } + + if (transactionId == null || transactionId.isEmpty()) { + res.setReturnCode(ResponseMessage.RESPONSE_NULL.getCode()); + res.setReturnMessage("transactionId cannot be null"); + return res; + } + + return executeCreateMitOrCitPaymentCommit(req, transactionId); + } catch (Exception ex) { + res.setReturnCode(ResponseMessage.EXCEPTION.getCode()); + res.setReturnMessage(ex.toString()); + return res; + } + } + + @Override + public PayAddCardResponse payAndAddCard(PayAddCardRequest req) { + PayAddCardResponse res = new PayAddCardResponse(); + try { + ValidationResult validationResult = validatePayAndAddCardRequest(req); + if (!validationResult.isValid()) { + res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + res.setReturnMessage(validationResult.getMessagesAsJson()); + return res; + } + return executePayAndAddCard(req); + } catch (Exception ex) { + res.setReturnCode(ResponseMessage.EXCEPTION.getCode()); + res.setReturnMessage(ex.toString()); + return res; + } + } + + private ValidationResult validatePayAndAddCardRequest(PayAddCardRequest req) { + if (req == null) { + Map error = new HashMap<>(); + error.put("error", ResponseMessage.BAD_REQUEST.getDescription()); + return new ValidationResult(false, error); + } + return req.validate(); + } + + private PayAddCardResponse executePayAndAddCard(PayAddCardRequest req) throws PaytrailClientException, PaytrailCommunicationException { + try { + ObjectMapper mapper = new ObjectMapper(); + String jsonRequest = mapper.writeValueAsString(req); + String targetURL = Constants.API_ENDPOINT + "/tokenization/pay-and-add-card"; + + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); + + if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + return new PayAddCardResponse(data.getStatusCode(), data.getData(), null); + } else { + PayAddCardData dataMapper = mapper.readValue(data.getData(), PayAddCardData.class); + return new PayAddCardResponse(ResponseMessage.OK.getCode(), ResponseMessage.OK.getDescription(), dataMapper); + } + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/AddCardFormRequest.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/AddCardFormRequest.java new file mode 100644 index 0000000..71e8b8d --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/AddCardFormRequest.java @@ -0,0 +1,84 @@ +package io.paytrailpayment.dto.request; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.util.Arrays; + +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_DEFAULT) +public class AddCardFormRequest extends Request { + @JsonProperty("checkout-account") + private Integer checkoutAccount; + + @JsonProperty("checkout-algorithm") + private String checkoutAlgorithm; + + @JsonProperty("checkout-method") + private String checkoutMethod; + + @JsonProperty("checkout-nonce") + private String checkoutNonce; + + @JsonProperty("checkout-timestamp") + private String checkoutTimestamp; + + @JsonProperty("checkout-redirect-success-url") + private String checkoutRedirectSuccessUrl; + + @JsonProperty("checkout-redirect-cancel-url") + private String checkoutRedirectCancelUrl; + + @JsonProperty("signature") + private String signature; + + @JsonProperty("checkout-callback-success-url") + private String checkoutCallbackSuccessUrl; + + @JsonProperty("checkout-callback-cancel-url") + private String checkoutCallbackCancelUrl; + + @JsonProperty("language") + private String language; + + @Override + protected void specificValidate() { + String[] supportedLanguages = {"FI", "SV", "EN"}; + String[] supportedMethods = {"GET", "POST"}; + + if (checkoutAccount == null) { + addValidationError("checkout-account", "checkout-account is empty."); + } + + if (checkoutAlgorithm == null || checkoutAlgorithm.isEmpty()) { + addValidationError("checkout-algorithm", "checkout-algorithm is empty."); + } + + if (!Arrays.asList(supportedMethods).contains(checkoutMethod)) { + addValidationError("checkout-method", "unsupported method chosen."); + } + + if (checkoutTimestamp == null || checkoutTimestamp.isEmpty()) { + addValidationError("checkout-timestamp", "checkout-timestamp is empty."); + } + + if (checkoutRedirectSuccessUrl == null || checkoutRedirectSuccessUrl.isEmpty()) { + addValidationError("checkout-redirect-success-url", "checkout-redirect success url is empty."); + } + + if (checkoutRedirectCancelUrl == null || checkoutRedirectCancelUrl.isEmpty()) { + addValidationError("checkout-redirect-cancel-url", "checkout-redirect cancel url is empty."); + } + + if (!Arrays.asList(supportedLanguages).contains(language)) { + addValidationError("language", "unsupported language chosen."); + } + } +} \ No newline at end of file diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreateMitOrCitPaymentRequest.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreateMitOrCitPaymentRequest.java new file mode 100644 index 0000000..53a0891 --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreateMitOrCitPaymentRequest.java @@ -0,0 +1,23 @@ +package io.paytrailpayment.dto.request; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CreateMitOrCitPaymentRequest extends CreatePaymentRequest { + private String token; + + @Override + protected void specificValidate() { + super.specificValidate(); + + if (token == null || token.isEmpty()) { + addValidationError("token", "token can't be null."); + } + } +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/PayAddCardRequest.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/PayAddCardRequest.java new file mode 100644 index 0000000..666deda --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/PayAddCardRequest.java @@ -0,0 +1,122 @@ +package io.paytrailpayment.dto.request; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.paytrailpayment.dto.request.model.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.util.EnumSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_DEFAULT) +public class PayAddCardRequest extends Request { + private String stamp; + private String reference; + private int amount; + private PaytrailCurrency currency; + private PaytrailLanguage language; + private String orderId; + private List items; + private Customer customer; + private Address deliveryAddress; + private Address invoicingAddress; + private boolean manualInvoiceActivation; + private CallbackUrl redirectUrls; + private CallbackUrl callbackUrls; + private int callbackDelay; + private List groups; + private boolean usePricesWithoutVat; + + @Override + protected void specificValidate() { + StringBuilder message = new StringBuilder(); + + if (stamp == null || stamp.isEmpty()) { + addValidationError("stamp", "Stamp can't be null or empty."); + } else if (stamp.length() > 200) { + addValidationError("stamp", "Stamp is more than 200 characters."); + } + + if (reference == null || reference.isEmpty()) { + addValidationError("reference", "Reference can't be null or empty."); + } else if (reference.length() > 200) { + addValidationError("reference", "Reference is more than 200 characters."); + } + + if (amount < 0) { + addValidationError("amount", "Amount can't be less than zero."); + } else if (amount > 99999999) { + addValidationError("amount", "Amount can't be more than 99999999."); + } + + if (customer == null) { + addValidationError("customer", "Customer can't be null."); + } else { + ValidationResult customerValidationResult = customer.validate(); + if (!customerValidationResult.isValid()) { + addValidationError("customer", customerValidationResult.getMessagesAsJson()); + } + } + + if (items != null) { + for (Item item : items) { + ValidationResult itemValidationResult = item.validate(); + if (!itemValidationResult.isValid()) { + addValidationError("item", itemValidationResult.getMessagesAsJson()); + break; + } + } + } + + if (deliveryAddress != null) { + ValidationResult deliveryAddressValidationResult = deliveryAddress.validate(); + if (!deliveryAddressValidationResult.isValid()) { + addValidationError("deliveryAddress", deliveryAddressValidationResult.getMessagesAsJson()); + } + } + + if (invoicingAddress != null) { + ValidationResult invoicingAddressValidationResult = invoicingAddress.validate(); + if (!invoicingAddressValidationResult.isValid()) { + addValidationError("invoicingAddress", invoicingAddressValidationResult.getMessagesAsJson()); + } + } + + if (redirectUrls == null) { + addValidationError("redirectUrls", "Object redirectUrls can't be null."); + } else { + ValidationResult redirectUrlsValidationResult = redirectUrls.validate(); + if (!redirectUrlsValidationResult.isValid()) { + addValidationError("redirectUrls", redirectUrlsValidationResult.getMessagesAsJson()); + } + } + + if (callbackUrls == null) { + addValidationError("callbackUrls", "Object callbackUrls can't be null."); + } else { + ValidationResult callbackUrlsValidationResult = callbackUrls.validate(); + if (!callbackUrlsValidationResult.isValid()) { + addValidationError("callbackUrls", callbackUrlsValidationResult.getMessagesAsJson()); + } + } + + if (groups != null) { + Set allowedGroups = EnumSet.allOf(PaytrailPaymentMethodGroup.class).stream() + .map(Enum::toString) + .collect(Collectors.toSet()); + for (String group : groups) { + if (!allowedGroups.contains(group)) { + addValidationError("groups", "Value '" + group + "' is not in the list of allowed payment methods."); + } + } + } + } +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Item.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Item.java index 91a4f4c..c1195d5 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Item.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Item.java @@ -44,10 +44,10 @@ public class Item extends Request { */ private String category; - /** - * Item level order ID (suborder ID). Mainly useful for Shop-in-Shop purchases. - */ - private String orderId; +// /** +// * Item level order ID (suborder ID). Mainly useful for Shop-in-Shop purchases. +// */ +// private String orderId; /** * Unique identifier for this item. Required for Shop-in-Shop payments. Required for item refunds. @@ -59,15 +59,15 @@ public class Item extends Request { */ private String reference; - /** - * Merchant ID for the item. Required for Shop-in-Shop payments, do not use for normal payments. - */ - private String merchant; - - /** - * Shop-in-Shop commission. Do not use for normal payments. - */ - private Commission commission; +// /** +// * Merchant ID for the item. Required for Shop-in-Shop payments, do not use for normal payments. +// */ +// private String merchant; +// +// /** +// * Shop-in-Shop commission. Do not use for normal payments. +// */ +// private Commission commission; @Override() protected void specificValidate() { @@ -104,5 +104,13 @@ protected void specificValidate() { } } + public Item(int unitPrice, int units, int vatPercentage, String productCode, String category, String description) { + this.unitPrice = unitPrice; + this.units = units; + this.vatPercentage = vatPercentage; + this.productCode = productCode; + this.category = category; + this.description = description; + } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailPaymentMethodGroup.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailPaymentMethodGroup.java index b707f00..ca68070 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailPaymentMethodGroup.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailPaymentMethodGroup.java @@ -1,8 +1,8 @@ package io.paytrailpayment.dto.request.model; public enum PaytrailPaymentMethodGroup { - mobile, - bank, - creditcard, - credit + MOBILE, + BANK, + CREDIT_CARD, + CREDIT } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/ShopInShopItem.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/ShopInShopItem.java new file mode 100644 index 0000000..e66e36b --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/ShopInShopItem.java @@ -0,0 +1,69 @@ +package io.paytrailpayment.dto.request.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.paytrailpayment.dto.request.ValidationResult; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_DEFAULT) +public class ShopInShopItem extends Item { + /** + * Item level order ID (suborder ID). Mainly useful for Shop-in-Shop purchases. + */ + private String orderId; + + /** + * Merchant ID for the item. Required for Shop-in-Shop payments, do not use for normal payments. + */ + private String merchant; + + /** + * Shop-in-Shop commission. Do not use for normal payments. + */ + private Commission commission; + + public ShopInShopItem(int unitPrice, int units, int vatPercentage, String productCode, String category, String description, String stamp, String reference, String orderId, String merchant, Commission commission) { + super(unitPrice, units, vatPercentage, productCode, description, category, stamp, reference); + this.orderId = orderId; + this.merchant = merchant; + this.commission = commission; + } + + public ShopInShopItem(int unitPrice, int units, int vatPercentage, String productCode, String category, String description, String stamp, String reference) { + super(unitPrice, units, vatPercentage, productCode, description, category, stamp, reference); + } + + public ShopInShopItem(int unitPrice, int units, int vatPercentage, String productCode, String category, + String description, String merchant, String stamp, String reference, String orderId) { + super(unitPrice, units, vatPercentage, productCode, description, category, stamp, reference); + this.merchant = merchant; + this.orderId = orderId; + } + + @Override + protected void specificValidate() { + super.specificValidate(); + + if (orderId == null) { + addValidationError("orderId", "Item's orderId can't be null."); + } + + + if (merchant == null || merchant.isEmpty()) { + addValidationError("merchant", "Item's merchant can't be null or empty."); + } + + if (commission != null) { + ValidationResult commissionValidationResult = commission.validate(); + if (!commissionValidationResult.isValid()) { + addValidationError("commission", commissionValidationResult.getMessagesAsJson()); + } + } + } +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/AddCardFormResponse.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/AddCardFormResponse.java new file mode 100644 index 0000000..49eda6c --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/AddCardFormResponse.java @@ -0,0 +1,18 @@ +package io.paytrailpayment.dto.response; + +import io.paytrailpayment.dto.response.data.AddCardFormData; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AddCardFormResponse extends Response { + private AddCardFormData data; + + public AddCardFormResponse(int statusCode, String description, AddCardFormData dataMapper) { + super(statusCode, description); + this.data = dataMapper; + } +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/CreateMitOrCitPaymentResponse.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/CreateMitOrCitPaymentResponse.java new file mode 100644 index 0000000..49d7f3b --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/CreateMitOrCitPaymentResponse.java @@ -0,0 +1,20 @@ +package io.paytrailpayment.dto.response; + +import io.paytrailpayment.dto.response.data.CreateMitPaymentChargeData; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CreateMitOrCitPaymentResponse extends Response { + private CreateMitPaymentChargeData data; + + public CreateMitOrCitPaymentResponse(int statusCode, String description, CreateMitPaymentChargeData dataMapper) { + super(statusCode, description); + this.data = dataMapper; + } +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/PayAddCardResponse.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/PayAddCardResponse.java new file mode 100644 index 0000000..d1c2735 --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/PayAddCardResponse.java @@ -0,0 +1,20 @@ +package io.paytrailpayment.dto.response; + +import io.paytrailpayment.dto.response.data.PayAddCardData; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PayAddCardResponse extends Response { + private PayAddCardData data; + + public PayAddCardResponse(int returnCode, String returnMessage, PayAddCardData data) { + super(returnCode, returnMessage); + this.data = data; + } +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/AddCardFormData.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/AddCardFormData.java new file mode 100644 index 0000000..5fe68e6 --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/AddCardFormData.java @@ -0,0 +1,12 @@ +package io.paytrailpayment.dto.response.data; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AddCardFormData { + private String content; +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/CreateMitPaymentChargeData.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/CreateMitPaymentChargeData.java new file mode 100644 index 0000000..d679a93 --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/CreateMitPaymentChargeData.java @@ -0,0 +1,13 @@ +package io.paytrailpayment.dto.response.data; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CreateMitPaymentChargeData { + private String transactionId; + private String threeDSecureUrl; +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/PayAddCardData.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/PayAddCardData.java new file mode 100644 index 0000000..214d7c3 --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/PayAddCardData.java @@ -0,0 +1,13 @@ +package io.paytrailpayment.dto.response.data; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PayAddCardData { + private String transactionId; + private String redirectUrl; +} diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java new file mode 100644 index 0000000..7e3fd58 --- /dev/null +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java @@ -0,0 +1,72 @@ +package io.paytrailpayment; + +import io.paytrailpayment.dto.request.AddCardFormRequest; +import io.paytrailpayment.dto.response.AddCardFormResponse; +import io.paytrailpayment.utilites.ResponseMessage; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class CreateAddCardFormRequestTests extends TestCase { + private static final String MERCHANTIDSIS = "695861"; + private static final String SECRETKEYSIS = "MONISAIPPUAKAUPPIAS"; + private PaytrailClient payTrail; + + @Before + public void setUp() { + payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + } + + @Test + public void createAddCardFormRequest_RequestNull_ReturnCode400() { + // Arrange + int expected = ResponseMessage.BAD_REQUEST.getCode(); + + // Act + AddCardFormRequest request = null; + AddCardFormResponse res = payTrail.createAddCardFormRequest(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createAddCardFormRequest_ValidateFalse_ReturnCode403() { + // Arrange + int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + + // Act + AddCardFormRequest request = new AddCardFormRequest(); + AddCardFormResponse res = payTrail.createAddCardFormRequest(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createAddCardFormRequest_Success_ReturnCode200() { + // Arrange + int expected = ResponseMessage.OK.getCode(); + + // Act + AddCardFormRequest request = new AddCardFormRequest(); + request.setCheckoutAccount(375917); + request.setCheckoutAlgorithm("sha256"); + request.setCheckoutMethod("POST"); + request.setCheckoutNonce("6501220b16b7"); + request.setCheckoutTimestamp("2023-08-22T04:05:20.253Z"); + request.setCheckoutRedirectSuccessUrl("https://somedomain.com/success"); + request.setCheckoutRedirectCancelUrl("https://somedomain.com/cancel"); + request.setSignature("542e780c253761ed64333d5485391ddd4f55d5e00b7bdc7f60f0f0d15516f889"); + request.setLanguage("EN"); + + AddCardFormResponse res = payTrail.createAddCardFormRequest(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } +} diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java new file mode 100644 index 0000000..289f29b --- /dev/null +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java @@ -0,0 +1,139 @@ +package io.paytrailpayment; + +import io.paytrailpayment.dto.request.*; +import io.paytrailpayment.dto.request.model.*; +import io.paytrailpayment.dto.response.CreateMitOrCitPaymentResponse; +import io.paytrailpayment.utilites.ResponseMessage; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CreateCitPaymentAuthorizationHoldTests { + private static final String MERCHANTIDN = "375917"; + private static final String MERCHANTIDSIS = "695861"; + private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + + @Test + public void createCitPaymentAuthorizationHold_RequestNull_ReturnCode400() { + // Arrange + int expected = ResponseMessage.RESPONSE_NULL.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = null; + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentAuthorizationHold(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createCitPaymentAuthorizationHold_ValidateFalse_ReturnCode403() { + // Arrange + int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = new CreateMitOrCitPaymentRequest(); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createCitPaymentAuthorizationHold_Success_ReturnCode200() { + // Arrange + int expected = ResponseMessage.OK.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createCitPaymentAuthorizationHold_CallPaytrailReturnFail_ReturnCode500() { + // Arrange + int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + private CreateMitOrCitPaymentRequest createValidPayload() { + CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); + payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); + payload.setStamp(UUID.randomUUID().toString()); + payload.setReference("9187445"); + payload.setAmount(1590); + payload.setCurrency(PaytrailCurrency.EUR); + payload.setLanguage(PaytrailLanguage.FI); + payload.setOrderId(""); + + ShopInShopItem item = new ShopInShopItem(); + item.setUnitPrice(1590); + item.setUnits(1); + item.setVatPercentage(24); + item.setProductCode("#927502759"); + item.setCategory("Pet supplies"); + item.setDescription("Cat ladder"); + item.setStamp(UUID.randomUUID().toString()); + item.setReference("9187445"); + payload.setItems(Arrays.asList(item)); + + Customer customer = new Customer(); + customer.setEmail("erja.esimerkki@example.org"); + customer.setFirstName("Erja"); + customer.setVatId("FI12345671"); + customer.setCompanyName("nothing"); + customer.setLastName("+358501234567"); + customer.setPhone("123"); + payload.setCustomer(customer); + + CallbackUrl redirectUrls = new CallbackUrl(); + redirectUrls.setSuccess("https://ecom.example.org/success"); + redirectUrls.setCancel("https://ecom.example.org/cancel"); + payload.setRedirectUrls(redirectUrls); + + CallbackUrl callbackUrls = new CallbackUrl(); + callbackUrls.setSuccess("https://ecom.example.org/success"); + callbackUrls.setCancel("https://ecom.example.org/cancel"); + payload.setCallbackUrls(callbackUrls); + + Address deliveryAddress = new Address(); + deliveryAddress.setCity("Tampere"); + deliveryAddress.setCountry("FI"); + deliveryAddress.setCounty("Pirkanmaa"); + deliveryAddress.setPostalCode("33100"); + deliveryAddress.setStreetAddress("Hämeenkatu 6 B"); + payload.setDeliveryAddress(deliveryAddress); + + Address invoicingAddress = new Address(); + invoicingAddress.setCity("Helsinki"); + invoicingAddress.setCountry("FI"); + invoicingAddress.setCounty("Uusimaa"); + invoicingAddress.setPostalCode("00510"); + invoicingAddress.setStreetAddress("Testikatu 1"); + payload.setInvoicingAddress(invoicingAddress); + + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + return payload; + } +} diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java new file mode 100644 index 0000000..fd16855 --- /dev/null +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java @@ -0,0 +1,139 @@ +package io.paytrailpayment; + +import io.paytrailpayment.dto.request.*; +import io.paytrailpayment.dto.request.model.*; +import io.paytrailpayment.dto.response.CreateMitOrCitPaymentResponse; +import io.paytrailpayment.utilites.ResponseMessage; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CreateCitPaymentChargeTests { + private static final String MERCHANTIDN = "375917"; + private static final String MERCHANTIDSIS = "695861"; + private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + + @Test + public void createCitPaymentCharge_RequestNull_ReturnCode400() { + // Arrange + int expected = ResponseMessage.RESPONSE_NULL.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = null; + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createCitPaymentCharge_ValidateFalse_ReturnCode403() { + // Arrange + int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = new CreateMitOrCitPaymentRequest(); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createCitPaymentCharge_Success_ReturnCode200() { + // Arrange + int expected = ResponseMessage.OK.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createCitPaymentCharge_CallPaytrailReturnFail_ReturnCode500() { + // Arrange + int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + private CreateMitOrCitPaymentRequest createValidPayload() { + CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); + payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); + payload.setStamp(UUID.randomUUID().toString()); + payload.setReference("9187445"); + payload.setAmount(1590); + payload.setCurrency(PaytrailCurrency.EUR); + payload.setLanguage(PaytrailLanguage.FI); + payload.setOrderId(""); + + ShopInShopItem item = new ShopInShopItem(); + item.setUnitPrice(1590); + item.setUnits(1); + item.setVatPercentage(24); + item.setProductCode("#927502759"); + item.setCategory("Pet supplies"); + item.setDescription("Cat ladder"); + item.setStamp(UUID.randomUUID().toString()); + item.setReference("9187445"); + payload.setItems(Arrays.asList(item)); + + Customer customer = new Customer(); + customer.setEmail("erja.esimerkki@example.org"); + customer.setFirstName("Erja"); + customer.setVatId("FI12345671"); + customer.setCompanyName("nothing"); + customer.setLastName("+358501234567"); + customer.setPhone("123"); + payload.setCustomer(customer); + + CallbackUrl redirectUrls = new CallbackUrl(); + redirectUrls.setSuccess("https://ecom.example.org/success"); + redirectUrls.setCancel("https://ecom.example.org/cancel"); + payload.setRedirectUrls(redirectUrls); + + CallbackUrl callbackUrls = new CallbackUrl(); + callbackUrls.setSuccess("https://ecom.example.org/success"); + callbackUrls.setCancel("https://ecom.example.org/cancel"); + payload.setCallbackUrls(callbackUrls); + + Address deliveryAddress = new Address(); + deliveryAddress.setCity("Tampere"); + deliveryAddress.setCountry("FI"); + deliveryAddress.setCounty("Pirkanmaa"); + deliveryAddress.setPostalCode("33100"); + deliveryAddress.setStreetAddress("Hämeenkatu 6 B"); + payload.setDeliveryAddress(deliveryAddress); + + Address invoicingAddress = new Address(); + invoicingAddress.setCity("Helsinki"); + invoicingAddress.setCountry("FI"); + invoicingAddress.setCounty("Uusimaa"); + invoicingAddress.setPostalCode("00510"); + invoicingAddress.setStreetAddress("Testikatu 1"); + payload.setInvoicingAddress(invoicingAddress); + + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + return payload; + } +} diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java new file mode 100644 index 0000000..3d5a235 --- /dev/null +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java @@ -0,0 +1,115 @@ +package io.paytrailpayment; + +import io.paytrailpayment.dto.request.CreateMitOrCitPaymentRequest; +import io.paytrailpayment.dto.request.model.*; +import io.paytrailpayment.dto.response.CreateMitOrCitPaymentResponse; +import io.paytrailpayment.utilites.ResponseMessage; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.UUID; + +public class CreateCitPaymentCommitTests { + private static final String MERCHANTIDN = "375917"; + private static final String MERCHANTIDSIS = "695861"; + private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + + @Test + public void requestNullReturnCode400() { + // Arrange + int expected = ResponseMessage.BAD_REQUEST.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = null; + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCommit(request, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void validateFalseReturnCode403() { + // Arrange + int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = new CreateMitOrCitPaymentRequest(); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCommit(request, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void successReturnCode200() { + // Arrange + int expected = ResponseMessage.OK.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); + payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); + payload.setStamp(UUID.randomUUID().toString()); + payload.setReference("9187445"); + payload.setAmount(1590); + payload.setCurrency(PaytrailCurrency.EUR); + payload.setLanguage(PaytrailLanguage.FI); + payload.setOrderId(""); + payload.setItems(Arrays.asList(new ShopInShopItem( + 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder", + UUID.randomUUID().toString(), "9187445"))); + payload.setCustomer(new Customer( + "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", + "+358501234567", "123")); + payload.setRedirectUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + payload.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + payload.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); + payload.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCommit(payload, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void callPaytrailReturnFailReturnCode500() { + // Arrange + int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); + payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); + payload.setStamp(UUID.randomUUID().toString()); + payload.setReference("9187445"); + payload.setAmount(1590); + payload.setCurrency(PaytrailCurrency.EUR); + payload.setLanguage(PaytrailLanguage.FI); + payload.setOrderId(""); + payload.setItems(Arrays.asList(new ShopInShopItem( + 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder", + UUID.randomUUID().toString(), "9187445"))); + payload.setCustomer(new Customer( + "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", + "+358501234567", "123")); + payload.setRedirectUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + payload.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + payload.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); + payload.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCommit(payload, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } +} diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java new file mode 100644 index 0000000..5bf830e --- /dev/null +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java @@ -0,0 +1,139 @@ +package io.paytrailpayment; + +import io.paytrailpayment.dto.request.*; +import io.paytrailpayment.dto.request.model.*; +import io.paytrailpayment.dto.response.CreateMitOrCitPaymentResponse; +import io.paytrailpayment.utilites.ResponseMessage; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CreateMitPaymentAuthorizationHoldTests { + private static final String MERCHANTIDN = "375917"; + private static final String MERCHANTIDSIS = "695861"; + private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + + @Test + public void createMitPaymentAuthorizationHoldRequestNullReturnCode400() { + // Arrange + int expected = ResponseMessage.RESPONSE_NULL.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = null; + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentAuthorizationHold(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentAuthorizationHoldValidateFalseReturnCode403() { + // Arrange + int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = new CreateMitOrCitPaymentRequest(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentAuthorizationHold(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentAuthorizationHoldSuccessReturnCode200() { + // Arrange + int expected = ResponseMessage.OK.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentAuthorizationHold(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentAuthorizationHoldCallPaytrailReturnFailReturnCode500() { + // Arrange + int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentAuthorizationHold(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + private CreateMitOrCitPaymentRequest createValidPayload() { + CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); + payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); + payload.setStamp(UUID.randomUUID().toString()); + payload.setReference("9187445"); + payload.setAmount(1590); + payload.setCurrency(PaytrailCurrency.EUR); + payload.setLanguage(PaytrailLanguage.FI); + payload.setOrderId(""); + + ShopInShopItem item = new ShopInShopItem(); + item.setUnitPrice(1590); + item.setUnits(1); + item.setVatPercentage(24); + item.setProductCode("#927502759"); + item.setCategory("Pet supplies"); + item.setDescription("Cat ladder"); + item.setStamp(UUID.randomUUID().toString()); + item.setReference("9187445"); + payload.setItems(Arrays.asList(item)); + + Customer customer = new Customer(); + customer.setEmail("erja.esimerkki@example.org"); + customer.setFirstName("Erja"); + customer.setVatId("FI12345671"); + customer.setCompanyName("nothing"); + customer.setLastName("+358501234567"); + customer.setPhone("123"); + payload.setCustomer(customer); + + CallbackUrl redirectUrls = new CallbackUrl(); + redirectUrls.setSuccess("https://ecom.example.org/success"); + redirectUrls.setCancel("https://ecom.example.org/cancel"); + payload.setRedirectUrls(redirectUrls); + + CallbackUrl callbackUrls = new CallbackUrl(); + callbackUrls.setSuccess("https://ecom.example.org/success"); + callbackUrls.setCancel("https://ecom.example.org/cancel"); + payload.setCallbackUrls(callbackUrls); + + Address deliveryAddress = new Address(); + deliveryAddress.setCity("Tampere"); + deliveryAddress.setCountry("FI"); + deliveryAddress.setCounty("Pirkanmaa"); + deliveryAddress.setPostalCode("33100"); + deliveryAddress.setStreetAddress("Hämeenkatu 6 B"); + payload.setDeliveryAddress(deliveryAddress); + + Address invoicingAddress = new Address(); + invoicingAddress.setCity("Helsinki"); + invoicingAddress.setCountry("FI"); + invoicingAddress.setCounty("Uusimaa"); + invoicingAddress.setPostalCode("00510"); + invoicingAddress.setStreetAddress("Testikatu 1"); + payload.setInvoicingAddress(invoicingAddress); + + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + return payload; + } +} diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java new file mode 100644 index 0000000..47cbbec --- /dev/null +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java @@ -0,0 +1,139 @@ +package io.paytrailpayment; + +import io.paytrailpayment.dto.request.*; +import io.paytrailpayment.dto.request.model.*; +import io.paytrailpayment.dto.response.CreateMitOrCitPaymentResponse; +import io.paytrailpayment.utilites.ResponseMessage; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CreateMitPaymentChargeTests { + private static final String MERCHANTIDN = "375917"; + private static final String MERCHANTIDSIS = "695861"; + private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + + @Test + public void createMitPaymentCharge_RequestNull_ReturnCode400() { + // Arrange + int expected = ResponseMessage.RESPONSE_NULL.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = null; + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCharge(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentCharge_ValidateFalse_ReturnCode403() { + // Arrange + int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = new CreateMitOrCitPaymentRequest(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCharge(request); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentCharge_Success_ReturnCode200() { + // Arrange + int expected = ResponseMessage.OK.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCharge(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentCharge_CallPaytrailReturnFail_ReturnCode500() { + // Arrange + int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCharge(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + private CreateMitOrCitPaymentRequest createValidPayload() { + CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); + payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); + payload.setStamp(UUID.randomUUID().toString()); + payload.setReference("9187445"); + payload.setAmount(1590); + payload.setCurrency(PaytrailCurrency.EUR); + payload.setLanguage(PaytrailLanguage.FI); + payload.setOrderId(""); + + ShopInShopItem item = new ShopInShopItem(); + item.setUnitPrice(1590); + item.setUnits(1); + item.setVatPercentage(24); + item.setProductCode("#927502759"); + item.setCategory("Pet supplies"); + item.setDescription("Cat ladder"); + item.setStamp(UUID.randomUUID().toString()); + item.setReference("9187445"); + payload.setItems(Arrays.asList(item)); + + Customer customer = new Customer(); + customer.setEmail("erja.esimerkki@example.org"); + customer.setFirstName("Erja"); + customer.setVatId("FI12345671"); + customer.setCompanyName("nothing"); + customer.setLastName("+358501234567"); + customer.setPhone("123"); + payload.setCustomer(customer); + + CallbackUrl redirectUrls = new CallbackUrl(); + redirectUrls.setSuccess("https://ecom.example.org/success"); + redirectUrls.setCancel("https://ecom.example.org/cancel"); + payload.setRedirectUrls(redirectUrls); + + CallbackUrl callbackUrls = new CallbackUrl(); + callbackUrls.setSuccess("https://ecom.example.org/success"); + callbackUrls.setCancel("https://ecom.example.org/cancel"); + payload.setCallbackUrls(callbackUrls); + + Address deliveryAddress = new Address(); + deliveryAddress.setCity("Tampere"); + deliveryAddress.setCountry("FI"); + deliveryAddress.setCounty("Pirkanmaa"); + deliveryAddress.setPostalCode("33100"); + deliveryAddress.setStreetAddress("Hämeenkatu 6 B"); + payload.setDeliveryAddress(deliveryAddress); + + Address invoicingAddress = new Address(); + invoicingAddress.setCity("Helsinki"); + invoicingAddress.setCountry("FI"); + invoicingAddress.setCounty("Uusimaa"); + invoicingAddress.setPostalCode("00510"); + invoicingAddress.setStreetAddress("Testikatu 1"); + payload.setInvoicingAddress(invoicingAddress); + + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + return payload; + } +} diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java new file mode 100644 index 0000000..a606159 --- /dev/null +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java @@ -0,0 +1,139 @@ +package io.paytrailpayment; + +import io.paytrailpayment.dto.request.*; +import io.paytrailpayment.dto.request.model.*; +import io.paytrailpayment.dto.response.CreateMitOrCitPaymentResponse; +import io.paytrailpayment.utilites.ResponseMessage; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CreateMitPaymentCommitTests { + private static final String MERCHANTIDN = "375917"; + private static final String MERCHANTIDSIS = "695861"; + private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + + @Test + public void createMitPaymentCommit_RequestNull_ReturnCode400() { + // Arrange + int expected = ResponseMessage.RESPONSE_NULL.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = null; + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCommit(request, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentCommit_ValidateFalse_ReturnCode403() { + // Arrange + int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest request = new CreateMitOrCitPaymentRequest(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCommit(request, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentCommit_Success_ReturnCode200() { + // Arrange + int expected = ResponseMessage.OK.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCommit(payload, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createMitPaymentCommit_CallPaytrailReturnFail_ReturnCode500() { + // Arrange + int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCommit(payload, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + private CreateMitOrCitPaymentRequest createValidPayload() { + CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); + payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); + payload.setStamp(UUID.randomUUID().toString()); + payload.setReference("9187445"); + payload.setAmount(1590); + payload.setCurrency(PaytrailCurrency.EUR); + payload.setLanguage(PaytrailLanguage.FI); + payload.setOrderId(""); + + ShopInShopItem item = new ShopInShopItem(); + item.setUnitPrice(1590); + item.setUnits(1); + item.setVatPercentage(24); + item.setProductCode("#927502759"); + item.setCategory("Pet supplies"); + item.setDescription("Cat ladder"); + item.setStamp(UUID.randomUUID().toString()); + item.setReference("9187445"); + payload.setItems(Arrays.asList(item)); + + Customer customer = new Customer(); + customer.setEmail("erja.esimerkki@example.org"); + customer.setFirstName("Erja"); + customer.setVatId("FI12345671"); + customer.setCompanyName("nothing"); + customer.setLastName("+358501234567"); + customer.setPhone("123"); + payload.setCustomer(customer); + + CallbackUrl redirectUrls = new CallbackUrl(); + redirectUrls.setSuccess("https://ecom.example.org/success"); + redirectUrls.setCancel("https://ecom.example.org/cancel"); + payload.setRedirectUrls(redirectUrls); + + CallbackUrl callbackUrls = new CallbackUrl(); + callbackUrls.setSuccess("https://ecom.example.org/success"); + callbackUrls.setCancel("https://ecom.example.org/cancel"); + payload.setCallbackUrls(callbackUrls); + + Address deliveryAddress = new Address(); + deliveryAddress.setCity("Tampere"); + deliveryAddress.setCountry("FI"); + deliveryAddress.setCounty("Pirkanmaa"); + deliveryAddress.setPostalCode("33100"); + deliveryAddress.setStreetAddress("Hämeenkatu 6 B"); + payload.setDeliveryAddress(deliveryAddress); + + Address invoicingAddress = new Address(); + invoicingAddress.setCity("Helsinki"); + invoicingAddress.setCountry("FI"); + invoicingAddress.setCounty("Uusimaa"); + invoicingAddress.setPostalCode("00510"); + invoicingAddress.setStreetAddress("Testikatu 1"); + payload.setInvoicingAddress(invoicingAddress); + + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + return payload; + } +} diff --git a/paytrailpayment-sdk/src/test/java/CreatePaymentUnitTest.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java similarity index 100% rename from paytrailpayment-sdk/src/test/java/CreatePaymentUnitTest.java rename to paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java diff --git a/paytrailpayment-sdk/src/test/java/CreateRefundRequestUnitTest.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java similarity index 99% rename from paytrailpayment-sdk/src/test/java/CreateRefundRequestUnitTest.java rename to paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java index 8da1a79..dc6236e 100644 --- a/paytrailpayment-sdk/src/test/java/CreateRefundRequestUnitTest.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java @@ -1,4 +1,5 @@ -import io.paytrailpayment.PaytrailClient; +package io.paytrailpayment; + import io.paytrailpayment.dto.request.CreatePaymentRequest; import io.paytrailpayment.dto.request.CreateRefundRequest; import io.paytrailpayment.dto.request.model.*; diff --git a/paytrailpayment-sdk/src/test/java/GetPaymentUnitTest.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/GetPaymentUnitTest.java similarity index 98% rename from paytrailpayment-sdk/src/test/java/GetPaymentUnitTest.java rename to paytrailpayment-sdk/src/test/java/io/paytrailpayment/GetPaymentUnitTest.java index a890216..06d1439 100644 --- a/paytrailpayment-sdk/src/test/java/GetPaymentUnitTest.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/GetPaymentUnitTest.java @@ -1,4 +1,5 @@ -import io.paytrailpayment.PaytrailClient; +package io.paytrailpayment; + import io.paytrailpayment.dto.request.CreatePaymentRequest; import io.paytrailpayment.dto.request.model.*; import io.paytrailpayment.dto.response.CreatePaymentResponse; diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java new file mode 100644 index 0000000..6ffc221 --- /dev/null +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java @@ -0,0 +1,176 @@ +package io.paytrailpayment; + +import io.paytrailpayment.dto.request.PayAddCardRequest; +import io.paytrailpayment.dto.request.model.*; +import io.paytrailpayment.dto.response.PayAddCardResponse; +import io.paytrailpayment.utilites.ResponseMessage; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.UUID; + +public class PayAndAddCardTests { + private static final String MERCHANTIDN = "375917"; + private static final String SECRETKEYN = "SAIPPUAKAUPPIAS"; + private static final String MERCHANTIDSISS = "695874"; + + @Test + public void requestNullReturnCode400() { + // Arrange + int expected = ResponseMessage.BAD_REQUEST.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PayAddCardRequest request = null; + PayAddCardResponse res = payTrail.payAndAddCard(request); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void validateFalseReturnCode403() { + // Arrange + int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PayAddCardRequest request = new PayAddCardRequest(); + PayAddCardResponse res = payTrail.payAndAddCard(request); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void successReturnCode200() { + // Arrange + int expected = ResponseMessage.OK.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PayAddCardRequest request = new PayAddCardRequest(); + request.setStamp(UUID.randomUUID().toString()); + request.setReference("9187445"); + request.setAmount(1590); + request.setCurrency(PaytrailCurrency.EUR); + request.setLanguage(PaytrailLanguage.FI); + request.setOrderId(""); + request.setItems(Arrays.asList(new Item( + 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder"))); + request.setCustomer(new Customer( + "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", + "+358501234567", "123")); + request.setRedirectUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + request.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + request.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); + request.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); + request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + PayAddCardResponse res = payTrail.payAndAddCard(request); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void callPaytrailReturnNullReturnCode404() { + // Arrange + int expected = ResponseMessage.RESPONSE_NULL.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PayAddCardRequest request = new PayAddCardRequest(); + request.setStamp(UUID.randomUUID().toString()); + request.setReference("9187445"); + request.setAmount(1590); + request.setCurrency(PaytrailCurrency.EUR); + request.setLanguage(PaytrailLanguage.FI); + request.setOrderId(""); + request.setItems(Arrays.asList(new Item( + 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder"))); + request.setCustomer(new Customer( + "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", + "+358501234567", "123")); + request.setRedirectUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + request.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + request.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); + request.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); + request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + PayAddCardResponse res = payTrail.payAndAddCard(request); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void callPaytrailReturnFailReturnCode500() { + // Arrange + int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PayAddCardRequest request = new PayAddCardRequest(); + request.setStamp(UUID.randomUUID().toString()); + request.setReference("9187445"); + request.setAmount(1590); + request.setCurrency(PaytrailCurrency.EUR); + request.setLanguage(PaytrailLanguage.FI); + request.setOrderId(""); + request.setItems(Arrays.asList(new ShopInShopItem( + 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder", + MERCHANTIDSISS, UUID.randomUUID().toString(), "", ""))); + request.setCustomer(new Customer( + "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", + "+358501234567", "123")); + request.setRedirectUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + request.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + request.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); + request.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); + request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + PayAddCardResponse res = payTrail.payAndAddCard(request); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void callPayExceptionReturnCode503() { + // Arrange + int expected = ResponseMessage.EXCEPTION.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PayAddCardRequest request = new PayAddCardRequest(); + request.setStamp("1222"); + request.setReference("9187445"); + request.setAmount(1590); + request.setCurrency(PaytrailCurrency.EUR); + request.setLanguage(PaytrailLanguage.FI); + request.setOrderId(""); + request.setItems(Arrays.asList(new Item( + 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder"))); + request.setCustomer(new Customer( + "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", + "+358501234567", "123")); + request.setRedirectUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + request.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); + request.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); + request.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); + request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + + PayAddCardResponse res = payTrail.payAndAddCard(request); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } +} diff --git a/paytrailpayment-sdk/src/test/java/TestCase.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/TestCase.java similarity index 88% rename from paytrailpayment-sdk/src/test/java/TestCase.java rename to paytrailpayment-sdk/src/test/java/io/paytrailpayment/TestCase.java index 87c8b36..95eeed3 100644 --- a/paytrailpayment-sdk/src/test/java/TestCase.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/TestCase.java @@ -1,3 +1,5 @@ +package io.paytrailpayment; + public abstract class TestCase { protected final String merchantId = "375917"; protected final String secretKey = "SAIPPUAKAUPPIAS"; From 02ab1ff352aea47a99f935865f48dc27dc83c8a6 Mon Sep 17 00:00:00 2001 From: NerdCloud Date: Mon, 18 Nov 2024 14:08:29 +0700 Subject: [PATCH 07/28] Revert PaytrailPaymentMethodGroup from upper case to lower case --- .../paytrailpayment/dto/request/model/Item.java | 2 +- .../request/model/PaytrailPaymentMethodGroup.java | 8 ++++---- .../CreateCitPaymentAuthorizationHoldTests.java | 5 +++-- .../CreateCitPaymentChargeTests.java | 5 +++-- .../CreateCitPaymentCommitTests.java | 4 ++-- .../CreateMitPaymentAuthorizationHoldTests.java | 5 +++-- .../CreateMitPaymentChargeTests.java | 5 +++-- .../CreateMitPaymentCommitTests.java | 5 +++-- .../io/paytrailpayment/CreatePaymentUnitTest.java | 3 +++ .../io/paytrailpayment/PayAndAddCardTests.java | 15 ++++++++------- 10 files changed, 33 insertions(+), 24 deletions(-) diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Item.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Item.java index c1195d5..7c6e52e 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Item.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/Item.java @@ -104,7 +104,7 @@ protected void specificValidate() { } } - public Item(int unitPrice, int units, int vatPercentage, String productCode, String category, String description) { + public Item(int unitPrice, int units, BigDecimal vatPercentage, String productCode, String category, String description) { this.unitPrice = unitPrice; this.units = units; this.vatPercentage = vatPercentage; diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailPaymentMethodGroup.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailPaymentMethodGroup.java index ca68070..b707f00 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailPaymentMethodGroup.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/PaytrailPaymentMethodGroup.java @@ -1,8 +1,8 @@ package io.paytrailpayment.dto.request.model; public enum PaytrailPaymentMethodGroup { - MOBILE, - BANK, - CREDIT_CARD, - CREDIT + mobile, + bank, + creditcard, + credit } diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java index 289f29b..6e81e7d 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java @@ -6,6 +6,7 @@ import io.paytrailpayment.utilites.ResponseMessage; import org.junit.jupiter.api.Test; +import java.math.BigDecimal; import java.util.Arrays; import java.util.UUID; @@ -89,7 +90,7 @@ private CreateMitOrCitPaymentRequest createValidPayload() { ShopInShopItem item = new ShopInShopItem(); item.setUnitPrice(1590); item.setUnits(1); - item.setVatPercentage(24); + item.setVatPercentage(BigDecimal.valueOf(24)); item.setProductCode("#927502759"); item.setCategory("Pet supplies"); item.setDescription("Cat ladder"); @@ -132,7 +133,7 @@ private CreateMitOrCitPaymentRequest createValidPayload() { invoicingAddress.setStreetAddress("Testikatu 1"); payload.setInvoicingAddress(invoicingAddress); - payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); return payload; } diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java index fd16855..52ced6a 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java @@ -6,6 +6,7 @@ import io.paytrailpayment.utilites.ResponseMessage; import org.junit.jupiter.api.Test; +import java.math.BigDecimal; import java.util.Arrays; import java.util.UUID; @@ -89,7 +90,7 @@ private CreateMitOrCitPaymentRequest createValidPayload() { ShopInShopItem item = new ShopInShopItem(); item.setUnitPrice(1590); item.setUnits(1); - item.setVatPercentage(24); + item.setVatPercentage(BigDecimal.valueOf(24)); item.setProductCode("#927502759"); item.setCategory("Pet supplies"); item.setDescription("Cat ladder"); @@ -132,7 +133,7 @@ private CreateMitOrCitPaymentRequest createValidPayload() { invoicingAddress.setStreetAddress("Testikatu 1"); payload.setInvoicingAddress(invoicingAddress); - payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); return payload; } diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java index 3d5a235..6d72a20 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java @@ -70,7 +70,7 @@ public void successReturnCode200() { payload.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); payload.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); payload.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); - payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCommit(payload, "0e056dd8-408f-11ee-9cb4-e3059a523029"); int actual = res.getReturnCode(); @@ -104,7 +104,7 @@ public void callPaytrailReturnFailReturnCode500() { payload.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); payload.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); payload.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); - payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCommit(payload, "0e056dd8-408f-11ee-9cb4-e3059a523029"); int actual = res.getReturnCode(); diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java index 5bf830e..0ec8f4d 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java @@ -6,6 +6,7 @@ import io.paytrailpayment.utilites.ResponseMessage; import org.junit.jupiter.api.Test; +import java.math.BigDecimal; import java.util.Arrays; import java.util.UUID; @@ -89,7 +90,7 @@ private CreateMitOrCitPaymentRequest createValidPayload() { ShopInShopItem item = new ShopInShopItem(); item.setUnitPrice(1590); item.setUnits(1); - item.setVatPercentage(24); + item.setVatPercentage(BigDecimal.valueOf(24)); item.setProductCode("#927502759"); item.setCategory("Pet supplies"); item.setDescription("Cat ladder"); @@ -132,7 +133,7 @@ private CreateMitOrCitPaymentRequest createValidPayload() { invoicingAddress.setStreetAddress("Testikatu 1"); payload.setInvoicingAddress(invoicingAddress); - payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); return payload; } diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java index 47cbbec..c502d2d 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java @@ -6,6 +6,7 @@ import io.paytrailpayment.utilites.ResponseMessage; import org.junit.jupiter.api.Test; +import java.math.BigDecimal; import java.util.Arrays; import java.util.UUID; @@ -89,7 +90,7 @@ private CreateMitOrCitPaymentRequest createValidPayload() { ShopInShopItem item = new ShopInShopItem(); item.setUnitPrice(1590); item.setUnits(1); - item.setVatPercentage(24); + item.setVatPercentage(BigDecimal.valueOf(24)); item.setProductCode("#927502759"); item.setCategory("Pet supplies"); item.setDescription("Cat ladder"); @@ -132,7 +133,7 @@ private CreateMitOrCitPaymentRequest createValidPayload() { invoicingAddress.setStreetAddress("Testikatu 1"); payload.setInvoicingAddress(invoicingAddress); - payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); return payload; } diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java index a606159..fb2db18 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java @@ -6,6 +6,7 @@ import io.paytrailpayment.utilites.ResponseMessage; import org.junit.jupiter.api.Test; +import java.math.BigDecimal; import java.util.Arrays; import java.util.UUID; @@ -89,7 +90,7 @@ private CreateMitOrCitPaymentRequest createValidPayload() { ShopInShopItem item = new ShopInShopItem(); item.setUnitPrice(1590); item.setUnits(1); - item.setVatPercentage(24); + item.setVatPercentage(BigDecimal.valueOf(24)); item.setProductCode("#927502759"); item.setCategory("Pet supplies"); item.setDescription("Cat ladder"); @@ -132,7 +133,7 @@ private CreateMitOrCitPaymentRequest createValidPayload() { invoicingAddress.setStreetAddress("Testikatu 1"); payload.setInvoicingAddress(invoicingAddress); - payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); return payload; } diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java index 5b58e7c..4b1887e 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java @@ -1,7 +1,10 @@ +package io.paytrailpayment; + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import io.paytrailpayment.PaytrailClient; +import io.paytrailpayment.TestCase; import io.paytrailpayment.dto.request.CreatePaymentRequest; import io.paytrailpayment.dto.request.model.*; import io.paytrailpayment.dto.request.model.PaytrailCurrency; diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java index 6ffc221..08b408b 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java @@ -7,6 +7,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.math.BigDecimal; import java.util.Arrays; import java.util.UUID; @@ -60,7 +61,7 @@ public void successReturnCode200() { request.setLanguage(PaytrailLanguage.FI); request.setOrderId(""); request.setItems(Arrays.asList(new Item( - 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder"))); + 1590, 1, BigDecimal.valueOf(24), "#927502759", "Pet supplies", "Cat ladder"))); request.setCustomer(new Customer( "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", "+358501234567", "123")); @@ -68,7 +69,7 @@ public void successReturnCode200() { request.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); request.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); request.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); - request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); PayAddCardResponse res = payTrail.payAndAddCard(request); int actual = res.getReturnCode(); @@ -92,7 +93,7 @@ public void callPaytrailReturnNullReturnCode404() { request.setLanguage(PaytrailLanguage.FI); request.setOrderId(""); request.setItems(Arrays.asList(new Item( - 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder"))); + 1590, 1, BigDecimal.valueOf(24), "#927502759", "Pet supplies", "Cat ladder"))); request.setCustomer(new Customer( "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", "+358501234567", "123")); @@ -100,7 +101,7 @@ public void callPaytrailReturnNullReturnCode404() { request.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); request.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); request.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); - request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); PayAddCardResponse res = payTrail.payAndAddCard(request); int actual = res.getReturnCode(); @@ -133,7 +134,7 @@ public void callPaytrailReturnFailReturnCode500() { request.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); request.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); request.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); - request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); PayAddCardResponse res = payTrail.payAndAddCard(request); int actual = res.getReturnCode(); @@ -157,7 +158,7 @@ public void callPayExceptionReturnCode503() { request.setLanguage(PaytrailLanguage.FI); request.setOrderId(""); request.setItems(Arrays.asList(new Item( - 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder"))); + 1590, 1, BigDecimal.valueOf(24), "#927502759", "Pet supplies", "Cat ladder"))); request.setCustomer(new Customer( "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", "+358501234567", "123")); @@ -165,7 +166,7 @@ public void callPayExceptionReturnCode503() { request.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); request.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); request.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); - request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.MOBILE.toString())); + request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); PayAddCardResponse res = payTrail.payAndAddCard(request); int actual = res.getReturnCode(); From 4b1138530cd0cbbc61c76fdde8de397f4f38f7ab Mon Sep 17 00:00:00 2001 From: NerdCloud Date: Tue, 21 Jan 2025 15:40:33 +0700 Subject: [PATCH 08/28] Update remove signature out of request of Add card form. --- .../java/io/paytrailpayment/Paytrail.java | 21 ++++++++++++------- .../io/paytrailpayment/PaytrailClient.java | 3 ++- .../dto/request/model/ShopInShopItem.java | 8 ++++--- .../CreateCitPaymentCommitTests.java | 5 +++-- .../paytrailpayment/PayAndAddCardTests.java | 2 +- 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/Paytrail.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/Paytrail.java index 3d84627..05b2afc 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/Paytrail.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/Paytrail.java @@ -65,19 +65,26 @@ protected String calculateHmac(Map hdparams, String body) throws } protected DataResponse handleRequest(String method, String url, String body, String transactionId, String checkoutTokenizationId) throws PaytrailClientException, PaytrailCommunicationException{ + return handleRequest(method, url, body, transactionId, checkoutTokenizationId, false); + } + + protected DataResponse handleRequest(String method, String url, String body, String transactionId, String checkoutTokenizationId, boolean skipAuthHeaders) throws PaytrailClientException, PaytrailCommunicationException{ DataResponse res = new DataResponse(); try { Map hdparams = getHeaders(method, transactionId, checkoutTokenizationId); - String signature = calculateHmac(hdparams, body); + if (!skipAuthHeaders) { - if (signature.isEmpty()) { - res.setStatusCode(ResponseMessage.BAD_REQUEST.getCode()); - res.setData(ResponseMessage.BAD_REQUEST.getDescription()); - return res; - } + String signature = calculateHmac(hdparams, body); - hdparams = getHeaders(hdparams, Constants.SIGNATURE_HEADER, signature); + if (signature.isEmpty()) { + res.setStatusCode(ResponseMessage.BAD_REQUEST.getCode()); + res.setData(ResponseMessage.BAD_REQUEST.getDescription()); + return res; + } + + hdparams = getHeaders(hdparams, Constants.SIGNATURE_HEADER, signature); + } // Create new request HttpClient httpClient = HttpClientBuilder.create().build(); diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java index 0127d9a..fdaeb5e 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java @@ -192,7 +192,8 @@ private AddCardFormResponse executeCreateAddCardForm(AddCardFormRequest req) thr ObjectMapper mapper = new ObjectMapper(); String jsonRequest = mapper.writeValueAsString(req); String targetURL = Constants.API_ENDPOINT + "/tokenization/addcard-form"; - DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); + // Send request without signature in header. + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null, true); if (data.getStatusCode() != ResponseMessage.CREATED.getCode()) { return new AddCardFormResponse(data.getStatusCode(), data.getData(), null); diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/ShopInShopItem.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/ShopInShopItem.java index e66e36b..c340b1d 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/ShopInShopItem.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/ShopInShopItem.java @@ -7,6 +7,8 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; +import java.math.BigDecimal; + @EqualsAndHashCode(callSuper = true) @Data @NoArgsConstructor @@ -28,18 +30,18 @@ public class ShopInShopItem extends Item { */ private Commission commission; - public ShopInShopItem(int unitPrice, int units, int vatPercentage, String productCode, String category, String description, String stamp, String reference, String orderId, String merchant, Commission commission) { + public ShopInShopItem(int unitPrice, int units, BigDecimal vatPercentage, String productCode, String category, String description, String stamp, String reference, String orderId, String merchant, Commission commission) { super(unitPrice, units, vatPercentage, productCode, description, category, stamp, reference); this.orderId = orderId; this.merchant = merchant; this.commission = commission; } - public ShopInShopItem(int unitPrice, int units, int vatPercentage, String productCode, String category, String description, String stamp, String reference) { + public ShopInShopItem(int unitPrice, int units, BigDecimal vatPercentage, String productCode, String category, String description, String stamp, String reference) { super(unitPrice, units, vatPercentage, productCode, description, category, stamp, reference); } - public ShopInShopItem(int unitPrice, int units, int vatPercentage, String productCode, String category, + public ShopInShopItem(int unitPrice, int units, BigDecimal vatPercentage, String productCode, String category, String description, String merchant, String stamp, String reference, String orderId) { super(unitPrice, units, vatPercentage, productCode, description, category, stamp, reference); this.merchant = merchant; diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java index 6d72a20..1ec62ac 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java @@ -7,6 +7,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import java.math.BigDecimal; import java.util.Arrays; import java.util.UUID; @@ -61,7 +62,7 @@ public void successReturnCode200() { payload.setLanguage(PaytrailLanguage.FI); payload.setOrderId(""); payload.setItems(Arrays.asList(new ShopInShopItem( - 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder", + 1590, 1, BigDecimal.valueOf(24), "#927502759", "Pet supplies", "Cat ladder", UUID.randomUUID().toString(), "9187445"))); payload.setCustomer(new Customer( "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", @@ -95,7 +96,7 @@ public void callPaytrailReturnFailReturnCode500() { payload.setLanguage(PaytrailLanguage.FI); payload.setOrderId(""); payload.setItems(Arrays.asList(new ShopInShopItem( - 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder", + 1590, 1, BigDecimal.valueOf(24), "#927502759", "Pet supplies", "Cat ladder", UUID.randomUUID().toString(), "9187445"))); payload.setCustomer(new Customer( "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java index 08b408b..9e6c366 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java @@ -125,7 +125,7 @@ public void callPaytrailReturnFailReturnCode500() { request.setLanguage(PaytrailLanguage.FI); request.setOrderId(""); request.setItems(Arrays.asList(new ShopInShopItem( - 1590, 1, 24, "#927502759", "Pet supplies", "Cat ladder", + 1590, 1, BigDecimal.valueOf(24), "#927502759", "Pet supplies", "Cat ladder", MERCHANTIDSISS, UUID.randomUUID().toString(), "", ""))); request.setCustomer(new Customer( "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", From c59b59f20abe6c15be055548eace390c20ee6fe9 Mon Sep 17 00:00:00 2001 From: Ottia Devs Date: Fri, 7 Feb 2025 16:32:56 +0700 Subject: [PATCH 09/28] Remove all param out of header in case add card form --- .../main/java/io/paytrailpayment/Paytrail.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/Paytrail.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/Paytrail.java index 05b2afc..49b99ad 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/Paytrail.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/Paytrail.java @@ -71,10 +71,10 @@ protected DataResponse handleRequest(String method, String url, String body, Str protected DataResponse handleRequest(String method, String url, String body, String transactionId, String checkoutTokenizationId, boolean skipAuthHeaders) throws PaytrailClientException, PaytrailCommunicationException{ DataResponse res = new DataResponse(); try { - Map hdparams = getHeaders(method, transactionId, checkoutTokenizationId); + Map hdparams = null; if (!skipAuthHeaders) { - + hdparams = getHeaders(method, transactionId, checkoutTokenizationId); String signature = calculateHmac(hdparams, body); if (signature.isEmpty()) { @@ -98,12 +98,16 @@ protected DataResponse handleRequest(String method, String url, String body, Str .setText(body); httpPost.setEntity(builder.build()); - for (Map.Entry entry : hdparams.entrySet()) { - httpPost.setHeader(entry.getKey(), entry.getValue()); + if (Objects.nonNull(hdparams)) { + for (Map.Entry entry : hdparams.entrySet()) { + httpPost.setHeader(entry.getKey(), entry.getValue()); + } } } else if (Objects.equals(method, Constants.GET_METHOD)) { - for (Map.Entry entry : hdparams.entrySet()) { - httpGet.setHeader(entry.getKey(), entry.getValue()); + if (Objects.nonNull(hdparams)) { + for (Map.Entry entry : hdparams.entrySet()) { + httpGet.setHeader(entry.getKey(), entry.getValue()); + } } } From 5dcc16109109737616e3f71a892b47dd01eb8029 Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 17 Feb 2025 19:48:21 +0700 Subject: [PATCH 10/28] Update Unit test cases and some classes to fix test case return 200 --- paytrailpayment-sdk/pom.xml | 5 + .../java/io/paytrailpayment/IPaytrail.java | 8 ++ .../java/io/paytrailpayment/Paytrail.java | 91 +++++++------------ .../io/paytrailpayment/PaytrailClient.java | 74 +++++++++++++-- .../dto/request/CreatePaymentRequest.java | 10 +- .../dto/request/GetTokenRequest.java | 24 +++++ .../dto/request/model/ShopInShopItem.java | 6 +- .../dto/response/GetTokenResponse.java | 21 +++++ .../dto/response/data/Card.java | 73 +++++++++++++++ .../dto/response/data/CustomerDetail.java | 21 +++++ .../dto/response/data/GetTokenData.java | 23 +++++ .../CreateAddCardFormRequestTests.java | 9 +- ...reateCitPaymentAuthorizationHoldTests.java | 30 ++++-- .../CreateCitPaymentChargeTests.java | 29 +++++- .../CreateCitPaymentCommitTests.java | 40 ++++---- ...reateMitPaymentAuthorizationHoldTests.java | 24 ++++- .../CreateMitPaymentChargeTests.java | 24 ++++- .../CreateMitPaymentCommitTests.java | 5 +- .../CreatePaymentUnitTest.java | 9 +- .../CreateRefundRequestUnitTest.java | 5 +- 20 files changed, 407 insertions(+), 124 deletions(-) create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/GetTokenRequest.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/GetTokenResponse.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/Card.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/CustomerDetail.java create mode 100644 paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/GetTokenData.java diff --git a/paytrailpayment-sdk/pom.xml b/paytrailpayment-sdk/pom.xml index eb0a084..def058c 100644 --- a/paytrailpayment-sdk/pom.xml +++ b/paytrailpayment-sdk/pom.xml @@ -55,6 +55,11 @@ commons-lang3 3.12.0 + + com.squareup.okhttp3 + okhttp + 4.12.0 + 8 diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/IPaytrail.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/IPaytrail.java index 27a8a26..a811f48 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/IPaytrail.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/IPaytrail.java @@ -104,4 +104,12 @@ public interface IPaytrail { * @return */ PayAddCardResponse payAndAddCard(PayAddCardRequest req); + + /** + * + * HTTP POST /tokenization/get-token get token. + * @param req + * @return the actual card token which can then be used to make payments on the card + */ + GetTokenResponse createGetTokenRequest(GetTokenRequest req); } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/Paytrail.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/Paytrail.java index 49b99ad..bbc7461 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/Paytrail.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/Paytrail.java @@ -6,16 +6,11 @@ import io.paytrailpayment.utilites.Constants; import io.paytrailpayment.utilites.ResponseMessage; import io.paytrailpayment.utilites.Signature; -import org.apache.hc.client5.http.classic.HttpClient; -import org.apache.hc.client5.http.classic.methods.HttpGet; -import org.apache.hc.client5.http.classic.methods.HttpPost; -import org.apache.hc.client5.http.entity.EntityBuilder; -import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; -import org.apache.hc.core5.http.HttpEntity; -import org.apache.hc.core5.http.io.HttpClientResponseHandler; -import org.apache.hc.core5.http.io.entity.EntityUtils; +import okhttp3.OkHttpClient; +import okhttp3.RequestBody; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.*; @@ -34,8 +29,8 @@ protected Map getHeaders(String method, String transactionId, St headers.put(Constants.CHECKOUT_METHOD_HEADER, method.toUpperCase()); headers.put(Constants.CHECKOUT_NONCE_HEADER, UUID.randomUUID().toString()); headers.put(Constants.CHECKOUT_TIMESTAMP_HEADER, String.format("%tFT% hdparams, String body) throws return Signature.calculateHmac(this.secretKey, hdparams, body, Constants.SHA256_ALGORITHM); } - protected DataResponse handleRequest(String method, String url, String body, String transactionId, String checkoutTokenizationId) throws PaytrailClientException, PaytrailCommunicationException{ + protected DataResponse handleRequest(String method, String url, String body, String transactionId, String checkoutTokenizationId) throws PaytrailClientException, PaytrailCommunicationException { return handleRequest(method, url, body, transactionId, checkoutTokenizationId, false); } - protected DataResponse handleRequest(String method, String url, String body, String transactionId, String checkoutTokenizationId, boolean skipAuthHeaders) throws PaytrailClientException, PaytrailCommunicationException{ + protected DataResponse handleRequest(String method, String url, String body, + String transactionId, String checkoutTokenizationId, boolean skipAuthHeaders) + throws PaytrailClientException, PaytrailCommunicationException { DataResponse res = new DataResponse(); try { Map hdparams = null; @@ -84,61 +81,43 @@ protected DataResponse handleRequest(String method, String url, String body, Str } hdparams = getHeaders(hdparams, Constants.SIGNATURE_HEADER, signature); + } else { + Map headers = new HashMap<>(); + hdparams = getHeaders(headers, Constants.CONTENT_TYPE_HEADER, Constants.CONTENT_TYPE); + hdparams = getHeaders(hdparams, Constants.PLATFORM_NAME_HEADER, this.platformName); } - - // Create new request - HttpClient httpClient = HttpClientBuilder.create().build(); - - HttpPost httpPost = new HttpPost(url); - HttpGet httpGet = new HttpGet(url); - - if (Objects.equals(method, Constants.POST_METHOD)) { - EntityBuilder builder = EntityBuilder - .create() - .setText(body); - httpPost.setEntity(builder.build()); - - if (Objects.nonNull(hdparams)) { - for (Map.Entry entry : hdparams.entrySet()) { - httpPost.setHeader(entry.getKey(), entry.getValue()); - } - } - } else if (Objects.equals(method, Constants.GET_METHOD)) { - if (Objects.nonNull(hdparams)) { - for (Map.Entry entry : hdparams.entrySet()) { - httpGet.setHeader(entry.getKey(), entry.getValue()); - } + // Build the OkHttpClient instance (add interceptors if needed for logging) + OkHttpClient client = new OkHttpClient.Builder().build(); + + // Build the request, adding headers if available + okhttp3.Request.Builder requestBuilder = new okhttp3.Request.Builder().url(url); + if (hdparams != null) { + for (Map.Entry entry : hdparams.entrySet()) { + requestBuilder.addHeader(entry.getKey(), entry.getValue()); } } + if (Constants.POST_METHOD.equals(method)) { + RequestBody requestBody = RequestBody.create(body.getBytes(StandardCharsets.UTF_8)); + requestBuilder.post(requestBody); + } else if (Constants.GET_METHOD.equals(method)) { + requestBuilder.get(); + } - // Send request - HttpClientResponseHandler handler = response -> { - int status = response.getCode(); - HttpEntity entity = response.getEntity(); - String getResponseString = entity != null ? EntityUtils.toString(entity) : null; - if (entity != null) { - EntityUtils.consume(entity); - } - + okhttp3.Request request = requestBuilder.build(); + // Execute the request + try (okhttp3.Response response = client.newCall(request).execute()) { + int status = response.code(); + String responseString = response.body() != null ? response.body().string() : null; res.setStatusCode(status); - res.setData(getResponseString); - - return getResponseString; - }; - - // Execute - if (Objects.equals(method, Constants.POST_METHOD)) { - httpClient.execute(httpPost, handler); - } else if (Objects.equals(method, Constants.GET_METHOD)) { - httpClient.execute(httpGet, handler); + res.setData(responseString); } return res; } catch (NoSuchAlgorithmException | InvalidKeyException e) { - // throw the exception related to the client. + // Exception related to the client (e.g., HMAC calculation) throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.toString(), e); } catch (IOException e) { - // throw the exception related to the communication with the server. + // Exception related to communication issues throw new PaytrailCommunicationException(ResponseMessage.EXCEPTION.getCode(), e.getMessage(), e); } } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java index fdaeb5e..d6c0db6 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/PaytrailClient.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.PropertyNamingStrategies; import io.paytrailpayment.dto.request.*; import io.paytrailpayment.dto.response.*; import io.paytrailpayment.dto.response.data.*; @@ -57,12 +58,12 @@ private CreatePaymentResponse executeCreatePayment(CreatePaymentRequest req) thr String targetURL = Constants.API_ENDPOINT + "/payments"; DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); - if (data.getStatusCode() != ResponseMessage.CREATED.getCode()) { + if (data.getStatusCode() != ResponseMessage.CREATED.getCode() && data.getStatusCode() != ResponseMessage.OK.getCode()) { return new CreatePaymentResponse(data.getStatusCode(), data.getData(), null); } else { // Successfully created the payment and parse the result CreatePaymentData dataMapper = mapper.readValue(data.getData(), CreatePaymentData.class); - return new CreatePaymentResponse(data.getStatusCode(), ResponseMessage.OK.getDescription(), dataMapper); + return new CreatePaymentResponse(ResponseMessage.OK.getCode(), ResponseMessage.OK.getDescription(), dataMapper); } } catch (JsonProcessingException e) { @@ -148,12 +149,12 @@ private CreateRefundResponse executeCreateRefund(CreateRefundRequest req, String String targetURL = Constants.API_ENDPOINT + "/payments/" + transactionId + "/refund"; DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, transactionId, null); - if (data.getStatusCode() != ResponseMessage.CREATED.getCode()) { + if (data.getStatusCode() != ResponseMessage.CREATED.getCode() && data.getStatusCode() != ResponseMessage.OK.getCode()) { res.setReturnCode(data.getStatusCode()); res.setReturnMessage(data.getData()); } else { CreateRefundData dataMapper = mapper.readValue(data.getData(), CreateRefundData.class); - res.setReturnCode(data.getStatusCode()); + res.setReturnCode(ResponseMessage.OK.getCode()); res.setReturnMessage(ResponseMessage.OK.getDescription()); res.setData(dataMapper); } @@ -242,7 +243,7 @@ private CreateMitOrCitPaymentResponse executeCreateMitPaymentCharge(CreateMitOrC DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); - if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + if (data.getStatusCode() != ResponseMessage.OK.getCode() && data.getStatusCode() != ResponseMessage.CREATED.getCode()) { return new CreateMitOrCitPaymentResponse(data.getStatusCode(), data.getData(), null); } else { CreateMitPaymentChargeData dataMapper = mapper.readValue(data.getData(), CreateMitPaymentChargeData.class); @@ -277,12 +278,12 @@ private CreateMitOrCitPaymentResponse executeCreateMitPaymentAuthorizationHold(C String targetURL = Constants.API_ENDPOINT + "/payments/token/mit/authorization-hold"; DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); - if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + if (data.getStatusCode() != ResponseMessage.OK.getCode() && data.getStatusCode() != ResponseMessage.CREATED.getCode()) { return new CreateMitOrCitPaymentResponse(data.getStatusCode(), data.getData(), null); } else { // Successfully created the MIT payment authorization hold and parse the result CreateMitPaymentChargeData dataMapper = mapper.readValue(data.getData(), CreateMitPaymentChargeData.class); - return new CreateMitOrCitPaymentResponse(data.getStatusCode(), ResponseMessage.OK.getDescription(), dataMapper); + return new CreateMitOrCitPaymentResponse(ResponseMessage.OK.getCode(), ResponseMessage.OK.getDescription(), dataMapper); } } catch (JsonProcessingException e) { throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); @@ -318,7 +319,7 @@ private CreateMitOrCitPaymentResponse executeCreateMitOrCitPaymentCommit(CreateM try { ObjectMapper mapper = new ObjectMapper(); String jsonRequest = mapper.writeValueAsString(req); - String targetURL = Constants.API_ENDPOINT + "/payments/" + transactionId + "token/mit/commit/"; + String targetURL = Constants.API_ENDPOINT + "/payments/" + transactionId + "/token/commit/"; DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, transactionId, null); @@ -359,7 +360,7 @@ private CreateMitOrCitPaymentResponse executeCreateCitPaymentCharge(CreateMitOrC DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); - if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + if (data.getStatusCode() != ResponseMessage.OK.getCode() && data.getStatusCode() != ResponseMessage.CREATED.getCode()) { return new CreateMitOrCitPaymentResponse(data.getStatusCode(), data.getData(), null); } else { CreateMitPaymentChargeData dataMapper = mapper.readValue(data.getData(), CreateMitPaymentChargeData.class); @@ -396,7 +397,7 @@ private CreateMitOrCitPaymentResponse executeCreateCitPaymentAuthorizationHold(C DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, jsonRequest, null, null); - if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + if (data.getStatusCode() != ResponseMessage.OK.getCode() && data.getStatusCode() != ResponseMessage.CREATED.getCode()) { return new CreateMitOrCitPaymentResponse(data.getStatusCode(), data.getData(), null); } else { CreateMitPaymentChargeData dataMapper = mapper.readValue(data.getData(), CreateMitPaymentChargeData.class); @@ -478,4 +479,57 @@ private PayAddCardResponse executePayAndAddCard(PayAddCardRequest req) throws Pa } } + @Override + public GetTokenResponse createGetTokenRequest(GetTokenRequest req) { + GetTokenResponse res = new GetTokenResponse(); + try { + // Validate request before processing + ValidationResult validationResult = validateGetTokenRequest(req); + if (!validationResult.isValid()) { + res.setReturnCode(ResponseMessage.BAD_REQUEST.getCode()); + res.setReturnMessage(validationResult.getMessagesAsJson()); + return res; + } + return executeCreateGetTokenRequest(req); + } catch (PaytrailClientException | PaytrailCommunicationException e) { + res.setReturnCode(ResponseMessage.EXCEPTION.getCode()); + res.setReturnMessage(e.getMessage()); + return res; + } + } + + private GetTokenResponse executeCreateGetTokenRequest(GetTokenRequest req) throws PaytrailClientException, PaytrailCommunicationException { + try { + ObjectMapper mapper = new ObjectMapper(); + String jsonRequest = mapper.writeValueAsString(req); + + // Construct the URL dynamically using checkoutTokenizationId from TokenRequest + String targetURL = Constants.API_ENDPOINT + "/tokenization/" + req.getCheckoutTokenizationId(); + + // Handle HTTP request + DataResponse data = this.handleRequest(Constants.POST_METHOD, targetURL, "{}", null, req.getCheckoutTokenizationId()); + + // Process API response + if (data.getStatusCode() != ResponseMessage.OK.getCode()) { + return new GetTokenResponse(data.getStatusCode(), data.getData(), null); + } else { + mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE); + GetTokenData dataMapper = mapper.readValue(data.getData(), GetTokenData.class); + return new GetTokenResponse(ResponseMessage.OK.getCode(), ResponseMessage.OK.getDescription(), dataMapper); + } + } catch (JsonProcessingException e) { + throw new PaytrailClientException(ResponseMessage.RESPONSE_ERROR.getCode(), e.getMessage(), e); + } + } + + private ValidationResult validateGetTokenRequest(GetTokenRequest req) { + if (req == null) { + Map error = new HashMap<>(); + error.put("error", ResponseMessage.BAD_REQUEST.getDescription()); + return new ValidationResult(false, error); + } + return req.validate(); + } + + } diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreatePaymentRequest.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreatePaymentRequest.java index 417b0b1..61ee034 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreatePaymentRequest.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/CreatePaymentRequest.java @@ -112,11 +112,11 @@ protected void specificValidate() { addValidationError("amount", "Amount must be less than 99999999."); } - if (orderId == null || orderId.isEmpty()) { - if (reference == null || reference.isEmpty()) { - addValidationError("orderId", "OrderId is not provided, then reference must be provided. "); - } - } +// if (orderId == null || orderId.isEmpty()) { +// if (reference == null || reference.isEmpty()) { +// addValidationError("orderId", "OrderId is not provided, then reference must be provided. "); +// } +// } if (items != null) { for (Item item : items) { diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/GetTokenRequest.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/GetTokenRequest.java new file mode 100644 index 0000000..9c37b3c --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/GetTokenRequest.java @@ -0,0 +1,24 @@ +package io.paytrailpayment.dto.request; + + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_DEFAULT) +public class GetTokenRequest extends Request { + private String checkoutTokenizationId; + + @Override + protected void specificValidate() { + if (checkoutTokenizationId == null || checkoutTokenizationId.isEmpty()) { + addValidationError("checkoutTokenizationId", "checkoutTokenizationId can't be null."); + } + } +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/ShopInShopItem.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/ShopInShopItem.java index c340b1d..5839425 100644 --- a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/ShopInShopItem.java +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/request/model/ShopInShopItem.java @@ -52,9 +52,9 @@ public ShopInShopItem(int unitPrice, int units, BigDecimal vatPercentage, String protected void specificValidate() { super.specificValidate(); - if (orderId == null) { - addValidationError("orderId", "Item's orderId can't be null."); - } +// if (orderId == null) { +// addValidationError("orderId", "Item's orderId can't be null."); +// } if (merchant == null || merchant.isEmpty()) { diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/GetTokenResponse.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/GetTokenResponse.java new file mode 100644 index 0000000..86f1138 --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/GetTokenResponse.java @@ -0,0 +1,21 @@ +package io.paytrailpayment.dto.response; + +import io.paytrailpayment.dto.response.data.GetTokenData; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +public class GetTokenResponse extends Response { + private GetTokenData data; + + public GetTokenResponse(int statusCode, String description, GetTokenData dataMapper) { + super(statusCode, description); + this.data = dataMapper; + + } +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/Card.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/Card.java new file mode 100644 index 0000000..75dec63 --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/Card.java @@ -0,0 +1,73 @@ +package io.paytrailpayment.dto.response.data; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Represents a Card with its details. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Card { + + /** + * Card type, for example "Visa". + */ + private String type; + + /** + * First 2 or 6 digits of the card number (6 for MC/VISA, 2 for Amex/Diners). + */ + private String bin; + + /** + * Last four digits of the card. + */ + private String partialPan; + + /** + * Card expiration year. + */ + private String expireYear; + + /** + * Card expiration month. + */ + private String expireMonth; + + /** + * Whether the CVC is required for paying with this card. + * Can be one of "yes", "no" or "not_tested". + */ + private String cvcRequired; + + /** + * The card funding type: credit, debit, or unknown. + */ + private String funding; + + /** + * Card category: business, prepaid, or unknown. + */ + private String category; + + /** + * Country code, e.g. "FI". + */ + private String countryCode; + + /** + * Identifies a specific card number. + * Cards with the same PAN but different expiry dates will have the same PAN fingerprint. + * Hex string of length 64. + */ + private String panFingerprint; + + /** + * Identifies a specific card including the expiry date. + * Hex string of length 64. + */ + private String cardFingerprint; +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/CustomerDetail.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/CustomerDetail.java new file mode 100644 index 0000000..e856b8b --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/CustomerDetail.java @@ -0,0 +1,21 @@ +package io.paytrailpayment.dto.response.data; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CustomerDetail { + /** + * Customer's network address. + */ + private String networkAddress; + + /** + * Country code. + */ + private String countryCode; + +} diff --git a/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/GetTokenData.java b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/GetTokenData.java new file mode 100644 index 0000000..33d2b2b --- /dev/null +++ b/paytrailpayment-sdk/src/main/java/io/paytrailpayment/dto/response/data/GetTokenData.java @@ -0,0 +1,23 @@ +package io.paytrailpayment.dto.response.data; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class GetTokenData { + /** + * Payment card token. + */ + private String token; + /** + * Masked card details. Present if verification was successful. + */ + private Card card; + /** + * Customer details. + */ + private CustomerDetail customer; +} diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java index 7e3fd58..c372af7 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java @@ -1,11 +1,15 @@ package io.paytrailpayment; +import com.fasterxml.jackson.core.JsonProcessingException; import io.paytrailpayment.dto.request.AddCardFormRequest; import io.paytrailpayment.dto.response.AddCardFormResponse; import io.paytrailpayment.utilites.ResponseMessage; import org.junit.Before; import org.junit.Test; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; + import static org.junit.jupiter.api.Assertions.*; public class CreateAddCardFormRequestTests extends TestCase { @@ -47,7 +51,7 @@ public void createAddCardFormRequest_ValidateFalse_ReturnCode403() { } @Test - public void createAddCardFormRequest_Success_ReturnCode200() { + public void createAddCardFormRequest_Success_ReturnCode200() throws NoSuchAlgorithmException, InvalidKeyException, JsonProcessingException { // Arrange int expected = ResponseMessage.OK.getCode(); @@ -60,9 +64,8 @@ public void createAddCardFormRequest_Success_ReturnCode200() { request.setCheckoutTimestamp("2023-08-22T04:05:20.253Z"); request.setCheckoutRedirectSuccessUrl("https://somedomain.com/success"); request.setCheckoutRedirectCancelUrl("https://somedomain.com/cancel"); - request.setSignature("542e780c253761ed64333d5485391ddd4f55d5e00b7bdc7f60f0f0d15516f889"); request.setLanguage("EN"); - + request.setSignature("542e780c253761ed64333d5485391ddd4f55d5e00b7bdc7f60f0f0d15516f889"); AddCardFormResponse res = payTrail.createAddCardFormRequest(request); int actual = res.getReturnCode(); diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java index 6e81e7d..2a52fbf 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java @@ -3,6 +3,7 @@ import io.paytrailpayment.dto.request.*; import io.paytrailpayment.dto.request.model.*; import io.paytrailpayment.dto.response.CreateMitOrCitPaymentResponse; +import io.paytrailpayment.dto.response.GetTokenResponse; import io.paytrailpayment.utilites.ResponseMessage; import org.junit.jupiter.api.Test; @@ -15,7 +16,7 @@ public class CreateCitPaymentAuthorizationHoldTests { private static final String MERCHANTIDN = "375917"; private static final String MERCHANTIDSIS = "695861"; - private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + private static final String SECRETKEYSIS = "MONISAIPPUAKAUPPIAS"; @Test public void createCitPaymentAuthorizationHold_RequestNull_ReturnCode400() { @@ -53,11 +54,10 @@ public void createCitPaymentAuthorizationHold_Success_ReturnCode200() { int expected = ResponseMessage.OK.getCode(); // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); CreateMitOrCitPaymentRequest payload = createValidPayload(); - CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(payload); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentAuthorizationHold(payload); int actual = res.getReturnCode(); - // Assert assertEquals(expected, actual); } @@ -85,7 +85,7 @@ private CreateMitOrCitPaymentRequest createValidPayload() { payload.setAmount(1590); payload.setCurrency(PaytrailCurrency.EUR); payload.setLanguage(PaytrailLanguage.FI); - payload.setOrderId(""); + payload.setOrderId("12335"); ShopInShopItem item = new ShopInShopItem(); item.setUnitPrice(1590); @@ -96,6 +96,8 @@ private CreateMitOrCitPaymentRequest createValidPayload() { item.setDescription("Cat ladder"); item.setStamp(UUID.randomUUID().toString()); item.setReference("9187445"); + item.setOrderId("12335"); + item.setMerchant("375917"); payload.setItems(Arrays.asList(item)); Customer customer = new Customer(); @@ -134,7 +136,23 @@ private CreateMitOrCitPaymentRequest createValidPayload() { payload.setInvoicingAddress(invoicingAddress); payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); - + payload.setToken(this.getToken()); return payload; } + + /** + * Get token + * + * @return + */ + private String getToken() { + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + GetTokenRequest getTokenRequest = new GetTokenRequest(); + getTokenRequest.setCheckoutTokenizationId("1d0a51f6-a60c-477b-94e2-403a0ed37199"); + GetTokenResponse getTokenResponse = payTrail.createGetTokenRequest(getTokenRequest); + if (getTokenResponse == null || getTokenResponse.getReturnCode() != ResponseMessage.OK.getCode()) { + return null; + } + return getTokenResponse.getData().getToken(); + } } diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java index 52ced6a..9f65009 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java @@ -3,6 +3,7 @@ import io.paytrailpayment.dto.request.*; import io.paytrailpayment.dto.request.model.*; import io.paytrailpayment.dto.response.CreateMitOrCitPaymentResponse; +import io.paytrailpayment.dto.response.GetTokenResponse; import io.paytrailpayment.utilites.ResponseMessage; import org.junit.jupiter.api.Test; @@ -13,9 +14,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals; public class CreateCitPaymentChargeTests { - private static final String MERCHANTIDN = "375917"; + private static final String MERCHANTIDN = "695874"; private static final String MERCHANTIDSIS = "695861"; - private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + private static final String SECRETKEYSIS = "MONISAIPPUAKAUPPIAS"; @Test public void createCitPaymentCharge_RequestNull_ReturnCode400() { @@ -53,7 +54,7 @@ public void createCitPaymentCharge_Success_ReturnCode200() { int expected = ResponseMessage.OK.getCode(); // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); CreateMitOrCitPaymentRequest payload = createValidPayload(); CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(payload); int actual = res.getReturnCode(); @@ -85,7 +86,7 @@ private CreateMitOrCitPaymentRequest createValidPayload() { payload.setAmount(1590); payload.setCurrency(PaytrailCurrency.EUR); payload.setLanguage(PaytrailLanguage.FI); - payload.setOrderId(""); + payload.setOrderId("12335"); ShopInShopItem item = new ShopInShopItem(); item.setUnitPrice(1590); @@ -96,6 +97,8 @@ private CreateMitOrCitPaymentRequest createValidPayload() { item.setDescription("Cat ladder"); item.setStamp(UUID.randomUUID().toString()); item.setReference("9187445"); + item.setOrderId("12335"); + item.setMerchant("695874"); payload.setItems(Arrays.asList(item)); Customer customer = new Customer(); @@ -134,7 +137,23 @@ private CreateMitOrCitPaymentRequest createValidPayload() { payload.setInvoicingAddress(invoicingAddress); payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); - + payload.setToken(this.getToken()); return payload; } + + /** + * Get token + * + * @return + */ + private String getToken() { + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + GetTokenRequest getTokenRequest = new GetTokenRequest(); + getTokenRequest.setCheckoutTokenizationId("1d0a51f6-a60c-477b-94e2-403a0ed37199"); + GetTokenResponse getTokenResponse = payTrail.createGetTokenRequest(getTokenRequest); + if (getTokenResponse == null || getTokenResponse.getReturnCode() != ResponseMessage.OK.getCode()) { + return null; + } + return getTokenResponse.getData().getToken(); + } } diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java index 1ec62ac..43b5e3c 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java @@ -12,9 +12,9 @@ import java.util.UUID; public class CreateCitPaymentCommitTests { - private static final String MERCHANTIDN = "375917"; + private static final String MERCHANTIDN = "695874"; private static final String MERCHANTIDSIS = "695861"; - private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + private static final String SECRETKEYSIS = "MONISAIPPUAKAUPPIAS"; @Test public void requestNullReturnCode400() { @@ -52,7 +52,22 @@ public void successReturnCode200() { int expected = ResponseMessage.OK.getCode(); // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCommit(payload, "0e056dd8-408f-11ee-9cb4-e3059a523029"); + int actual = res.getReturnCode(); + + // Assert + Assertions.assertEquals(expected, actual); + } + + @Test + public void callPaytrailReturnFailReturnCode500() { + // Arrange + int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); payload.setStamp(UUID.randomUUID().toString()); @@ -80,13 +95,7 @@ public void successReturnCode200() { Assertions.assertEquals(expected, actual); } - @Test - public void callPaytrailReturnFailReturnCode500() { - // Arrange - int expected = ResponseMessage.RESPONSE_ERROR.getCode(); - - // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + private CreateMitOrCitPaymentRequest createValidPayload() { CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); payload.setStamp(UUID.randomUUID().toString()); @@ -96,8 +105,8 @@ public void callPaytrailReturnFailReturnCode500() { payload.setLanguage(PaytrailLanguage.FI); payload.setOrderId(""); payload.setItems(Arrays.asList(new ShopInShopItem( - 1590, 1, BigDecimal.valueOf(24), "#927502759", "Pet supplies", "Cat ladder", - UUID.randomUUID().toString(), "9187445"))); + 1590, 1, BigDecimal.valueOf(24), "#927502759", "Pet supplies", "Cat ladder", "695874", + UUID.randomUUID().toString(), "9187445", "12335"))); payload.setCustomer(new Customer( "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", "+358501234567", "123")); @@ -106,11 +115,6 @@ public void callPaytrailReturnFailReturnCode500() { payload.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); payload.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); - - CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCommit(payload, "0e056dd8-408f-11ee-9cb4-e3059a523029"); - int actual = res.getReturnCode(); - - // Assert - Assertions.assertEquals(expected, actual); + return payload; } } diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java index 0ec8f4d..b5b4a57 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java @@ -3,6 +3,7 @@ import io.paytrailpayment.dto.request.*; import io.paytrailpayment.dto.request.model.*; import io.paytrailpayment.dto.response.CreateMitOrCitPaymentResponse; +import io.paytrailpayment.dto.response.GetTokenResponse; import io.paytrailpayment.utilites.ResponseMessage; import org.junit.jupiter.api.Test; @@ -15,7 +16,7 @@ public class CreateMitPaymentAuthorizationHoldTests { private static final String MERCHANTIDN = "375917"; private static final String MERCHANTIDSIS = "695861"; - private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + private static final String SECRETKEYSIS = "MONISAIPPUAKAUPPIAS"; @Test public void createMitPaymentAuthorizationHoldRequestNullReturnCode400() { @@ -53,7 +54,7 @@ public void createMitPaymentAuthorizationHoldSuccessReturnCode200() { int expected = ResponseMessage.OK.getCode(); // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); CreateMitOrCitPaymentRequest payload = createValidPayload(); CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentAuthorizationHold(payload); int actual = res.getReturnCode(); @@ -96,6 +97,7 @@ private CreateMitOrCitPaymentRequest createValidPayload() { item.setDescription("Cat ladder"); item.setStamp(UUID.randomUUID().toString()); item.setReference("9187445"); + item.setMerchant("695874"); payload.setItems(Arrays.asList(item)); Customer customer = new Customer(); @@ -134,7 +136,23 @@ private CreateMitOrCitPaymentRequest createValidPayload() { payload.setInvoicingAddress(invoicingAddress); payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); - + payload.setToken(this.getToken()); return payload; } + + /** + * Get token + * + * @return + */ + private String getToken() { + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + GetTokenRequest getTokenRequest = new GetTokenRequest(); + getTokenRequest.setCheckoutTokenizationId("1d0a51f6-a60c-477b-94e2-403a0ed37199"); + GetTokenResponse getTokenResponse = payTrail.createGetTokenRequest(getTokenRequest); + if (getTokenResponse == null || getTokenResponse.getReturnCode() != ResponseMessage.OK.getCode()) { + return null; + } + return getTokenResponse.getData().getToken(); + } } diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java index c502d2d..b539f1d 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java @@ -3,6 +3,7 @@ import io.paytrailpayment.dto.request.*; import io.paytrailpayment.dto.request.model.*; import io.paytrailpayment.dto.response.CreateMitOrCitPaymentResponse; +import io.paytrailpayment.dto.response.GetTokenResponse; import io.paytrailpayment.utilites.ResponseMessage; import org.junit.jupiter.api.Test; @@ -15,7 +16,7 @@ public class CreateMitPaymentChargeTests { private static final String MERCHANTIDN = "375917"; private static final String MERCHANTIDSIS = "695861"; - private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + private static final String SECRETKEYSIS = "MONISAIPPUAKAUPPIAS"; @Test public void createMitPaymentCharge_RequestNull_ReturnCode400() { @@ -53,7 +54,7 @@ public void createMitPaymentCharge_Success_ReturnCode200() { int expected = ResponseMessage.OK.getCode(); // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); CreateMitOrCitPaymentRequest payload = createValidPayload(); CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCharge(payload); int actual = res.getReturnCode(); @@ -96,6 +97,7 @@ private CreateMitOrCitPaymentRequest createValidPayload() { item.setDescription("Cat ladder"); item.setStamp(UUID.randomUUID().toString()); item.setReference("9187445"); + item.setMerchant("695874"); payload.setItems(Arrays.asList(item)); Customer customer = new Customer(); @@ -134,7 +136,23 @@ private CreateMitOrCitPaymentRequest createValidPayload() { payload.setInvoicingAddress(invoicingAddress); payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); - + payload.setToken(this.getToken()); return payload; } + + /** + * Get token + * + * @return + */ + private String getToken() { + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + GetTokenRequest getTokenRequest = new GetTokenRequest(); + getTokenRequest.setCheckoutTokenizationId("1d0a51f6-a60c-477b-94e2-403a0ed37199"); + GetTokenResponse getTokenResponse = payTrail.createGetTokenRequest(getTokenRequest); + if (getTokenResponse == null || getTokenResponse.getReturnCode() != ResponseMessage.OK.getCode()) { + return null; + } + return getTokenResponse.getData().getToken(); + } } diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java index fb2db18..802c332 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java @@ -15,7 +15,7 @@ public class CreateMitPaymentCommitTests { private static final String MERCHANTIDN = "375917"; private static final String MERCHANTIDSIS = "695861"; - private static final String SECRETKEYSIS = "SAIPPUAKAUPPIAS"; + private static final String SECRETKEYSIS = "MONISAIPPUAKAUPPIAS"; @Test public void createMitPaymentCommit_RequestNull_ReturnCode400() { @@ -53,7 +53,7 @@ public void createMitPaymentCommit_Success_ReturnCode200() { int expected = ResponseMessage.OK.getCode(); // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); CreateMitOrCitPaymentRequest payload = createValidPayload(); CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCommit(payload, "0e056dd8-408f-11ee-9cb4-e3059a523029"); int actual = res.getReturnCode(); @@ -96,6 +96,7 @@ private CreateMitOrCitPaymentRequest createValidPayload() { item.setDescription("Cat ladder"); item.setStamp(UUID.randomUUID().toString()); item.setReference("9187445"); + item.setMerchant("695874"); payload.setItems(Arrays.asList(item)); Customer customer = new Customer(); diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java index 4b1887e..17c8664 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java @@ -103,7 +103,7 @@ public void createPaymentReturnStatusCode400WithPayloadValidateFail() { } @Test() - public void createPaymentReturnStatusCode201() { + public void createPaymentReturnStatusCode200() { CreatePaymentRequest req = new CreatePaymentRequest(); req.setStamp(UUID.randomUUID().toString()); @@ -145,8 +145,8 @@ public void createPaymentReturnStatusCode201() { CreatePaymentResponse res = client.createPayment(req); assertNotNull(res); - assertEquals(ResponseMessage.CREATED.getCode(), res.getReturnCode()); - assertEquals(ResponseMessage.CREATED.getDescription(), res.getReturnMessage()); + assertEquals(ResponseMessage.OK.getCode(), res.getReturnCode()); + assertEquals(ResponseMessage.OK.getDescription(), res.getReturnMessage()); assertNotNull(res.getData()); } @@ -342,7 +342,4 @@ public void createPaymentReturnStatusCode400WithVatPercentageNull() throws Excep assertNull(res.getData()); } - - - } diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java index dc6236e..17ca81c 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java @@ -133,9 +133,8 @@ public void createRefundRequestReturnStatusCode403WithPayloadValidateFail() { } @Test() - public void createRefundRequestReturnStatusCode201() { + public void createRefundRequestReturnStatusCode200() { CreateRefundRequest req = new CreateRefundRequest(); - req.setAmount(1590); req.setEmail("test@gmail.com"); req.setRefundStamp(UUID.randomUUID().toString()); @@ -154,9 +153,7 @@ public void createRefundRequestReturnStatusCode201() { callbackUrls.setSuccess("https://ecom.example.org/success"); callbackUrls.setCancel("https://ecom.example.org/cancel"); req.setCallbackUrls(callbackUrls); - CreateRefundResponse res = client.createRefundRequest(req, transactionId); - assertNotNull(res); } From bc8f1f2343afbae8cb6c90f083ac5d0af091b7e3 Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Fri, 21 Feb 2025 13:40:22 +0700 Subject: [PATCH 11/28] Update pom.xml file to add plugins for test and lint --- paytrailpayment-app/pom.xml | 6 +++ .../main/java/io/paytrailpayment/Main.java | 11 +++-- paytrailpayment-sdk/pom.xml | 40 +++++++++++++++++++ 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/paytrailpayment-app/pom.xml b/paytrailpayment-app/pom.xml index dbe8884..b66c732 100644 --- a/paytrailpayment-app/pom.xml +++ b/paytrailpayment-app/pom.xml @@ -34,6 +34,12 @@ jackson-databind 2.14.0 + + io.paytrailpayment + paytrailpayment-sdk + 1.0-SNAPSHOT + compile + diff --git a/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java b/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java index 2a643c2..e6492bd 100644 --- a/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java +++ b/paytrailpayment-app/src/main/java/io/paytrailpayment/Main.java @@ -1,12 +1,11 @@ package io.paytrailpayment; import io.paytrailpayment.dto.request.CreatePaymentRequest; -import io.paytrailpayment.dto.request.model.CallbackUrl; -import io.paytrailpayment.dto.request.model.Customer; -import io.paytrailpayment.dto.request.model.Item; +import io.paytrailpayment.dto.request.model.*; import io.paytrailpayment.dto.response.CreatePaymentResponse; import io.paytrailpayment.utilites.ResponseMessage; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -19,8 +18,8 @@ public static void main(String[] args) { req.setStamp(UUID.randomUUID().toString()); req.setReference("9187445"); - req.setCurrency("EUR"); - req.setLanguage("FI"); + req.setCurrency(PaytrailCurrency.EUR); + req.setLanguage(PaytrailLanguage.FI); req.setOrderId("12335"); req.setAmount(1590); @@ -28,7 +27,7 @@ public static void main(String[] args) { Item item = new Item(); item.setUnitPrice(1590); item.setUnits(1); - item.setVatPercentage(24); + item.setVatPercentage(new BigDecimal(24)); item.setProductCode("#927502759"); items.add(item); diff --git a/paytrailpayment-sdk/pom.xml b/paytrailpayment-sdk/pom.xml index def058c..ffec614 100644 --- a/paytrailpayment-sdk/pom.xml +++ b/paytrailpayment-sdk/pom.xml @@ -66,5 +66,45 @@ 8 UTF-8 + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.5.2 + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.6.0 + + + verify + + check + + + + + google_checks.xml + true + + + + + \ No newline at end of file From 56e98a0ed2d9b9711640cc14ece1a08d5ec08711 Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 09:56:07 +0700 Subject: [PATCH 12/28] Update Unit test case --- .../CreateAddCardFormRequestTests.java | 13 +++- ...reateCitPaymentAuthorizationHoldTests.java | 14 +++-- .../CreateCitPaymentChargeTests.java | 28 +++++++-- .../CreateCitPaymentCommitTests.java | 32 +++------- ...reateMitPaymentAuthorizationHoldTests.java | 13 ++-- .../CreateMitPaymentChargeTests.java | 11 ++-- .../CreateMitPaymentCommitTests.java | 11 ++-- .../CreateRefundRequestUnitTest.java | 23 +++++++- .../paytrailpayment/PayAndAddCardTests.java | 59 +++++-------------- 9 files changed, 102 insertions(+), 102 deletions(-) diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java index c372af7..66ccc85 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java @@ -37,12 +37,21 @@ public void createAddCardFormRequest_RequestNull_ReturnCode400() { } @Test - public void createAddCardFormRequest_ValidateFalse_ReturnCode403() { + public void createAddCardFormRequest_ValidateFalse_ReturnCode401() { // Arrange - int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + int expected = ResponseMessage.UNAUTHORIZED.getCode(); // Act AddCardFormRequest request = new AddCardFormRequest(); + request.setCheckoutAccount(375917); + request.setCheckoutAlgorithm("sha256"); + request.setCheckoutMethod("POST"); + request.setCheckoutNonce("6501220b16b7"); + request.setCheckoutTimestamp("2023-08-22T04:05:20.253Z"); + request.setCheckoutRedirectSuccessUrl("https://somedomain.com/success"); + request.setCheckoutRedirectCancelUrl("https://somedomain.com/cancel"); + request.setLanguage("EN"); + request.setSignature("542e780c253761ed64333d5485391ddd4f55d5e00b7bdc7f60f0f0d15516f888"); AddCardFormResponse res = payTrail.createAddCardFormRequest(request); int actual = res.getReturnCode(); diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java index 2a52fbf..ee52828 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentAuthorizationHoldTests.java @@ -21,7 +21,7 @@ public class CreateCitPaymentAuthorizationHoldTests { @Test public void createCitPaymentAuthorizationHold_RequestNull_ReturnCode400() { // Arrange - int expected = ResponseMessage.RESPONSE_NULL.getCode(); + int expected = ResponseMessage.BAD_REQUEST.getCode(); // Act PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); @@ -34,13 +34,15 @@ public void createCitPaymentAuthorizationHold_RequestNull_ReturnCode400() { } @Test - public void createCitPaymentAuthorizationHold_ValidateFalse_ReturnCode403() { + public void createCitPaymentAuthorizationHold_ValidateFalse_ReturnCode401() { // Arrange - int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + int expected = ResponseMessage.UNAUTHORIZED.getCode(); // Act PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); - CreateMitOrCitPaymentRequest request = new CreateMitOrCitPaymentRequest(); + CreateMitOrCitPaymentRequest request = createValidPayload(); + // set wrong token + request.setToken("1d0a51f6-a60c-477b-94e2-403a0ed37199"); CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(request); int actual = res.getReturnCode(); @@ -63,9 +65,9 @@ public void createCitPaymentAuthorizationHold_Success_ReturnCode200() { } @Test - public void createCitPaymentAuthorizationHold_CallPaytrailReturnFail_ReturnCode500() { + public void createCitPaymentAuthorizationHold_CallPaytrailReturnFail_ReturnCode400() { // Arrange - int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + int expected = ResponseMessage.BAD_REQUEST.getCode(); // Act PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java index 9f65009..9832d40 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentChargeTests.java @@ -17,11 +17,12 @@ public class CreateCitPaymentChargeTests { private static final String MERCHANTIDN = "695874"; private static final String MERCHANTIDSIS = "695861"; private static final String SECRETKEYSIS = "MONISAIPPUAKAUPPIAS"; + private static final String SECRETKEYSIS_BAD = "MONISAIPPUAKAUPPIASS"; @Test public void createCitPaymentCharge_RequestNull_ReturnCode400() { // Arrange - int expected = ResponseMessage.RESPONSE_NULL.getCode(); + int expected = ResponseMessage.BAD_REQUEST.getCode(); // Act PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); @@ -34,9 +35,9 @@ public void createCitPaymentCharge_RequestNull_ReturnCode400() { } @Test - public void createCitPaymentCharge_ValidateFalse_ReturnCode403() { + public void createCitPaymentCharge_ValidateFalse_ReturnCode400_With_Validate_Request() { // Arrange - int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + int expected = ResponseMessage.BAD_REQUEST.getCode(); // Act PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); @@ -64,13 +65,30 @@ public void createCitPaymentCharge_Success_ReturnCode200() { } @Test - public void createCitPaymentCharge_CallPaytrailReturnFail_ReturnCode500() { + public void createCitPaymentCharge_CallPaytrailReturnFail_ReturnCode400_With_Failed_Create_Token_Payment() { // Arrange - int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + int expected = ResponseMessage.BAD_REQUEST.getCode(); // Act PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); CreateMitOrCitPaymentRequest payload = createValidPayload(); + // Set wrong token + payload.setToken("1d0a51f6-a60c-477b-94e2-403a0ed37199"); + CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(payload); + int actual = res.getReturnCode(); + + // Assert + assertEquals(expected, actual); + } + + @Test + public void createCitPaymentCharge_CallPaytrailReturnFail_ReturnCode401() { + // Arrange + int expected = ResponseMessage.UNAUTHORIZED.getCode(); + + // Act + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS_BAD, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCharge(payload); int actual = res.getReturnCode(); diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java index 43b5e3c..42239db 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateCitPaymentCommitTests.java @@ -15,6 +15,7 @@ public class CreateCitPaymentCommitTests { private static final String MERCHANTIDN = "695874"; private static final String MERCHANTIDSIS = "695861"; private static final String SECRETKEYSIS = "MONISAIPPUAKAUPPIAS"; + private static final String SECRETKEYSIS_BAD = "MONISAIPPUAKAUPPIASS"; @Test public void requestNullReturnCode400() { @@ -32,9 +33,9 @@ public void requestNullReturnCode400() { } @Test - public void validateFalseReturnCode403() { + public void validateFalseReturnCode400() { // Arrange - int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + int expected = ResponseMessage.BAD_REQUEST.getCode(); // Act PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); @@ -62,32 +63,13 @@ public void successReturnCode200() { } @Test - public void callPaytrailReturnFailReturnCode500() { + public void callPaytrailReturnFailReturnCode401() { // Arrange - int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + int expected = ResponseMessage.UNAUTHORIZED.getCode(); // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); - CreateMitOrCitPaymentRequest payload = new CreateMitOrCitPaymentRequest(); - payload.setToken("c7441208-c2a1-4a10-8eb6-458bd8eaa64f"); - payload.setStamp(UUID.randomUUID().toString()); - payload.setReference("9187445"); - payload.setAmount(1590); - payload.setCurrency(PaytrailCurrency.EUR); - payload.setLanguage(PaytrailLanguage.FI); - payload.setOrderId(""); - payload.setItems(Arrays.asList(new ShopInShopItem( - 1590, 1, BigDecimal.valueOf(24), "#927502759", "Pet supplies", "Cat ladder", - UUID.randomUUID().toString(), "9187445"))); - payload.setCustomer(new Customer( - "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", - "+358501234567", "123")); - payload.setRedirectUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); - payload.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); - payload.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); - payload.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); - payload.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); - + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS_BAD, "test"); + CreateMitOrCitPaymentRequest payload = createValidPayload(); CreateMitOrCitPaymentResponse res = payTrail.createCitPaymentCommit(payload, "0e056dd8-408f-11ee-9cb4-e3059a523029"); int actual = res.getReturnCode(); diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java index b5b4a57..036204e 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentAuthorizationHoldTests.java @@ -17,11 +17,12 @@ public class CreateMitPaymentAuthorizationHoldTests { private static final String MERCHANTIDN = "375917"; private static final String MERCHANTIDSIS = "695861"; private static final String SECRETKEYSIS = "MONISAIPPUAKAUPPIAS"; + private static final String SECRETKEYSIS_BAD = "MONISAIPPUAKAUPPIASS"; @Test public void createMitPaymentAuthorizationHoldRequestNullReturnCode400() { // Arrange - int expected = ResponseMessage.RESPONSE_NULL.getCode(); + int expected = ResponseMessage.BAD_REQUEST.getCode(); // Act PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); @@ -34,9 +35,9 @@ public void createMitPaymentAuthorizationHoldRequestNullReturnCode400() { } @Test - public void createMitPaymentAuthorizationHoldValidateFalseReturnCode403() { + public void createMitPaymentAuthorizationHoldValidateFalseReturnCode400() { // Arrange - int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + int expected = ResponseMessage.BAD_REQUEST.getCode(); // Act PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); @@ -64,12 +65,12 @@ public void createMitPaymentAuthorizationHoldSuccessReturnCode200() { } @Test - public void createMitPaymentAuthorizationHoldCallPaytrailReturnFailReturnCode500() { + public void createMitPaymentAuthorizationHoldCallPaytrailReturnFailReturnCode401() { // Arrange - int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + int expected = ResponseMessage.UNAUTHORIZED.getCode(); // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS_BAD, "test"); CreateMitOrCitPaymentRequest payload = createValidPayload(); CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentAuthorizationHold(payload); int actual = res.getReturnCode(); diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java index b539f1d..c66edb8 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentChargeTests.java @@ -17,11 +17,12 @@ public class CreateMitPaymentChargeTests { private static final String MERCHANTIDN = "375917"; private static final String MERCHANTIDSIS = "695861"; private static final String SECRETKEYSIS = "MONISAIPPUAKAUPPIAS"; + private static final String SECRETKEYSIS_BAD = "MONISAIPPUAKAUPPIASS"; @Test public void createMitPaymentCharge_RequestNull_ReturnCode400() { // Arrange - int expected = ResponseMessage.RESPONSE_NULL.getCode(); + int expected = ResponseMessage.BAD_REQUEST.getCode(); // Act PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); @@ -36,7 +37,7 @@ public void createMitPaymentCharge_RequestNull_ReturnCode400() { @Test public void createMitPaymentCharge_ValidateFalse_ReturnCode403() { // Arrange - int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + int expected = ResponseMessage.BAD_REQUEST.getCode(); // Act PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); @@ -64,12 +65,12 @@ public void createMitPaymentCharge_Success_ReturnCode200() { } @Test - public void createMitPaymentCharge_CallPaytrailReturnFail_ReturnCode500() { + public void createMitPaymentCharge_CallPaytrailReturnFail_ReturnCode401() { // Arrange - int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + int expected = ResponseMessage.UNAUTHORIZED.getCode(); // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS_BAD, "test"); CreateMitOrCitPaymentRequest payload = createValidPayload(); CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCharge(payload); int actual = res.getReturnCode(); diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java index 802c332..7663c42 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateMitPaymentCommitTests.java @@ -16,11 +16,12 @@ public class CreateMitPaymentCommitTests { private static final String MERCHANTIDN = "375917"; private static final String MERCHANTIDSIS = "695861"; private static final String SECRETKEYSIS = "MONISAIPPUAKAUPPIAS"; + private static final String SECRETKEYSIS_BAD = "MONISAIPPUAKAUPPIASS"; @Test public void createMitPaymentCommit_RequestNull_ReturnCode400() { // Arrange - int expected = ResponseMessage.RESPONSE_NULL.getCode(); + int expected = ResponseMessage.BAD_REQUEST.getCode(); // Act PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); @@ -35,7 +36,7 @@ public void createMitPaymentCommit_RequestNull_ReturnCode400() { @Test public void createMitPaymentCommit_ValidateFalse_ReturnCode403() { // Arrange - int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + int expected = ResponseMessage.BAD_REQUEST.getCode(); // Act PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYSIS, "test"); @@ -63,12 +64,12 @@ public void createMitPaymentCommit_Success_ReturnCode200() { } @Test - public void createMitPaymentCommit_CallPaytrailReturnFail_ReturnCode500() { + public void createMitPaymentCommit_CallPaytrailReturnFail_ReturnCode401() { // Arrange - int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + int expected = ResponseMessage.UNAUTHORIZED.getCode(); // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS_BAD, "test"); CreateMitOrCitPaymentRequest payload = createValidPayload(); CreateMitOrCitPaymentResponse res = payTrail.createMitPaymentCommit(payload, "0e056dd8-408f-11ee-9cb4-e3059a523029"); int actual = res.getReturnCode(); diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java index 17ca81c..4864767 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java @@ -1,5 +1,8 @@ package io.paytrailpayment; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import io.paytrailpayment.dto.request.CreatePaymentRequest; import io.paytrailpayment.dto.request.CreateRefundRequest; import io.paytrailpayment.dto.request.model.*; @@ -77,8 +80,8 @@ public void createRefundRequestReturnStatusCode400WithPayloadNull() { } @Test() - public void createRefundRequestReturnStatusCode400WithFieldRequiredNotFilled() { - String messageExpect = "{\"callbackUrls\":\"Callback Urls can't be null.\",\"items\":\"{\\\"amount\\\":\\\"Item's amount is invalid.\\\"}\"}\n"; + public void createRefundRequestReturnStatusCode400WithFieldRequiredNotFilled() throws JsonProcessingException { + String messageExpect = "{\"callbackUrls\":\"Callback Urls can't be null.\",\"items\":\"{\\\"amount\\\":\\\"Item's amount is invalid. \\\"}\"}\n"; CreateRefundRequest req = new CreateRefundRequest(); req.setEmail("test@gmail.com"); @@ -98,7 +101,21 @@ public void createRefundRequestReturnStatusCode400WithFieldRequiredNotFilled() { assertNotNull(res); assertEquals(ResponseMessage.BAD_REQUEST.getCode(), res.getReturnCode()); - assertEquals(messageExpect, res.getReturnMessage()); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode actualJsonNode = objectMapper.readTree(res.getReturnMessage()); + + // Extract the "item" field which contains the nested JSON string + String itemField = actualJsonNode.get("items").asText(); + + // Parse the nested JSON string inside the "item" field + JsonNode itemJsonNode = objectMapper.readTree(itemField); + // Extract and normalize the callbackUrls and amount messages + String actualCallbackUrlsMessage = actualJsonNode.get("callbackUrls").asText().replace("\\u0027", "'"); + String actualAmountMessage = itemJsonNode.get("amount").asText().replace("\\u0027", "'"); + + // Combine the messages if needed + String actualVatPercentageMessage = "{\"callbackUrls\":\"" + actualCallbackUrlsMessage + "\",\"items\":\"{\\\"amount\\\":\\\"" + actualAmountMessage + "\\\"}\"}\n"; + assertEquals(messageExpect, actualVatPercentageMessage); assertNull(res.getData()); } diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java index 9e6c366..e4a8853 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/PayAndAddCardTests.java @@ -13,16 +13,17 @@ public class PayAndAddCardTests { private static final String MERCHANTIDN = "375917"; - private static final String SECRETKEYN = "SAIPPUAKAUPPIAS"; + private static final String SECRETKEY = "SAIPPUAKAUPPIAS"; private static final String MERCHANTIDSISS = "695874"; + private static final String SECRETKEY_BAD = "SAIPPUAKAUPPIASS"; @Test - public void requestNullReturnCode400() { + public void requestNullReturnCode401() { // Arrange int expected = ResponseMessage.BAD_REQUEST.getCode(); // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEY, "test"); PayAddCardRequest request = null; PayAddCardResponse res = payTrail.payAndAddCard(request); int actual = res.getReturnCode(); @@ -32,12 +33,12 @@ public void requestNullReturnCode400() { } @Test - public void validateFalseReturnCode403() { + public void validateFalseReturnCode401() { // Arrange - int expected = ResponseMessage.VALIDATION_FAILED.getCode(); + int expected = ResponseMessage.BAD_REQUEST.getCode(); // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEY, "test"); PayAddCardRequest request = new PayAddCardRequest(); PayAddCardResponse res = payTrail.payAndAddCard(request); int actual = res.getReturnCode(); @@ -52,7 +53,7 @@ public void successReturnCode200() { int expected = ResponseMessage.OK.getCode(); // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEY, "test"); PayAddCardRequest request = new PayAddCardRequest(); request.setStamp(UUID.randomUUID().toString()); request.setReference("9187445"); @@ -79,12 +80,12 @@ public void successReturnCode200() { } @Test - public void callPaytrailReturnNullReturnCode404() { + public void callPaytrailReturnNullReturnCode401() { // Arrange - int expected = ResponseMessage.RESPONSE_NULL.getCode(); + int expected = ResponseMessage.UNAUTHORIZED.getCode(); // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEY_BAD, "test"); PayAddCardRequest request = new PayAddCardRequest(); request.setStamp(UUID.randomUUID().toString()); request.setReference("9187445"); @@ -111,12 +112,12 @@ public void callPaytrailReturnNullReturnCode404() { } @Test - public void callPaytrailReturnFailReturnCode500() { + public void callPaytrailReturnFailReturnCode400() { // Arrange - int expected = ResponseMessage.RESPONSE_ERROR.getCode(); + int expected = ResponseMessage.BAD_REQUEST.getCode(); // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); + PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEY, "test"); PayAddCardRequest request = new PayAddCardRequest(); request.setStamp(UUID.randomUUID().toString()); request.setReference("9187445"); @@ -142,36 +143,4 @@ public void callPaytrailReturnFailReturnCode500() { // Assert Assertions.assertEquals(expected, actual); } - - @Test - public void callPayExceptionReturnCode503() { - // Arrange - int expected = ResponseMessage.EXCEPTION.getCode(); - - // Act - PaytrailClient payTrail = new PaytrailClient(MERCHANTIDN, SECRETKEYN, "test"); - PayAddCardRequest request = new PayAddCardRequest(); - request.setStamp("1222"); - request.setReference("9187445"); - request.setAmount(1590); - request.setCurrency(PaytrailCurrency.EUR); - request.setLanguage(PaytrailLanguage.FI); - request.setOrderId(""); - request.setItems(Arrays.asList(new Item( - 1590, 1, BigDecimal.valueOf(24), "#927502759", "Pet supplies", "Cat ladder"))); - request.setCustomer(new Customer( - "erja.esimerkki@example.org", "Erja", "FI12345671", "nothing", - "+358501234567", "123")); - request.setRedirectUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); - request.setCallbackUrls(new CallbackUrl("https://ecom.example.org/success", "https://ecom.example.org/cancel")); - request.setDeliveryAddress(new Address("Tampere", "FI", "Pirkanmaa", "33100", "Hämeenkatu 6 B")); - request.setInvoicingAddress(new Address("Helsinki", "FI", "Uusimaa", "00510", "Testikatu 1")); - request.setGroups(Arrays.asList(PaytrailPaymentMethodGroup.mobile.toString())); - - PayAddCardResponse res = payTrail.payAndAddCard(request); - int actual = res.getReturnCode(); - - // Assert - Assertions.assertEquals(expected, actual); - } } From 49001e223b9fcd5c90e2dd252af94500855bdb3a Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 10:43:34 +0700 Subject: [PATCH 13/28] Add github action --- .github/workflows/CI_test.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/CI_test.yml diff --git a/.github/workflows/CI_test.yml b/.github/workflows/CI_test.yml new file mode 100644 index 0000000..e7658ef --- /dev/null +++ b/.github/workflows/CI_test.yml @@ -0,0 +1,31 @@ +name: Lint and Test + +on: + pull_request: + branches: + - develop + - main + +jobs: + lint-and-test: + runs-on: ubuntu-latest + strategy: + matrix: + java-version: [8] + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up JDK ${{ matrix.java-version }} + uses: actions/setup-java@v3 + with: + java-version: ${{ matrix.java-version }} + distribution: temurin + - name: Validate Maven dependencies + working-directory: ./paytrailpayment-sdk + run: mvn dependency:resolve + + # Step 4: Run Maven lint checks (Checkstyle, SpotBugs, etc.) + - name: Run Maven lint checks + working-directory: ./paytrailpayment-sdk + run: mvn checkstyle:check \ No newline at end of file From a9abf02ee8f1385a83528a147338fda0a56d5142 Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 10:53:33 +0700 Subject: [PATCH 14/28] Update github action - multi java version --- .github/workflows/CI_test.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/CI_test.yml b/.github/workflows/CI_test.yml index e7658ef..e22cb47 100644 --- a/.github/workflows/CI_test.yml +++ b/.github/workflows/CI_test.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java-version: [8] + java-version: [8,11,17] steps: - name: Checkout code uses: actions/checkout@v4 @@ -28,4 +28,9 @@ jobs: # Step 4: Run Maven lint checks (Checkstyle, SpotBugs, etc.) - name: Run Maven lint checks working-directory: ./paytrailpayment-sdk - run: mvn checkstyle:check \ No newline at end of file + run: mvn checkstyle:check + + # Step 5: Run Maven tests + - name: Run Maven tests + working-directory: ./paytrailpayment-sdk + run: mvn test \ No newline at end of file From a31967b4fa25add0e1bb6e71effdae1270227435 Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 11:07:07 +0700 Subject: [PATCH 15/28] Update github action - multi java version --- .github/workflows/CI_test.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/CI_test.yml b/.github/workflows/CI_test.yml index e22cb47..b93243c 100644 --- a/.github/workflows/CI_test.yml +++ b/.github/workflows/CI_test.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java-version: [8,11,17] + java-version: [8,11,17,21] steps: - name: Checkout code uses: actions/checkout@v4 @@ -21,16 +21,20 @@ jobs: with: java-version: ${{ matrix.java-version }} distribution: temurin - - name: Validate Maven dependencies + - name: Check current Java version + run: java -version + + # Step 3: Validate Maven dependencies + - name: Validate Maven dependencies with Java ${{ matrix.java-version }} working-directory: ./paytrailpayment-sdk run: mvn dependency:resolve # Step 4: Run Maven lint checks (Checkstyle, SpotBugs, etc.) - - name: Run Maven lint checks + - name: Run Maven lint checks with Java ${{ matrix.java-version }} working-directory: ./paytrailpayment-sdk run: mvn checkstyle:check # Step 5: Run Maven tests - - name: Run Maven tests + - name: Run Maven tests with Java ${{ matrix.java-version }} working-directory: ./paytrailpayment-sdk run: mvn test \ No newline at end of file From ec9497d5eb8ec84efacd0244f04815ff60f3fb26 Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 11:50:48 +0700 Subject: [PATCH 16/28] Add cache for maven --- .github/workflows/CI_test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/CI_test.yml b/.github/workflows/CI_test.yml index b93243c..9b4a159 100644 --- a/.github/workflows/CI_test.yml +++ b/.github/workflows/CI_test.yml @@ -21,6 +21,7 @@ jobs: with: java-version: ${{ matrix.java-version }} distribution: temurin + cache: maven - name: Check current Java version run: java -version From e0355be5e2c44069488c417a31256c2614e75184 Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 13:49:43 +0700 Subject: [PATCH 17/28] Add cache for maven --- .github/workflows/CI_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI_test.yml b/.github/workflows/CI_test.yml index 9b4a159..2e694f4 100644 --- a/.github/workflows/CI_test.yml +++ b/.github/workflows/CI_test.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java-version: [8,11,17,21] + java-version: [8,11,17] steps: - name: Checkout code uses: actions/checkout@v4 From b83b5ec25f11facb458a27404dc76c46c5238508 Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 13:53:36 +0700 Subject: [PATCH 18/28] Update github action --- .github/workflows/CI_test.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI_test.yml b/.github/workflows/CI_test.yml index 2e694f4..8ae57da 100644 --- a/.github/workflows/CI_test.yml +++ b/.github/workflows/CI_test.yml @@ -10,8 +10,9 @@ jobs: lint-and-test: runs-on: ubuntu-latest strategy: + fail-fast: false matrix: - java-version: [8,11,17] + java-version: [8,11,17,21] steps: - name: Checkout code uses: actions/checkout@v4 From f1e5c08e35f1116c30fa0515dbab3719347207af Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 14:05:13 +0700 Subject: [PATCH 19/28] Update github action --- .github/workflows/CI_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI_test.yml b/.github/workflows/CI_test.yml index 8ae57da..88ad4d0 100644 --- a/.github/workflows/CI_test.yml +++ b/.github/workflows/CI_test.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - java-version: [8,11,17,21] + java-version: [8,11,17,21,22,23] steps: - name: Checkout code uses: actions/checkout@v4 From a7985dea5dd46a818c37821d181ea5134c470dcf Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 14:10:17 +0700 Subject: [PATCH 20/28] Update github action --- .github/workflows/CI_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI_test.yml b/.github/workflows/CI_test.yml index 88ad4d0..6e75f21 100644 --- a/.github/workflows/CI_test.yml +++ b/.github/workflows/CI_test.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - java-version: [8,11,17,21,22,23] + java-version: [8,11,17,18,19,20,21,22,23] steps: - name: Checkout code uses: actions/checkout@v4 From 931cc0976f9572b0d0c3d00d71461cf101097fec Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 14:14:31 +0700 Subject: [PATCH 21/28] Switch distribution to Oracle java --- .github/workflows/CI_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI_test.yml b/.github/workflows/CI_test.yml index 6e75f21..f66d731 100644 --- a/.github/workflows/CI_test.yml +++ b/.github/workflows/CI_test.yml @@ -21,7 +21,7 @@ jobs: uses: actions/setup-java@v3 with: java-version: ${{ matrix.java-version }} - distribution: temurin + distribution: oracle cache: maven - name: Check current Java version run: java -version From aa8647b85b9baa10f1aeab4811e0f5f0f3c72edc Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 14:18:49 +0700 Subject: [PATCH 22/28] Update github action --- .github/workflows/CI_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI_test.yml b/.github/workflows/CI_test.yml index f66d731..6e75f21 100644 --- a/.github/workflows/CI_test.yml +++ b/.github/workflows/CI_test.yml @@ -21,7 +21,7 @@ jobs: uses: actions/setup-java@v3 with: java-version: ${{ matrix.java-version }} - distribution: oracle + distribution: temurin cache: maven - name: Check current Java version run: java -version From c96bc06af85817bb727d52d44a5efa2118c7392d Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 14:49:30 +0700 Subject: [PATCH 23/28] Update lombok version to 1.18.30 for JDK 21 --- .../paytrailpayment/CreateAddCardFormRequestTests.java | 8 ++++---- .../java/io/paytrailpayment/CreatePaymentUnitTest.java | 10 ++++------ .../paytrailpayment/CreateRefundRequestUnitTest.java | 8 ++++---- .../java/io/paytrailpayment/GetPaymentUnitTest.java | 8 ++++---- .../src/test/java/io/paytrailpayment/TestCase.java | 2 -- pom.xml | 2 +- 6 files changed, 17 insertions(+), 21 deletions(-) diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java index 66ccc85..6de588b 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateAddCardFormRequestTests.java @@ -4,8 +4,8 @@ import io.paytrailpayment.dto.request.AddCardFormRequest; import io.paytrailpayment.dto.response.AddCardFormResponse; import io.paytrailpayment.utilites.ResponseMessage; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; @@ -17,8 +17,8 @@ public class CreateAddCardFormRequestTests extends TestCase { private static final String SECRETKEYSIS = "MONISAIPPUAKAUPPIAS"; private PaytrailClient payTrail; - @Before - public void setUp() { + @BeforeEach + public void init() { payTrail = new PaytrailClient(MERCHANTIDSIS, SECRETKEYSIS, "test"); } diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java index 17c8664..a6e68bf 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreatePaymentUnitTest.java @@ -3,16 +3,14 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import io.paytrailpayment.PaytrailClient; -import io.paytrailpayment.TestCase; import io.paytrailpayment.dto.request.CreatePaymentRequest; import io.paytrailpayment.dto.request.model.*; import io.paytrailpayment.dto.request.model.PaytrailCurrency; import io.paytrailpayment.dto.response.CreatePaymentResponse; import io.paytrailpayment.utilites.ResponseMessage; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.math.BigDecimal; import java.util.*; @@ -22,8 +20,8 @@ public class CreatePaymentUnitTest extends TestCase { private PaytrailClient client; - @Before - public void setUp() { + @BeforeEach + public void init() { // Initialize your PaytrailClient here with default values for all tests or any other setup. client = new PaytrailClient(this.merchantId, this.secretKey, this.platformName); } diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java index 4864767..44020e0 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/CreateRefundRequestUnitTest.java @@ -9,8 +9,8 @@ import io.paytrailpayment.dto.response.CreatePaymentResponse; import io.paytrailpayment.dto.response.CreateRefundResponse; import io.paytrailpayment.utilites.ResponseMessage; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.math.BigDecimal; import java.util.ArrayList; @@ -23,8 +23,8 @@ public class CreateRefundRequestUnitTest extends TestCase { private PaytrailClient client; private String transactionId; - @Before - public void setUp() { + @BeforeEach + public void init() { client = new PaytrailClient(this.merchantId, this.secretKey, this.platformName); CreatePaymentRequest req = new CreatePaymentRequest(); diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/GetPaymentUnitTest.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/GetPaymentUnitTest.java index 06d1439..c7f9cca 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/GetPaymentUnitTest.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/GetPaymentUnitTest.java @@ -5,8 +5,8 @@ import io.paytrailpayment.dto.response.CreatePaymentResponse; import io.paytrailpayment.dto.response.GetPaymentResponse; import io.paytrailpayment.utilites.ResponseMessage; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import java.math.BigDecimal; import java.util.ArrayList; @@ -19,8 +19,8 @@ public class GetPaymentUnitTest extends TestCase { private PaytrailClient client; private String transactionId; - @Before - public void setUp() { + @BeforeEach + public void init() { client = new PaytrailClient(this.merchantId, this.secretKey, this.platformName); CreatePaymentRequest req = new CreatePaymentRequest(); diff --git a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/TestCase.java b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/TestCase.java index 95eeed3..cdbc7d7 100644 --- a/paytrailpayment-sdk/src/test/java/io/paytrailpayment/TestCase.java +++ b/paytrailpayment-sdk/src/test/java/io/paytrailpayment/TestCase.java @@ -4,6 +4,4 @@ public abstract class TestCase { protected final String merchantId = "375917"; protected final String secretKey = "SAIPPUAKAUPPIAS"; protected final String platformName = "test"; - - public abstract void setUp(); } diff --git a/pom.xml b/pom.xml index e619f0c..307b18d 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ 8 UTF-8 5.9.0 - 1.18.26 + 1.18.30 io.paytrailpayment From d45c30568d67a89afa20f359b41a5260b818c2d1 Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 14:58:56 +0700 Subject: [PATCH 24/28] Update github action --- .github/workflows/CI_test.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/CI_test.yml b/.github/workflows/CI_test.yml index 6e75f21..5ed13d1 100644 --- a/.github/workflows/CI_test.yml +++ b/.github/workflows/CI_test.yml @@ -22,7 +22,6 @@ jobs: with: java-version: ${{ matrix.java-version }} distribution: temurin - cache: maven - name: Check current Java version run: java -version From c98f21cfbc7c48db2bfad84d23a6c2d5b795eff4 Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 15:07:04 +0700 Subject: [PATCH 25/28] Update lombok version to 1.18.30 for JDK 21 --- paytrailpayment-app/pom.xml | 2 +- paytrailpayment-sdk/pom.xml | 2 +- pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/paytrailpayment-app/pom.xml b/paytrailpayment-app/pom.xml index b66c732..75cf236 100644 --- a/paytrailpayment-app/pom.xml +++ b/paytrailpayment-app/pom.xml @@ -16,7 +16,7 @@ org.projectlombok lombok - 1.18.26 + 1.18.30 org.junit.jupiter diff --git a/paytrailpayment-sdk/pom.xml b/paytrailpayment-sdk/pom.xml index ffec614..ba9d662 100644 --- a/paytrailpayment-sdk/pom.xml +++ b/paytrailpayment-sdk/pom.xml @@ -15,7 +15,7 @@ org.projectlombok lombok - 1.18.26 + 1.18.30 org.junit.jupiter diff --git a/pom.xml b/pom.xml index 307b18d..ccbd3fd 100644 --- a/pom.xml +++ b/pom.xml @@ -36,7 +36,7 @@ org.projectlombok lombok - 1.18.26 + 1.18.30 org.junit.jupiter From a7474d9a29c208b1ebb633c88582d2efe60e1920 Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 15:24:51 +0700 Subject: [PATCH 26/28] Update lombok version to 1.18.36 for JDK 23 --- paytrailpayment-app/pom.xml | 2 +- paytrailpayment-sdk/pom.xml | 2 +- pom.xml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/paytrailpayment-app/pom.xml b/paytrailpayment-app/pom.xml index 75cf236..e952174 100644 --- a/paytrailpayment-app/pom.xml +++ b/paytrailpayment-app/pom.xml @@ -16,7 +16,7 @@ org.projectlombok lombok - 1.18.30 + 1.18.36 org.junit.jupiter diff --git a/paytrailpayment-sdk/pom.xml b/paytrailpayment-sdk/pom.xml index ba9d662..643a0a2 100644 --- a/paytrailpayment-sdk/pom.xml +++ b/paytrailpayment-sdk/pom.xml @@ -15,7 +15,7 @@ org.projectlombok lombok - 1.18.30 + 1.18.36 org.junit.jupiter diff --git a/pom.xml b/pom.xml index ccbd3fd..ca8e7c3 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ 8 UTF-8 5.9.0 - 1.18.30 + 1.18.36 io.paytrailpayment @@ -36,7 +36,7 @@ org.projectlombok lombok - 1.18.30 + 1.18.36 org.junit.jupiter From 934b5295cb1509934b28cdc9a53a451d7de90613 Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 15:50:50 +0700 Subject: [PATCH 27/28] Update lombok version to 1.18.36 for JDK 23 --- paytrailpayment-app/pom.xml | 1 + paytrailpayment-sdk/pom.xml | 1 + pom.xml | 1 + 3 files changed, 3 insertions(+) diff --git a/paytrailpayment-app/pom.xml b/paytrailpayment-app/pom.xml index e952174..a522b24 100644 --- a/paytrailpayment-app/pom.xml +++ b/paytrailpayment-app/pom.xml @@ -17,6 +17,7 @@ org.projectlombok lombok 1.18.36 + provided org.junit.jupiter diff --git a/paytrailpayment-sdk/pom.xml b/paytrailpayment-sdk/pom.xml index 643a0a2..77b2181 100644 --- a/paytrailpayment-sdk/pom.xml +++ b/paytrailpayment-sdk/pom.xml @@ -16,6 +16,7 @@ org.projectlombok lombok 1.18.36 + provided org.junit.jupiter diff --git a/pom.xml b/pom.xml index ca8e7c3..6822fca 100644 --- a/pom.xml +++ b/pom.xml @@ -37,6 +37,7 @@ org.projectlombok lombok 1.18.36 + provided org.junit.jupiter From 96aa527d910d9e154c7446e871c7cd73e38b3158 Mon Sep 17 00:00:00 2001 From: OttiaDevsPT Date: Mon, 24 Feb 2025 15:56:19 +0700 Subject: [PATCH 28/28] Update lombok version to 1.18.36 for JDK 23 --- paytrailpayment-sdk/pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/paytrailpayment-sdk/pom.xml b/paytrailpayment-sdk/pom.xml index 77b2181..943cd67 100644 --- a/paytrailpayment-sdk/pom.xml +++ b/paytrailpayment-sdk/pom.xml @@ -76,6 +76,13 @@ ${maven.compiler.source} ${maven.compiler.target} + + + org.projectlombok + lombok + 1.18.36 + +