Skip to content

Commit

Permalink
[ACL-167] Add sub_merchants support to payouts (#320)
Browse files Browse the repository at this point in the history
  • Loading branch information
tl-luca-baggi authored Oct 16, 2024
1 parent 9eb181b commit 709dfe9
Show file tree
Hide file tree
Showing 7 changed files with 111 additions and 1 deletion.
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);
}
}

0 comments on commit 709dfe9

Please sign in to comment.