Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import com.checkout.handlepaymentsandpayouts.setups.entities.paymentMethods.twint.Twint;
import com.checkout.handlepaymentsandpayouts.setups.entities.paymentMethods.vipps.Vipps;
import com.checkout.handlepaymentsandpayouts.setups.entities.paymentMethods.wechatpay.WeChatPay;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
Expand Down Expand Up @@ -298,9 +299,10 @@ public final class PaymentMethods {
private CardPresent cardPresent;

/**
* Pay by Bank (Open Banking) payment method configuration.
* Pay by Bank (Open Banking) payment method configuration. Serialized as {@code paybybank}.
* [Optional]
*/
@SerializedName("paybybank")
private PayByBank payByBank;

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.checkout.handlepaymentsandpayouts.setups.entities.risk;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
* Risk assessment settings for the Payment Setup.
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public final class PaymentSetupRisk {

/**
* Indicates whether a risk assessment should be performed.
* [Optional]
* Default: true
*/
private Boolean enabled;
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.checkout.handlepaymentsandpayouts.setups.entities.paymentMethods.PaymentMethods;
import com.checkout.handlepaymentsandpayouts.setups.entities.billingDescriptor.PaymentSetupBillingDescriptor;
import com.checkout.handlepaymentsandpayouts.setups.entities.presentmentDetails.PaymentSetupPresentmentDetails;
import com.checkout.handlepaymentsandpayouts.setups.entities.risk.PaymentSetupRisk;
import com.checkout.handlepaymentsandpayouts.setups.entities.settings.Settings;
import com.checkout.handlepaymentsandpayouts.setups.entities.terminal.PaymentSetupTerminal;
import lombok.AllArgsConstructor;
Expand Down Expand Up @@ -126,4 +127,10 @@ public final class PaymentSetupsRequest {
* [Optional]
*/
private PaymentSetupTerminal terminal;

/**
* Risk assessment settings for the Payment Setup.
* [Optional]
*/
private PaymentSetupRisk risk;
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.checkout.handlepaymentsandpayouts.setups.entities.order.Order;
import com.checkout.handlepaymentsandpayouts.setups.entities.paymentMethods.PaymentMethods;
import com.checkout.handlepaymentsandpayouts.setups.entities.presentmentDetails.PaymentSetupPresentmentDetails;
import com.checkout.handlepaymentsandpayouts.setups.entities.risk.PaymentSetupRisk;
import com.checkout.handlepaymentsandpayouts.setups.entities.settings.Settings;
import com.checkout.handlepaymentsandpayouts.setups.entities.terminal.PaymentSetupTerminal;
import com.checkout.payments.PaymentType;
Expand Down Expand Up @@ -149,4 +150,10 @@ public final class PaymentSetupsResponse extends Resource {
* [Optional]
*/
private PaymentSetupTerminal terminal;

/**
* Risk assessment settings for the Payment Setup.
* [Optional]
*/
private PaymentSetupRisk risk;
}
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,8 @@ void shouldSerializeNewPaymentMethods() {
final String methodsJson = serializer.toJson(methods);
assertTrue(methodsJson.contains("\"bacs\""));
assertTrue(methodsJson.contains("\"card_present\""));
assertTrue(methodsJson.contains("\"pay_by_bank\""));
assertTrue(methodsJson.contains("\"paybybank\""));
assertFalse(methodsJson.contains("pay_by_bank"));
assertTrue(methodsJson.contains("\"stablecoin\""));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package com.checkout.handlepaymentsandpayouts.setups;

import com.checkout.GsonSerializer;
import com.checkout.common.Currency;
import com.checkout.handlepaymentsandpayouts.setups.entities.paymentMethods.PaymentMethods;
import com.checkout.handlepaymentsandpayouts.setups.entities.paymentMethods.paybybank.PayByBank;
import com.checkout.handlepaymentsandpayouts.setups.entities.paymentMethods.paybybank.PayByBankAction;
import com.checkout.handlepaymentsandpayouts.setups.entities.paymentMethods.paybybank.PayByBankBank;
import com.checkout.handlepaymentsandpayouts.setups.entities.risk.PaymentSetupRisk;
import com.checkout.handlepaymentsandpayouts.setups.requests.PaymentSetupsRequest;
import com.checkout.handlepaymentsandpayouts.setups.responses.PaymentSetupsResponse;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.junit.jupiter.api.Test;

import java.util.Collections;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;

/**
* Wire format tests for the Payment Setup {@code payment_methods.paybybank} key and the {@code risk} object.
*/
class PaymentSetupsPayByBankSerializationTest {

private final GsonSerializer serializer = new GsonSerializer();

@Test
void shouldSerializePayByBankWithLiteralPaybybankKey() {
final PayByBank payByBank = new PayByBank();
payByBank.setBankId("bank_123");
final PaymentSetupsRequest request = PaymentSetupsRequest.builder()
.processingChannelId("pc_q4dbxom5jbgudnjzjpz7j2z6uq")
.amount(1000L)
.currency(Currency.GBP)
.paymentMethods(PaymentMethods.builder().payByBank(payByBank).build())
.build();

final String json = serializer.toJson(request);

assertTrue(json.contains("\"paybybank\""));
assertFalse(json.contains("pay_by_bank"));
final JsonObject root = JsonParser.parseString(json).getAsJsonObject();
assertEquals("bank_123", root.getAsJsonObject("payment_methods")
.getAsJsonObject("paybybank").get("bank_id").getAsString());
}

@Test
void shouldDeserializePayByBankActionFromResponse() {
final String json = "{"
+ "\"id\":\"ps_123\","
+ "\"payment_methods\":{\"paybybank\":{"
+ "\"status\":\"action_required\","
+ "\"flags\":[\"flag\"],"
+ "\"bank_id\":\"bank_123\","
+ "\"action\":{\"type\":\"select_bank\",\"banks\":[{"
+ "\"bank_id\":\"bank_123\",\"display_name\":\"Example Bank\","
+ "\"logo_url\":\"https://example.com/logo.png\",\"available\":true}]}"
+ "}},"
+ "\"risk\":{\"enabled\":false}"
+ "}";

final PaymentSetupsResponse response = serializer.fromJson(json, PaymentSetupsResponse.class);

final PayByBank payByBank = response.getPaymentMethods().getPayByBank();
assertNotNull(payByBank);
assertEquals(Collections.singletonList("flag"), payByBank.getFlags());
assertEquals("bank_123", payByBank.getBankId());
final PayByBankAction action = payByBank.getAction();
assertNotNull(action);
assertEquals("select_bank", action.getType());
final PayByBankBank bank = action.getBanks().get(0);
assertEquals("bank_123", bank.getBankId());
assertEquals("Example Bank", bank.getDisplayName());
assertEquals("https://example.com/logo.png", bank.getLogoUrl());
assertTrue(bank.getAvailable());
assertFalse(response.getRisk().getEnabled());
}

@Test
void shouldSerializeAndRoundTripRiskEnabled() {
final PaymentSetupsRequest request = PaymentSetupsRequest.builder()
.risk(PaymentSetupRisk.builder().enabled(true).build())
.build();

final String json = serializer.toJson(request);
final JsonObject root = JsonParser.parseString(json).getAsJsonObject();
assertTrue(root.getAsJsonObject("risk").get("enabled").getAsBoolean());

final PaymentSetupsRequest restored = serializer.fromJson(json, PaymentSetupsRequest.class);
assertEquals(request.getRisk(), restored.getRisk());
}

@Test
void shouldDeserializeRiskSwaggerExample() {
final PaymentSetupRisk risk = serializer.fromJson("{\"enabled\":true}", PaymentSetupRisk.class);
assertTrue(risk.getEnabled());
}
}
Loading