Skip to content

Commit 264bee8

Browse files
committed
moar tests
1 parent 914d0e3 commit 264bee8

22 files changed

+690
-57
lines changed

xrpl4j-client/src/main/java/org/xrpl/xrpl4j/client/XrplClient.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@
6868
import org.xrpl.xrpl4j.model.client.ledger.LedgerEntryResult;
6969
import org.xrpl.xrpl4j.model.client.ledger.LedgerRequestParams;
7070
import org.xrpl.xrpl4j.model.client.ledger.LedgerResult;
71+
import org.xrpl.xrpl4j.model.client.mpt.MptHoldersRequestParams;
72+
import org.xrpl.xrpl4j.model.client.mpt.MptHoldersResponse;
7173
import org.xrpl.xrpl4j.model.client.nft.NftBuyOffersRequestParams;
7274
import org.xrpl.xrpl4j.model.client.nft.NftBuyOffersResult;
7375
import org.xrpl.xrpl4j.model.client.nft.NftInfoRequestParams;
@@ -873,6 +875,24 @@ public GetAggregatePriceResult getAggregatePrice(
873875
return jsonRpcClient.send(request, GetAggregatePriceResult.class);
874876
}
875877

878+
/**
879+
* Get all holders of an MPT and their balance. The mpt_holders method is only available on Clio nodes.
880+
*
881+
* @param params An {@link MptHoldersRequestParams}.
882+
*
883+
* @return An {@link MptHoldersResponse}.
884+
*
885+
* @throws JsonRpcClientErrorException if {@code js nRpcClient} throws an error.
886+
*/
887+
public MptHoldersResponse mptHolders(MptHoldersRequestParams params) throws JsonRpcClientErrorException {
888+
JsonRpcRequest request = JsonRpcRequest.builder()
889+
.method(XrplMethods.MPT_HOLDERS)
890+
.addParams(params)
891+
.build();
892+
893+
return jsonRpcClient.send(request, MptHoldersResponse.class);
894+
}
895+
876896
public JsonRpcClient getJsonRpcClient() {
877897
return jsonRpcClient;
878898
}

xrpl4j-client/src/test/java/org/xrpl/xrpl4j/client/XrplClientTest.java

Lines changed: 20 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@
4242
import org.junit.jupiter.api.Test;
4343
import org.mockito.ArgumentCaptor;
4444
import org.mockito.Mock;
45-
import org.xrpl.xrpl4j.client.faucet.FaucetClient;
46-
import org.xrpl.xrpl4j.client.faucet.FundAccountRequest;
4745
import org.xrpl.xrpl4j.crypto.keys.KeyPair;
4846
import org.xrpl.xrpl4j.crypto.keys.Seed;
4947
import org.xrpl.xrpl4j.crypto.signing.MultiSignedTransaction;
@@ -83,6 +81,8 @@
8381
import org.xrpl.xrpl4j.model.client.ledger.LedgerEntryResult;
8482
import org.xrpl.xrpl4j.model.client.ledger.LedgerRequestParams;
8583
import org.xrpl.xrpl4j.model.client.ledger.LedgerResult;
84+
import org.xrpl.xrpl4j.model.client.mpt.MptHoldersRequestParams;
85+
import org.xrpl.xrpl4j.model.client.mpt.MptHoldersResponse;
8686
import org.xrpl.xrpl4j.model.client.nft.NftBuyOffersRequestParams;
8787
import org.xrpl.xrpl4j.model.client.nft.NftBuyOffersResult;
8888
import org.xrpl.xrpl4j.model.client.nft.NftInfoRequestParams;
@@ -116,7 +116,6 @@
116116
import org.xrpl.xrpl4j.model.ledger.LedgerObject;
117117
import org.xrpl.xrpl4j.model.transactions.Address;
118118
import org.xrpl.xrpl4j.model.transactions.Hash256;
119-
import org.xrpl.xrpl4j.model.transactions.Marker;
120119
import org.xrpl.xrpl4j.model.transactions.NfTokenId;
121120
import org.xrpl.xrpl4j.model.transactions.Payment;
122121
import org.xrpl.xrpl4j.model.transactions.Signer;
@@ -149,48 +148,6 @@ void setUp() {
149148
xrplClient = new XrplClient(jsonRpcClientMock);
150149
}
151150

152-
@Test
153-
void name() throws JsonRpcClientErrorException {
154-
xrplClient = new XrplClient(HttpUrl.get("https://stylish-powerful-glade.xrp-mainnet.quiknode.pro/33a542bf497c0d2b6c504387690bf8eafec57202/"));
155-
156-
int count = 0;
157-
AccountLinesResult lines = xrplClient.accountLines(
158-
AccountLinesRequestParams.builder()
159-
.account(Address.of("rMxCKbEDwqr76QuheSUMdEGf4B9xJ8m5De"))
160-
.ledgerSpecifier(LedgerSpecifier.VALIDATED)
161-
.limit(UnsignedInteger.valueOf(500))
162-
.build()
163-
);
164-
count += lines.lines().size();
165-
166-
lines.lines()
167-
.forEach(line -> {
168-
if (line.currency().length() == 1) {
169-
System.out.println("FOUND: " + line);
170-
}
171-
});
172-
while (lines.marker().isPresent()) {
173-
lines = xrplClient.accountLines(
174-
AccountLinesRequestParams.builder()
175-
.account(Address.of("rMxCKbEDwqr76QuheSUMdEGf4B9xJ8m5De"))
176-
.ledgerSpecifier(LedgerSpecifier.VALIDATED)
177-
.limit(UnsignedInteger.valueOf(500))
178-
.marker(lines.marker())
179-
.build()
180-
);
181-
lines.lines()
182-
.forEach(line -> {
183-
if (line.currency().length() == 1) {
184-
System.out.println("FOUND: " + line);
185-
}
186-
});
187-
count += lines.lines().size();
188-
}
189-
190-
System.out.println("Found trustlines: " + count);
191-
192-
}
193-
194151
@Test
195152
public void depositAuthorized() throws JsonRpcClientErrorException {
196153
DepositAuthorizedRequestParams depositAuthorized = DepositAuthorizedRequestParams.builder()
@@ -1166,4 +1123,22 @@ void getAggregatePrice() throws JsonRpcClientErrorException {
11661123

11671124
assertThat(result).isEqualTo(expectedResult);
11681125
}
1126+
1127+
@Test
1128+
void mptHolders() throws JsonRpcClientErrorException {
1129+
MptHoldersRequestParams params = mock(MptHoldersRequestParams.class);
1130+
MptHoldersResponse expectedResult = mock(MptHoldersResponse.class);
1131+
1132+
when(jsonRpcClientMock.send(
1133+
JsonRpcRequest.builder()
1134+
.method(XrplMethods.MPT_HOLDERS)
1135+
.addParams(params)
1136+
.build(),
1137+
MptHoldersResponse.class
1138+
)).thenReturn(expectedResult);
1139+
1140+
MptHoldersResponse result = xrplClient.mptHolders(params);
1141+
1142+
assertThat(result).isEqualTo(expectedResult);
1143+
}
11691144
}

xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/client/XrplMethods.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,4 +234,5 @@ public class XrplMethods {
234234
public static final String PING = "ping";
235235

236236
public static final String GET_AGGREGATE_PRICE = "get_aggregate_price";
237+
public static final String MPT_HOLDERS = "mpt_holders";
237238
}

xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/client/ledger/LedgerEntryRequestParams.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.xrpl.xrpl4j.model.transactions.Address;
2929
import org.xrpl.xrpl4j.model.transactions.Hash256;
3030
import org.xrpl.xrpl4j.model.transactions.MpTokenIssuanceId;
31+
import org.xrpl.xrpl4j.model.transactions.MpTokenObjectAmount;
3132
import org.xrpl.xrpl4j.model.transactions.XChainBridge;
3233

3334
import java.util.Optional;
@@ -600,6 +601,14 @@ default Class<T> ledgerObjectClass() {
600601
return (Class<T>) OracleObject.class;
601602
}
602603

604+
if (mptIssuance().isPresent()) {
605+
return (Class<T>) MpTokenIssuanceObject.class;
606+
}
607+
608+
if (mpToken().isPresent()) {
609+
return (Class<T>) MpTokenObject.class;
610+
}
611+
603612
return (Class<T>) LedgerObject.class;
604613
}
605614
}

xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/client/mpt/MptHoldersMpToken.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ static ImmutableMptHoldersMpToken.Builder builder() {
3434
MpTokenObjectAmount mptAmount();
3535

3636
@JsonProperty("locked_amount")
37-
Optional<MpTokenAmount> lockedAmount();
37+
Optional<MpTokenObjectAmount> lockedAmount();
3838

3939
@JsonProperty("mptoken_index")
4040
Hash256 mpTokenIndex();

xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/client/mpt/MptHoldersRequestParams.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
77
import com.google.common.primitives.UnsignedInteger;
88
import org.immutables.value.Value.Immutable;
9+
import org.xrpl.xrpl4j.model.client.XrplRequestParams;
910
import org.xrpl.xrpl4j.model.client.common.LedgerSpecifier;
1011
import org.xrpl.xrpl4j.model.transactions.Marker;
1112
import org.xrpl.xrpl4j.model.transactions.MpTokenIssuanceId;
@@ -15,7 +16,7 @@
1516
@Immutable
1617
@JsonSerialize(as = ImmutableMptHoldersRequestParams.class)
1718
@JsonDeserialize(as = ImmutableMptHoldersRequestParams.class)
18-
public interface MptHoldersRequestParams {
19+
public interface MptHoldersRequestParams extends XrplRequestParams {
1920

2021
/**
2122
* Construct a {@code MptHoldersRequestParams} builder.

xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/client/mpt/MptHoldersResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
66
import com.google.common.primitives.UnsignedInteger;
77
import org.immutables.value.Value.Immutable;
8+
import org.xrpl.xrpl4j.model.client.XrplResult;
89
import org.xrpl.xrpl4j.model.client.common.LedgerIndex;
910
import org.xrpl.xrpl4j.model.transactions.Marker;
1011
import org.xrpl.xrpl4j.model.transactions.MpTokenIssuanceId;
@@ -15,7 +16,7 @@
1516
@Immutable
1617
@JsonSerialize(as = ImmutableMptHoldersResponse.class)
1718
@JsonDeserialize(as = ImmutableMptHoldersResponse.class)
18-
public interface MptHoldersResponse {
19+
public interface MptHoldersResponse extends XrplResult {
1920

2021
/**
2122
* Construct a {@code MptHoldersResponse} builder.
@@ -36,7 +37,6 @@ static ImmutableMptHoldersResponse.Builder builder() {
3637

3738
Optional<UnsignedInteger> limit();
3839

39-
// FIXME: Is this always the field, or does clio also return `ledger_hash` and potentially `ledger_current_index`?
4040
@JsonProperty("ledger_index")
4141
LedgerIndex ledgerIndex();
4242
}

xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/flags/MpTokenFlags.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class MpTokenFlags extends Flags {
3636
*/
3737
public static final MpTokenFlags LOCKED = new MpTokenFlags(0x00000001);
3838
/**
39-
* Constant {@link MpTokenFlags} for the {@code lsfMPTCanLock} account flag.
39+
* Constant {@link MpTokenFlags} for the {@code lsfMPTAuthorized} account flag.
4040
*/
4141
public static final MpTokenFlags AUTHORIZED = new MpTokenFlags(0x00000002);
4242

@@ -49,6 +49,17 @@ private MpTokenFlags(final long value) {
4949
super(value);
5050
}
5151

52+
/**
53+
* Construct {@link MpTokenFlags} with a given value.
54+
*
55+
* @param value The long-number encoded flags value of this {@link MpTokenFlags}.
56+
*
57+
* @return New {@link MpTokenFlags}.
58+
*/
59+
public static MpTokenFlags of(long value) {
60+
return new MpTokenFlags(value);
61+
}
62+
5263
/**
5364
* If set, indicates that all balances are locked.
5465
*

xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/flags/MpTokenIssuanceCreateFlags.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,12 +162,12 @@ public boolean tfMptCanClawback() {
162162
*/
163163
public static class Builder {
164164

165-
boolean tfMptCanLock = false;
166-
boolean tfMptRequireAuth = false;
167-
boolean tfMptCanEscrow = false;
168-
boolean tfMptCanTrade = false;
169-
boolean tfMptCanTransfer = false;
170-
boolean tfMptCanClawback = false;
165+
private boolean tfMptCanLock = false;
166+
private boolean tfMptRequireAuth = false;
167+
private boolean tfMptCanEscrow = false;
168+
private boolean tfMptCanTrade = false;
169+
private boolean tfMptCanTransfer = false;
170+
private boolean tfMptCanClawback = false;
171171

172172
/**
173173
* Set {@code tfMptCanLock} to the given value.

xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/flags/MpTokenIssuanceFlags.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,16 @@ private MpTokenIssuanceFlags(final long value) {
6969
super(value);
7070
}
7171

72+
/**
73+
* Construct {@link MpTokenIssuanceFlags} with a given value.
74+
*
75+
* @param value The long-number encoded flags value of this {@link MpTokenIssuanceFlags}.
76+
* @return New {@link MpTokenIssuanceFlags}.
77+
*/
78+
public static MpTokenIssuanceFlags of(long value) {
79+
return new MpTokenIssuanceFlags(value);
80+
}
81+
7282
/**
7383
* If set, indicates that all balances are locked.
7484
*

0 commit comments

Comments
 (0)