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
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Main properties
group=com.truelayer
archivesBaseName=truelayer-java
version=14.2.0
version=14.3.0

# Artifacts properties
sonatype_repository_url=https://s01.oss.sonatype.org/service/local/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.truelayer.java.entities.CurrencyCode;
import com.truelayer.java.payouts.entities.beneficiary.Beneficiary;
import com.truelayer.java.payouts.entities.submerchants.SubMerchants;
import java.util.Map;
import lombok.Builder;
import lombok.EqualsAndHashCode;
Expand All @@ -17,5 +18,6 @@ public class CreatePayoutRequest {
private int amountInMinor;
private CurrencyCode currency;
private Beneficiary beneficiary;
private SubMerchants subMerchants;
private Map<String, String> metadata;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.truelayer.java.payouts.entities.submerchants;

import com.truelayer.java.entities.Address;
import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class BusinessClient extends UltimateCounterparty {
private final Type type = Type.BUSINESS_CLIENT;
private String tradingName;
private String commercialName;
private String url;
private String mcc;
private String registrationNumber;
private Address address;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.truelayer.java.payouts.entities.submerchants;

import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class SubMerchants {
private UltimateCounterparty ultimateCounterparty;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.truelayer.java.payouts.entities.submerchants;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonValue;
import com.truelayer.java.TrueLayerException;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", defaultImpl = BusinessClient.class)
@JsonSubTypes({@JsonSubTypes.Type(value = BusinessClient.class, name = "business_client")})
public abstract class UltimateCounterparty {

@JsonIgnore
public abstract Type getType();

@JsonIgnore
public boolean isBusinessClient() {
return this instanceof BusinessClient;
}

@JsonIgnore
public BusinessClient asBusinessClient() {
if (!isBusinessClient()) throw new TrueLayerException(buildErrorMessage());
return (BusinessClient) this;
}

public static BusinessClient.BusinessClientBuilder businessClient() {
return new BusinessClient.BusinessClientBuilder();
}

private String buildErrorMessage() {
return String.format(
"UltimateCounterparty is of type %s.", this.getClass().getSimpleName());
}

@Getter
@RequiredArgsConstructor
public enum Type {
BUSINESS_CLIENT("business_client");

@JsonValue
private final String type;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import com.truelayer.java.payouts.entities.Payout;
import com.truelayer.java.payouts.entities.accountidentifier.AccountIdentifier;
import com.truelayer.java.payouts.entities.beneficiary.Beneficiary;
import com.truelayer.java.payouts.entities.submerchants.BusinessClient;
import com.truelayer.java.payouts.entities.submerchants.SubMerchants;
import java.util.Collections;
import lombok.SneakyThrows;
import org.apache.commons.lang3.RandomUtils;
Expand Down Expand Up @@ -41,6 +43,12 @@ public void shouldCreateAPayoutAndGetPayoutsDetails() {
.reference("Java SDK payout test")
.accountHolderName("LucaB merchant")
.build())
.subMerchants(SubMerchants.builder()
.ultimateCounterparty(BusinessClient.businessClient()
.tradingName("A sub merchant trading name")
.registrationNumber("123456")
.build())
.build())
.metadata(Collections.singletonMap("a_custom_key", "a-custom-value"))
.build();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.truelayer.java.payouts.entities.submerchants;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

public class UltimateCounterpartyTests {

@Test
@DisplayName("It should yield true if instance is of type BusinessClient")
public void shouldYieldTrueIfBusinessClient() {
UltimateCounterparty sut =
new BusinessClient.BusinessClientBuilder().tradingName("a-name").build();

assertTrue(sut.isBusinessClient());
}

@Test
@DisplayName("It should convert to an instance of class BusinessClient")
public void shouldConvertToBusinessClient() {
UltimateCounterparty sut =
new BusinessClient.BusinessClientBuilder().tradingName("a-name").build();

assertDoesNotThrow(sut::asBusinessClient);
}
}