diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/jackson/modules/TransactionDeserializer.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/jackson/modules/TransactionDeserializer.java index 6f4066d58..e74521791 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/jackson/modules/TransactionDeserializer.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/jackson/modules/TransactionDeserializer.java @@ -32,8 +32,8 @@ import java.io.IOException; /** - * Custom deserializer for {@link Transaction}s, which deserializes to a specific {@link Transaction} type - * based on the TransactionType JSON field. + * Custom deserializer for instances of {@link Transaction} that deserialize to a specific {@link Transaction} type + * based on the`TransactionType` JSON field. */ public class TransactionDeserializer extends StdDeserializer { @@ -52,12 +52,12 @@ public Transaction deserialize(JsonParser jsonParser, DeserializationContext ctx TransactionType transactionType = TransactionType.forValue(objectNode.get("TransactionType").asText()); final Class transactionTypeClass = Transaction.typeMap.inverse().get(transactionType); - // Fixes #590 by removing the `Account` property from any incoming `UnlModify` JSON about to be deserialized. - // This fixes #590 because the JSON returned by the rippled/clio API v1 has a bug where the account value in - // `UnlModify` transactions is an empty string. When this value is deserialized, an exception is thrown because - // the empty string value is not a valid `Address`. By removing the property from incoming JSON, the Java value - // for the `Account` property is always set to ACCOUNT_ZERO via a default method. One other side effect of this - // fix is that `Account` property will not be errantly added to `unknownFields map of the ultimate Java object, + // Fixes #590 by removing the `Account` property from any incoming `UnlModify` JSON about to be deserialized. + // This fixes #590 because the JSON returned by the rippled/clio API v1 has a bug where the account value in + // `UnlModify` transactions is an empty string. When this value is deserialized, an exception is thrown because + // the empty string value is not a valid `Address`. By removing the property from incoming JSON, the Java value + // for the `Account` property is always set to ACCOUNT_ZERO via a default method. One other side effect of this + // fix is that `Account` property will not be errantly added to `unknownFields` map of the ultimate Java object, // which is incorrect. if (UnlModify.class.isAssignableFrom(transactionTypeClass)) { objectNode.remove("Account"); diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/jackson/modules/Xrpl4jModule.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/jackson/modules/Xrpl4jModule.java index 7d25486ed..0c968c0b9 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/jackson/modules/Xrpl4jModule.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/jackson/modules/Xrpl4jModule.java @@ -24,13 +24,11 @@ import com.fasterxml.jackson.databind.module.SimpleModule; import org.xrpl.xrpl4j.codec.addresses.UnsignedByteArray; import org.xrpl.xrpl4j.model.client.common.LedgerIndex; -import org.xrpl.xrpl4j.model.client.path.BookOffersOffer; import org.xrpl.xrpl4j.model.client.serverinfo.ServerInfo; import org.xrpl.xrpl4j.model.flags.Flags; import org.xrpl.xrpl4j.model.transactions.CurrencyAmount; import org.xrpl.xrpl4j.model.transactions.Transaction; import org.xrpl.xrpl4j.model.transactions.metadata.AffectedNode; -import org.xrpl.xrpl4j.model.transactions.metadata.MetaLedgerEntryType; /** * Jackson module for the xrpl4j-model project. @@ -63,7 +61,7 @@ public Xrpl4jModule() { addDeserializer(Transaction.class, new TransactionDeserializer()); addDeserializer(ServerInfo.class, new ServerInfoDeserializer()); - + addSerializer(UnsignedByteArray.class, new UnsignedByteArraySerializer()); addDeserializer(UnsignedByteArray.class, new UnsignedByteArrayDeserializer()); diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AccountDelete.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AccountDelete.java index f6a144f74..37adadbbe 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AccountDelete.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AccountDelete.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -23,9 +23,9 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import com.google.common.primitives.UnsignedInteger; import org.immutables.value.Value; -import org.immutables.value.Value.Derived; import org.xrpl.xrpl4j.model.flags.TransactionFlags; import java.util.Optional; @@ -81,4 +81,14 @@ default TransactionFlags flags() { @JsonProperty("DestinationTag") Optional destinationTag(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default AccountDelete normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.ACCOUNT_DELETE); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AccountSet.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AccountSet.java index 8814086c5..457c199ea 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AccountSet.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AccountSet.java @@ -517,4 +517,15 @@ public int getValue() { return value; } } + + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default AccountSet normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.ACCOUNT_SET); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmBid.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmBid.java index b52da0635..ebd4cf3eb 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmBid.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmBid.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.xrpl.xrpl4j.model.flags.TransactionFlags; import org.xrpl.xrpl4j.model.ledger.AuthAccountWrapper; @@ -107,4 +108,14 @@ default TransactionFlags flags() { @JsonProperty("AuthAccounts") List authAccounts(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default AmmBid normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.AMM_BID); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmCreate.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmCreate.java index dab53fa96..dbf4b7648 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmCreate.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmCreate.java @@ -4,8 +4,8 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; import org.immutables.value.Value; -import org.xrpl.xrpl4j.model.flags.Flags; import org.xrpl.xrpl4j.model.flags.TransactionFlags; /** @@ -68,4 +68,14 @@ default TransactionFlags flags() { @JsonProperty("TradingFee") TradingFee tradingFee(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default AmmCreate normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.AMM_CREATE); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmDelete.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmDelete.java index 6af820fb3..a03e3a212 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmDelete.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmDelete.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.immutables.value.Value.Immutable; import org.xrpl.xrpl4j.model.flags.TransactionFlags; @@ -58,4 +59,14 @@ default TransactionFlags flags() { @JsonProperty("Asset2") Issue asset2(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default AmmDelete normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.AMM_DELETE); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmDeposit.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmDeposit.java index 72bc376c0..cd69600fd 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmDeposit.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmDeposit.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.xrpl.xrpl4j.model.flags.AmmDepositFlags; import org.xrpl.xrpl4j.model.ledger.Issue; @@ -105,4 +106,15 @@ static ImmutableAmmDeposit.Builder builder() { */ @JsonProperty("TradingFee") Optional tradingFee(); + + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default AmmDeposit normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.AMM_DEPOSIT); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmVote.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmVote.java index 9742cfefb..e4f3b8295 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmVote.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmVote.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.xrpl.xrpl4j.model.flags.TransactionFlags; import org.xrpl.xrpl4j.model.ledger.Issue; @@ -68,5 +69,15 @@ default TransactionFlags flags() { @JsonProperty("TradingFee") TradingFee tradingFee(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default AmmVote normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.AMM_VOTE); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmWithdraw.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmWithdraw.java index 93f1bd968..7d989887f 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmWithdraw.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/AmmWithdraw.java @@ -99,4 +99,14 @@ static ImmutableAmmWithdraw.Builder builder() { @JsonProperty("LPTokenIn") Optional lpTokensIn(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default AmmWithdraw normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.AMM_WITHDRAW); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/CheckCancel.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/CheckCancel.java index 0174c1565..548c2da72 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/CheckCancel.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/CheckCancel.java @@ -23,8 +23,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import org.immutables.value.Value; -import org.immutables.value.Value.Derived; import org.xrpl.xrpl4j.model.flags.TransactionFlags; /** @@ -68,4 +68,15 @@ default TransactionFlags flags() { */ @JsonProperty("CheckID") Hash256 checkId(); + + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default CheckCancel normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.CHECK_CANCEL); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/CheckCash.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/CheckCash.java index 8dedc75af..1c3f20dcc 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/CheckCash.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/CheckCash.java @@ -105,4 +105,15 @@ default void validateOnlyOneAmountSet() { !(amount().isPresent() && deliverMin().isPresent()), "The CheckCash transaction must include either amount or deliverMin, but not both."); } + + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default CheckCash normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.CHECK_CASH); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/CheckCreate.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/CheckCreate.java index 98922bff0..2b44fa712 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/CheckCreate.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/CheckCreate.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -23,9 +23,9 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import com.google.common.primitives.UnsignedInteger; import org.immutables.value.Value; -import org.immutables.value.Value.Derived; import org.xrpl.xrpl4j.model.flags.TransactionFlags; import java.util.Optional; @@ -106,4 +106,14 @@ default TransactionFlags flags() { @JsonProperty("InvoiceID") Optional invoiceId(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default CheckCreate normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.CHECK_CREATE); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/Clawback.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/Clawback.java index 8c5c3bdcf..89613512c 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/Clawback.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/Clawback.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.immutables.value.Value.Immutable; import org.xrpl.xrpl4j.model.flags.TransactionFlags; @@ -51,5 +52,15 @@ default TransactionFlags flags() { @JsonProperty("Amount") IssuedCurrencyAmount amount(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default Clawback normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.CLAWBACK); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/DepositPreAuth.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/DepositPreAuth.java index c163f798a..20e7f8b87 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/DepositPreAuth.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/DepositPreAuth.java @@ -25,7 +25,6 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.base.Preconditions; import org.immutables.value.Value; -import org.immutables.value.Value.Derived; import org.xrpl.xrpl4j.model.flags.TransactionFlags; import java.util.Optional; @@ -93,4 +92,15 @@ default void validateFieldPresence() { !(authorize().isPresent() && unauthorize().isPresent()), "The DepositPreAuth transaction must include either Authorize or Unauthorize, but not both."); } + + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default DepositPreAuth normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.DEPOSIT_PRE_AUTH); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/DidDelete.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/DidDelete.java index 91b27ff6b..3f449cb7c 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/DidDelete.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/DidDelete.java @@ -4,12 +4,11 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.immutables.value.Value.Immutable; import org.xrpl.xrpl4j.model.flags.TransactionFlags; -import java.util.Optional; - /** * Object mapping for the {@code DIDDelete} transaction. * @@ -46,5 +45,14 @@ default TransactionFlags flags() { return TransactionFlags.EMPTY; } - + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default DidDelete normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.DID_DELETE); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/DidSet.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/DidSet.java index 95559bfe8..c5000796e 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/DidSet.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/DidSet.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.immutables.value.Value.Immutable; import org.xrpl.xrpl4j.model.flags.TransactionFlags; @@ -71,5 +72,15 @@ default TransactionFlags flags() { @JsonProperty("Data") Optional data(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default DidSet normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.DID_SET); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/EnableAmendment.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/EnableAmendment.java index d5eb98a2a..c1ec721fe 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/EnableAmendment.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/EnableAmendment.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.xrpl.xrpl4j.model.client.common.LedgerIndex; @@ -64,4 +65,15 @@ static ImmutableEnableAmendment.Builder builder() { */ @JsonProperty("LedgerSequence") Optional ledgerSequence(); + + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default EnableAmendment normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.ENABLE_AMENDMENT); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/EscrowCancel.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/EscrowCancel.java index dedfdc65e..e1c4cb06d 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/EscrowCancel.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/EscrowCancel.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import com.google.common.primitives.UnsignedInteger; import org.immutables.value.Value; import org.xrpl.xrpl4j.model.flags.TransactionFlags; @@ -76,4 +77,15 @@ default TransactionFlags flags() { @JsonProperty("OfferSequence") UnsignedInteger offerSequence(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default EscrowCancel normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.ESCROW_CANCEL); + return this; + } + } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/EscrowCreate.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/EscrowCreate.java index 7d2001b8a..26d0311df 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/EscrowCreate.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/EscrowCreate.java @@ -132,4 +132,15 @@ default void check() { ); } } + + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default EscrowCreate normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.ESCROW_CREATE); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/EscrowFinish.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/EscrowFinish.java index ad0ff7d33..14065ca5b 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/EscrowFinish.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/EscrowFinish.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -33,14 +33,11 @@ import com.ripple.cryptoconditions.CryptoConditionWriter; import com.ripple.cryptoconditions.Fulfillment; import com.ripple.cryptoconditions.PreimageSha256Fulfillment; -import com.ripple.cryptoconditions.PreimageSha256Fulfillment.AbstractPreimageSha256Fulfillment; import com.ripple.cryptoconditions.der.DerEncodingException; import org.immutables.value.Value; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xrpl.xrpl4j.model.flags.TransactionFlags; -import org.xrpl.xrpl4j.model.immutables.FluentCompareTo; -import org.xrpl.xrpl4j.model.transactions.AccountSet.AccountSetFlag; import java.util.Arrays; import java.util.Base64; @@ -361,4 +358,14 @@ default EscrowFinish normalizeFulfillment() { } } + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default EscrowFinish normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.ESCROW_FINISH); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/IssuedCurrencyAmount.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/IssuedCurrencyAmount.java index db01b1740..f5e03998e 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/IssuedCurrencyAmount.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/IssuedCurrencyAmount.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -25,7 +25,6 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.immutables.value.Value; import org.immutables.value.Value.Auxiliary; -import org.immutables.value.Value.Default; import org.immutables.value.Value.Derived; /** diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenAcceptOffer.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenAcceptOffer.java index b35d8f8ad..775928eca 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenAcceptOffer.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenAcceptOffer.java @@ -114,7 +114,7 @@ static ImmutableNfTokenAcceptOffer.Builder builder() { @Value.Check default void brokerFeeNotPresentInDirectModeAndAtleastOneOfferPresent() { Preconditions.checkState(buyOffer().isPresent() || sellOffer().isPresent(), - "PLease specify one offer for direct mode and both offers for brokered mode."); + "Please specify one offer for direct mode and both offers for brokered mode."); if ((buyOffer().isPresent() || sellOffer().isPresent()) && !(buyOffer().isPresent() && sellOffer().isPresent())) { @@ -137,4 +137,14 @@ default TransactionFlags flags() { return TransactionFlags.EMPTY; } + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default NfTokenAcceptOffer normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.NFTOKEN_ACCEPT_OFFER); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenBurn.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenBurn.java index 4761de95f..56ed474f8 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenBurn.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenBurn.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.xrpl.xrpl4j.model.flags.TransactionFlags; @@ -95,4 +96,15 @@ static ImmutableNfTokenBurn.Builder builder() { default TransactionFlags flags() { return TransactionFlags.EMPTY; } + + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default NfTokenBurn normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.NFTOKEN_BURN); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenCancelOffer.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenCancelOffer.java index 6c559df54..9c21f0149 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenCancelOffer.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenCancelOffer.java @@ -90,4 +90,15 @@ default void nonEmptyTokenOffers() { default TransactionFlags flags() { return TransactionFlags.EMPTY; } + + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default NfTokenCancelOffer normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.NFTOKEN_CANCEL_OFFER); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenCreateOffer.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenCreateOffer.java index fc4989319..8b5fc94ea 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenCreateOffer.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenCreateOffer.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import com.google.common.primitives.UnsignedLong; import org.immutables.value.Value; import org.xrpl.xrpl4j.model.flags.NfTokenCreateOfferFlags; @@ -129,4 +130,15 @@ static ImmutableNfTokenCreateOffer.Builder builder() { default NfTokenCreateOfferFlags flags() { return NfTokenCreateOfferFlags.empty(); } + + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default NfTokenCreateOffer normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.NFTOKEN_CREATE_OFFER); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenMint.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenMint.java index 26ee8f36b..a0e7c67d5 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenMint.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/NfTokenMint.java @@ -107,4 +107,15 @@ static ImmutableNfTokenMint.Builder builder() { default NfTokenMintFlags flags() { return NfTokenMintFlags.empty(); } + + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default NfTokenMint normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.NFTOKEN_MINT); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/OfferCancel.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/OfferCancel.java index 45f2e0823..5af90a123 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/OfferCancel.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/OfferCancel.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import com.google.common.primitives.UnsignedInteger; import org.immutables.value.Value; import org.immutables.value.Value.Immutable; @@ -72,4 +73,14 @@ default TransactionFlags flags() { @JsonProperty("OfferSequence") Optional offerSequence(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default OfferCancel normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.OFFER_CANCEL); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/OfferCreate.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/OfferCreate.java index c7ef5b191..2930446d9 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/OfferCreate.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/OfferCreate.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import com.google.common.primitives.UnsignedInteger; import org.immutables.value.Value; import org.immutables.value.Value.Immutable; @@ -94,5 +95,14 @@ default OfferCreateFlags flags() { @JsonProperty("Expiration") Optional expiration(); - + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default OfferCreate normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.OFFER_CREATE); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/OracleDelete.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/OracleDelete.java index b8e81ea7c..c00d3e583 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/OracleDelete.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/OracleDelete.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; import com.google.common.primitives.UnsignedInteger; import org.immutables.value.Value; import org.immutables.value.Value.Immutable; @@ -50,4 +51,14 @@ default TransactionFlags flags() { @JsonProperty("OracleDocumentID") OracleDocumentId oracleDocumentId(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default OracleDelete normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.ORACLE_DELETE); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/OracleSet.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/OracleSet.java index 7116087e8..fb688c6b2 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/OracleSet.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/OracleSet.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; import com.google.common.primitives.UnsignedInteger; import org.immutables.value.Value; import org.immutables.value.Value.Immutable; @@ -97,4 +98,15 @@ default TransactionFlags flags() { */ @JsonProperty("PriceDataSeries") List priceDataSeries(); + + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default OracleSet normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.ORACLE_SET); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/Payment.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/Payment.java index 87a1dab28..c5c4bab52 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/Payment.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/Payment.java @@ -23,11 +23,10 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import com.google.common.primitives.UnsignedInteger; import org.immutables.value.Value; -import org.xrpl.xrpl4j.model.flags.Flags; import org.xrpl.xrpl4j.model.flags.PaymentFlags; -import org.xrpl.xrpl4j.model.flags.TrustSetFlags; import java.util.List; import java.util.Optional; @@ -135,4 +134,14 @@ default PaymentFlags flags() { @JsonProperty("DeliverMin") Optional deliverMin(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default Payment normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.PAYMENT); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/PaymentChannelClaim.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/PaymentChannelClaim.java index 944a2fefd..a0f5905aa 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/PaymentChannelClaim.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/PaymentChannelClaim.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.xrpl.xrpl4j.model.flags.PaymentChannelClaimFlags; @@ -130,4 +131,14 @@ default PaymentChannelClaimFlags flags() { @JsonProperty("PublicKey") Optional publicKey(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default PaymentChannelClaim normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.PAYMENT_CHANNEL_CLAIM); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/PaymentChannelCreate.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/PaymentChannelCreate.java index 2e0397b8c..aba0bff41 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/PaymentChannelCreate.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/PaymentChannelCreate.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import com.google.common.primitives.UnsignedInteger; import com.google.common.primitives.UnsignedLong; import org.immutables.value.Value; @@ -118,4 +119,14 @@ default TransactionFlags flags() { @JsonProperty("DestinationTag") Optional destinationTag(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default PaymentChannelCreate normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.PAYMENT_CHANNEL_CREATE); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/PaymentChannelFund.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/PaymentChannelFund.java index a27ad9737..f96a3dfa1 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/PaymentChannelFund.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/PaymentChannelFund.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import com.google.common.primitives.UnsignedLong; import org.immutables.value.Value; import org.xrpl.xrpl4j.model.flags.TransactionFlags; @@ -93,4 +94,15 @@ default TransactionFlags flags() { */ @JsonProperty("Expiration") Optional expiration(); + + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default PaymentChannelFund normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.PAYMENT_CHANNEL_FUND); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/PriceData.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/PriceData.java index c14e04c61..18d85b7ce 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/PriceData.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/PriceData.java @@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; import com.google.common.primitives.UnsignedInteger; -import com.google.common.primitives.UnsignedLong; import org.immutables.value.Value.Immutable; import java.util.Optional; diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/SetFee.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/SetFee.java index 8b7ee2412..c1ce5de27 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/SetFee.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/SetFee.java @@ -25,6 +25,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import com.google.common.primitives.UnsignedInteger; import org.immutables.value.Value; import org.xrpl.xrpl4j.model.client.common.LedgerIndex; @@ -152,4 +153,15 @@ default UnsignedInteger reserveIncrement() { */ @JsonProperty("LedgerSequence") Optional ledgerSequence(); + + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default SetFee normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.SET_FEE); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/SetRegularKey.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/SetRegularKey.java index 6f245654f..51e6c0e8a 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/SetRegularKey.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/SetRegularKey.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.xrpl.xrpl4j.model.flags.TransactionFlags; @@ -73,4 +74,15 @@ default TransactionFlags flags() { @JsonProperty("RegularKey") Optional
regularKey(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default SetRegularKey normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.SET_REGULAR_KEY); + return this; + } + } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/SignerListSet.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/SignerListSet.java index 9128e2f7f..a33d77591 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/SignerListSet.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/SignerListSet.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import com.google.common.primitives.UnsignedInteger; import org.immutables.value.Value; import org.xrpl.xrpl4j.model.flags.TransactionFlags; @@ -83,4 +84,15 @@ default TransactionFlags flags() { @JsonProperty("SignerEntries") List signerEntries(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default SignerListSet normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.SIGNER_LIST_SET); + return this; + } + } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/TicketCreate.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/TicketCreate.java index a05d081a5..6ecd6227a 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/TicketCreate.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/TicketCreate.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import com.google.common.primitives.UnsignedInteger; import org.immutables.value.Value; import org.xrpl.xrpl4j.model.flags.TransactionFlags; @@ -69,4 +70,15 @@ static ImmutableTicketCreate.Builder builder() { default TransactionFlags flags() { return TransactionFlags.EMPTY; } + + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default TicketCreate normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.TICKET_CREATE); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/TrustSet.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/TrustSet.java index c891a71b3..d20eaf9be 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/TrustSet.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/TrustSet.java @@ -23,10 +23,9 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import com.google.common.primitives.UnsignedInteger; import org.immutables.value.Value; -import org.xrpl.xrpl4j.model.flags.Flags; -import org.xrpl.xrpl4j.model.flags.PaymentFlags; import org.xrpl.xrpl4j.model.flags.TrustSetFlags; import java.util.Optional; @@ -88,4 +87,14 @@ default TrustSetFlags flags() { @JsonProperty("QualityOut") Optional qualityOut(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default TrustSet normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.TRUST_SET); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/UnknownTransaction.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/UnknownTransaction.java index 7a54f0122..f01b95c50 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/UnknownTransaction.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/UnknownTransaction.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.immutables.value.Value.Immutable; import org.xrpl.xrpl4j.model.flags.TransactionFlags; @@ -62,4 +63,14 @@ default TransactionFlags flags() { return TransactionFlags.EMPTY; } + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default UnknownTransaction normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.UNKNOWN); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/UnlModify.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/UnlModify.java index e67e6651b..fa8697ec8 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/UnlModify.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/UnlModify.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Preconditions; import com.google.common.primitives.UnsignedInteger; import org.immutables.value.Value; import org.xrpl.xrpl4j.model.client.common.LedgerIndex; @@ -91,4 +92,15 @@ default Address account() { */ @JsonProperty("UNLModifyValidator") String unlModifyValidator(); + + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default UnlModify normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.UNL_MODIFY); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/Wrappers.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/Wrappers.java index 7e036c2cf..508e0eacb 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/Wrappers.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/Wrappers.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -311,7 +311,7 @@ public XrpCurrencyAmount plus(XrpCurrencyAmount other) { // Convert each value to a long (positive or negative works) long result = (this.value().longValue() * (this.isNegative() ? -1 : 1)) + - (other.value().longValue() * (other.isNegative() ? -1 : 1)); + (other.value().longValue() * (other.isNegative() ? -1 : 1)); return XrpCurrencyAmount.ofDrops(result); } @@ -326,7 +326,7 @@ public XrpCurrencyAmount minus(XrpCurrencyAmount other) { // Convert each value to a long (positive or negative works) long result = (this.value().longValue() * (this.isNegative() ? -1 : 1)) - - (other.value().longValue() * (other.isNegative() ? -1 : 1)); + (other.value().longValue() * (other.isNegative() ? -1 : 1)); return XrpCurrencyAmount.ofDrops(result); } @@ -489,7 +489,7 @@ public static TransferFee ofPercent(BigDecimal percent) { public void validateBounds() { Preconditions.checkArgument( FluentCompareTo.is(value()).lessThanOrEqualTo(UnsignedInteger.valueOf(50000)) && - FluentCompareTo.is(value()).greaterThanEqualTo(UnsignedInteger.valueOf(0)), + FluentCompareTo.is(value()).greaterThanEqualTo(UnsignedInteger.valueOf(0)), "TransferFee should be in the range 0 to 50000."); } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainAccountCreateCommit.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainAccountCreateCommit.java index 9272ea579..1ecf69a3c 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainAccountCreateCommit.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainAccountCreateCommit.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.immutables.value.Value.Immutable; import org.xrpl.xrpl4j.model.flags.TransactionFlags; @@ -78,4 +79,14 @@ default TransactionFlags flags() { @SuppressWarnings("MethodName") XChainBridge xChainBridge(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default XChainAccountCreateCommit normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.XCHAIN_ACCOUNT_CREATE_COMMIT); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainAddAccountCreateAttestation.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainAddAccountCreateAttestation.java index cf7be3c94..49c294a23 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainAddAccountCreateAttestation.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainAddAccountCreateAttestation.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.immutables.value.Value.Immutable; import org.xrpl.xrpl4j.crypto.keys.PublicKey; @@ -142,4 +143,14 @@ default TransactionFlags flags() { @SuppressWarnings("MethodName") XChainBridge xChainBridge(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default XChainAddAccountCreateAttestation normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.XCHAIN_ADD_ACCOUNT_CREATE_ATTESTATION); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainAddClaimAttestation.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainAddClaimAttestation.java index 68c46c7b4..c29cdc3dc 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainAddClaimAttestation.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainAddClaimAttestation.java @@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.immutables.value.Value.Immutable; import org.xrpl.xrpl4j.crypto.keys.PublicKey; @@ -135,4 +136,14 @@ default TransactionFlags flags() { @SuppressWarnings("MethodName") XChainClaimId xChainClaimId(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default XChainAddClaimAttestation normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.XCHAIN_ADD_CLAIM_ATTESTATION); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainCommit.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainCommit.java index 41633ef41..2f53a74eb 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainCommit.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainCommit.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; -import com.google.common.primitives.UnsignedInteger; import org.immutables.value.Value; import org.immutables.value.Value.Immutable; import org.xrpl.xrpl4j.model.flags.TransactionFlags; diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainCreateBridge.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainCreateBridge.java index 744331b14..2022e5cb9 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainCreateBridge.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainCreateBridge.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.immutables.value.Value.Immutable; import org.xrpl.xrpl4j.model.flags.TransactionFlags; @@ -69,4 +70,14 @@ default TransactionFlags flags() { @SuppressWarnings("MethodName") XChainBridge xChainBridge(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default XChainCreateBridge normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.XCHAIN_CREATE_BRIDGE); + return this; + } } diff --git a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainModifyBridge.java b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainModifyBridge.java index 8df520a1f..1143d1205 100644 --- a/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainModifyBridge.java +++ b/xrpl4j-core/src/main/java/org/xrpl/xrpl4j/model/transactions/XChainModifyBridge.java @@ -4,10 +4,9 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.Beta; +import com.google.common.base.Preconditions; import org.immutables.value.Value; import org.immutables.value.Value.Immutable; -import org.xrpl.xrpl4j.model.flags.PaymentFlags; -import org.xrpl.xrpl4j.model.flags.TransactionFlags; import org.xrpl.xrpl4j.model.flags.XChainModifyBridgeFlags; import java.util.Optional; @@ -73,4 +72,15 @@ default XChainModifyBridgeFlags flags() { @SuppressWarnings("MethodName") XChainBridge xChainBridge(); + /** + * Immutables Check to ensure property state after construction. + */ + @Value.Check + default XChainModifyBridge normalize() { + Preconditions.checkState(!unknownFields().containsKey("TransactionType")); + Preconditions.checkState(!unknownFields().containsKey("Account")); + Preconditions.checkState(transactionType() == TransactionType.XCHAIN_MODIFY_BRIDGE); + return this; + } + } diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/codec/binary/BinarySerializationTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/codec/binary/BinarySerializationTests.java index 11df2d770..3f83305f4 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/codec/binary/BinarySerializationTests.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/codec/binary/BinarySerializationTests.java @@ -22,7 +22,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.xrpl.xrpl4j.crypto.TestConstants.ED_PUBLIC_KEY; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -33,7 +32,6 @@ import com.ripple.cryptoconditions.CryptoConditionReader; import com.ripple.cryptoconditions.der.DerEncodingException; import org.junit.jupiter.api.Test; -import org.xrpl.xrpl4j.codec.binary.XrplBinaryCodec; import org.xrpl.xrpl4j.crypto.keys.PublicKey; import org.xrpl.xrpl4j.crypto.signing.Signature; import org.xrpl.xrpl4j.model.flags.AccountSetTransactionFlags; @@ -77,19 +75,6 @@ import org.xrpl.xrpl4j.model.transactions.EscrowCreate; import org.xrpl.xrpl4j.model.transactions.EscrowFinish; import org.xrpl.xrpl4j.model.transactions.Hash256; -import org.xrpl.xrpl4j.model.transactions.ImmutableAmmBid; -import org.xrpl.xrpl4j.model.transactions.ImmutableAmmCreate; -import org.xrpl.xrpl4j.model.transactions.ImmutableAmmDelete; -import org.xrpl.xrpl4j.model.transactions.ImmutableAmmDeposit; -import org.xrpl.xrpl4j.model.transactions.ImmutableDidDelete; -import org.xrpl.xrpl4j.model.transactions.ImmutableDidSet; -import org.xrpl.xrpl4j.model.transactions.ImmutableOracleDelete; -import org.xrpl.xrpl4j.model.transactions.ImmutableXChainAccountCreateCommit; -import org.xrpl.xrpl4j.model.transactions.ImmutableXChainAddClaimAttestation; -import org.xrpl.xrpl4j.model.transactions.ImmutableXChainClaim; -import org.xrpl.xrpl4j.model.transactions.ImmutableXChainCreateBridge; -import org.xrpl.xrpl4j.model.transactions.ImmutableXChainCreateClaimId; -import org.xrpl.xrpl4j.model.transactions.ImmutableXChainModifyBridge; import org.xrpl.xrpl4j.model.transactions.IssuedCurrencyAmount; import org.xrpl.xrpl4j.model.transactions.NetworkId; import org.xrpl.xrpl4j.model.transactions.OfferCancel; diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/AbstractJsonTest.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/AbstractJsonTest.java index 6ec181716..a3be5c6ae 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/AbstractJsonTest.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/AbstractJsonTest.java @@ -23,7 +23,6 @@ import static org.assertj.core.api.Assertions.assertThat; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.json.JSONException; import org.junit.jupiter.api.BeforeEach; @@ -38,7 +37,7 @@ import org.xrpl.xrpl4j.model.ledger.LedgerObject; import org.xrpl.xrpl4j.model.transactions.Transaction; -public class AbstractJsonTest { +public abstract class AbstractJsonTest { protected Logger logger = LoggerFactory.getLogger(this.getClass()); protected ObjectMapper objectMapper; diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/NfTokenAcceptOfferTest.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/NfTokenAcceptOfferTest.java index 6f371d173..ceb51e6ba 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/NfTokenAcceptOfferTest.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/NfTokenAcceptOfferTest.java @@ -55,7 +55,7 @@ public void throwWhenNoOfferIsPresent() { .fee(XrpCurrencyAmount.ofDrops(100)) .build()) .isInstanceOf(IllegalStateException.class) - .hasMessage("PLease specify one offer for direct mode and both offers for brokered mode."); + .hasMessage("Please specify one offer for direct mode and both offers for brokered mode."); } @Test diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/AbstractTransactionJsonTest.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/AbstractTransactionJsonTest.java new file mode 100644 index 000000000..7ef6d095b --- /dev/null +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/AbstractTransactionJsonTest.java @@ -0,0 +1,151 @@ +package org.xrpl.xrpl4j.model.transactions.json; + +/*- + * ========================LICENSE_START================================= + * xrpl4j :: model + * %% + * Copyright (C) 2020 - 2022 XRPL Foundation and its contributors + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ + +import static org.assertj.core.api.Assertions.assertThat; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; +import org.xrpl.xrpl4j.model.AbstractJsonTest; +import org.xrpl.xrpl4j.model.transactions.Transaction; +import org.xrpl.xrpl4j.model.transactions.TransactionType; + +import java.util.Objects; + +/** + * An abstract class that helps test various flavors of serialization and deserialization for implementations of + * {@link Transaction}. + * + * @param The type of Immutable this class will test. + * @param The type of Immutable Builder this class will test. + * @param The type of {@link Transaction} this class will test. + */ +public abstract class AbstractTransactionJsonTest extends AbstractJsonTest { + + private final Class interfaceClass; + private final Class immutableClass; + private final TransactionType expectedTransactionType; + + /** + * Required-args Constructor. + * + * @param interfaceClass A class of type {@link T} that for the Immutables intefarce. + * @param immutableClass A class of type {@link I} that for the Immutables implementation. + * @param expectedTransactionType A {@link TransactionType} representing the expected transaction type. + */ + protected AbstractTransactionJsonTest( + final Class interfaceClass, + final Class immutableClass, + final TransactionType expectedTransactionType + ) { + this.interfaceClass = Objects.requireNonNull(interfaceClass); + this.immutableClass = Objects.requireNonNull(immutableClass); + this.expectedTransactionType = expectedTransactionType; + } + + /** + * Construct and return a builder for the Immutable object of type {@link B}. + * + * @return An instance of {@link B}. + */ + protected abstract B builder(); + + /** + * Construct and return a fully-populated transaction of type {@link T}. + * + * @return An instance of {@link T}. + */ + protected abstract T fullyPopulatedTransaction(); + + /** + * Construct and return a fully-populated transaction of the proper type that includes some unknown fields. + * + * @return An instance of {@link T}. + */ + protected abstract T fullyPopulatedTransactionWithUnknownFields(); + + /** + * Construct and return a minimally-populated transaction of type {@link T}. + * + * @return An instance of {@link T}. + */ + protected abstract T minimallyPopulatedTransaction(); + + @Test + void testTransactionType() { + assertThat(fullyPopulatedTransaction().transactionType()).isEqualTo(expectedTransactionType); + assertThat(fullyPopulatedTransactionWithUnknownFields().transactionType()).isEqualTo(expectedTransactionType); + assertThat(minimallyPopulatedTransaction().transactionType()).isEqualTo(expectedTransactionType); + } + + /** + * This test asserts that deserialization works the same regardless of whether a Java interface, immutable, or + * instance of the {@link Transaction} parent class are supplied to the {@link ObjectMapper}. + */ + @Test + public void assertCanDeserializeAllTypesFullyPopulated() throws JsonProcessingException { + T expectedObject = fullyPopulatedTransaction(); + String serialized = objectMapper.writeValueAsString(expectedObject); + + Transaction deserializedTransaction = objectMapper.readValue(serialized, Transaction.class); + assertThat(deserializedTransaction).isEqualTo(expectedObject); + T deserializedInterface = objectMapper.readValue(serialized, interfaceClass); + assertThat(deserializedInterface).isEqualTo(expectedObject); + I deserializedImmutable = objectMapper.readValue(serialized, immutableClass); + assertThat(deserializedImmutable).isEqualTo(expectedObject); + } + + /** + * This test asserts that deserialization works the same regardless of whether a Java interface, immutable, or + * instance of the {@link Transaction} parent class are supplied to the {@link ObjectMapper}. + */ + @Test + public void assertCanDeserializeAllTypesFullyPopulatedWithUnknownFields() throws JsonProcessingException { + T expectedObject = fullyPopulatedTransactionWithUnknownFields(); + String serialized = objectMapper.writeValueAsString(expectedObject); + + Transaction deserializedTransaction = objectMapper.readValue(serialized, Transaction.class); + assertThat(deserializedTransaction).isEqualTo(expectedObject); + T deserializedInterface = objectMapper.readValue(serialized, interfaceClass); + assertThat(deserializedInterface).isEqualTo(expectedObject); + I deserializedImmutable = objectMapper.readValue(serialized, immutableClass); + assertThat(deserializedImmutable).isEqualTo(expectedObject); + } + + /** + * This test asserts that deserialization works the same regardless of whether a Java interface, immutable, or + * instance of the {@link Transaction} parent class are supplied to the {@link ObjectMapper}. + */ + @Test + public void assertCanDeserializeAllTypesWithMinimallyPopulated() throws JsonProcessingException { + T expectedObject = minimallyPopulatedTransaction(); + String serialized = objectMapper.writeValueAsString(expectedObject); + + Transaction deserializedTransaction = objectMapper.readValue(serialized, Transaction.class); + assertThat(deserializedTransaction).isEqualTo(expectedObject); + T deserializedInterface = objectMapper.readValue(serialized, interfaceClass); + assertThat(deserializedInterface).isEqualTo(expectedObject); + I deserializedImmutable = objectMapper.readValue(serialized, immutableClass); + assertThat(deserializedImmutable).isEqualTo(expectedObject); + } + +} \ No newline at end of file diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/AccountDeleteJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/AccountDeleteJsonTests.java index 674bb6f2e..cc17a7455 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/AccountDeleteJsonTests.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/AccountDeleteJsonTests.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -25,18 +25,32 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.xrpl.xrpl4j.crypto.keys.PublicKey; -import org.xrpl.xrpl4j.model.AbstractJsonTest; import org.xrpl.xrpl4j.model.flags.TransactionFlags; import org.xrpl.xrpl4j.model.transactions.AccountDelete; import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.ImmutableAccountDelete; import org.xrpl.xrpl4j.model.transactions.NetworkId; +import org.xrpl.xrpl4j.model.transactions.TransactionType; import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; -public class AccountDeleteJsonTests extends AbstractJsonTest { +public class AccountDeleteJsonTests + extends AbstractTransactionJsonTest { - @Test - public void testJson() throws JsonProcessingException, JSONException { - AccountDelete accountDelete = AccountDelete.builder() + /** + * No-args Constructor. + */ + protected AccountDeleteJsonTests() { + super(AccountDelete.class, ImmutableAccountDelete.class, TransactionType.ACCOUNT_DELETE); + } + + @Override + protected ImmutableAccountDelete.Builder builder() { + return AccountDelete.builder(); + } + + @Override + protected AccountDelete fullyPopulatedTransaction() { + return AccountDelete.builder() .account(Address.of("rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm")) .fee(XrpCurrencyAmount.ofDrops(5000000)) .sequence(UnsignedInteger.valueOf(2470665)) @@ -45,106 +59,147 @@ public void testJson() throws JsonProcessingException, JSONException { .signingPublicKey( PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") ) + .flags(TransactionFlags.UNSET) .networkId(NetworkId.of(1024)) .build(); + } - String json = "{\n" + - " \"TransactionType\": \"AccountDelete\",\n" + - " \"Account\": \"rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm\",\n" + - " \"Destination\": \"rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe\",\n" + - " \"DestinationTag\": 13,\n" + - " \"Fee\": \"5000000\",\n" + - " \"Sequence\": 2470665,\n" + - " \"NetworkID\": 1024,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + - "}"; - - assertCanSerializeAndDeserialize(accountDelete, json); + @Override + protected AccountDelete fullyPopulatedTransactionWithUnknownFields() { + return AccountDelete.builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); } - @Test - public void testJsonWithUnsetFlags() throws JsonProcessingException, JSONException { - AccountDelete accountDelete = AccountDelete.builder() + @Override + protected AccountDelete minimallyPopulatedTransaction() { + return AccountDelete.builder() .account(Address.of("rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm")) .fee(XrpCurrencyAmount.ofDrops(5000000)) - .sequence(UnsignedInteger.valueOf(2470665)) .destination(Address.of("rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe")) - .destinationTag(UnsignedInteger.valueOf(13)) .signingPublicKey( PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") ) + .build(); + } + + @Test + public void testFullyPopulatedJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"TransactionType\": \"AccountDelete\",\n" + + " \"Account\": \"rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm\",\n" + + " \"Destination\": \"rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe\",\n" + + " \"DestinationTag\": 13,\n" + + " \"Fee\": \"5000000\",\n" + + " \"Flags\": 0,\n" + + " \"Sequence\": 2470665,\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; + + this.assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); + } + + @Test + public void testFullyPopulatedWithUnknownFieldsJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"TransactionType\": \"AccountDelete\",\n" + + " \"Account\": \"rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm\",\n" + + " \"Destination\": \"rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe\",\n" + + " \"DestinationTag\": 13,\n" + + " \"Fee\": \"5000000\",\n" + + " \"Flags\": 0,\n" + + " \"Sequence\": 2470665,\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; + + this.assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); + } + + @Test + public void testMinimallyPopulatedJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"TransactionType\": \"AccountDelete\",\n" + + " \"Account\": \"rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm\",\n" + + " \"Destination\": \"rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe\",\n" + + " \"Fee\": \"5000000\",\n" + + " \"Sequence\": 0,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; + + this.assertCanSerializeAndDeserialize(minimallyPopulatedTransaction(), json); + } + + @Test + public void testJsonWithUnsetFlags() throws JsonProcessingException, JSONException { + AccountDelete fullyPopulatedAccountDelete = AccountDelete.builder() + .from(fullyPopulatedTransactionWithUnknownFields()) .flags(TransactionFlags.UNSET) .build(); - String json = "{\n" + - " \"TransactionType\": \"AccountDelete\",\n" + - " \"Account\": \"rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm\",\n" + - " \"Destination\": \"rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe\",\n" + - " \"DestinationTag\": 13,\n" + - " \"Fee\": \"5000000\",\n" + - " \"Flags\": 0,\n" + - " \"Sequence\": 2470665,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + - "}"; - - assertCanSerializeAndDeserialize(accountDelete, json); + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"TransactionType\": \"AccountDelete\",\n" + + " \"Account\": \"rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm\",\n" + + " \"Destination\": \"rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe\",\n" + + " \"DestinationTag\": 13,\n" + + " \"Fee\": \"5000000\",\n" + + " \"Flags\": 0,\n" + + " \"Sequence\": 2470665,\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedAccountDelete, json); } @Test public void testJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { - AccountDelete accountDelete = AccountDelete.builder() - .account(Address.of("rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm")) - .fee(XrpCurrencyAmount.ofDrops(5000000)) - .sequence(UnsignedInteger.valueOf(2470665)) - .destination(Address.of("rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe")) - .destinationTag(UnsignedInteger.valueOf(13)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) + + AccountDelete fullyPopulatedTransaction = AccountDelete.builder() + .from(fullyPopulatedTransactionWithUnknownFields()) .flags(TransactionFlags.FULLY_CANONICAL_SIG) .build(); - String json = String.format("{\n" + - " \"TransactionType\": \"AccountDelete\",\n" + - " \"Account\": \"rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm\",\n" + - " \"Destination\": \"rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe\",\n" + - " \"DestinationTag\": 13,\n" + - " \"Fee\": \"5000000\",\n" + - " \"Flags\": %s,\n" + - " \"Sequence\": 2470665,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); - - assertCanSerializeAndDeserialize(accountDelete, json); + String json = String.format( + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"TransactionType\": \"AccountDelete\",\n" + + " \"Account\": \"rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm\",\n" + + " \"Destination\": \"rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe\",\n" + + " \"DestinationTag\": 13,\n" + + " \"Fee\": \"5000000\",\n" + + " \"Flags\": %s,\n" + + " \"NetworkID\": 1024,\n" + + " \"Sequence\": 2470665,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); + + assertCanSerializeAndDeserialize(fullyPopulatedTransaction, json); } @Test public void testJsonWithUnknownFields() throws JsonProcessingException, JSONException { - AccountDelete accountDelete = AccountDelete.builder() - .account(Address.of("rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm")) - .fee(XrpCurrencyAmount.ofDrops(5000000)) - .sequence(UnsignedInteger.valueOf(2470665)) - .destination(Address.of("rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe")) - .destinationTag(UnsignedInteger.valueOf(13)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); + String json = + "{\n" + + " \"TransactionType\": \"AccountDelete\",\n" + + " \"Account\": \"rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm\",\n" + + " \"Destination\": \"rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe\",\n" + + " \"DestinationTag\": 13,\n" + + " \"Flags\": 0,\n" + + " \"Fee\": \"5000000\",\n" + + " \"Sequence\": 2470665,\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"TransactionType\": \"AccountDelete\",\n" + - " \"Account\": \"rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm\",\n" + - " \"Destination\": \"rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe\",\n" + - " \"DestinationTag\": 13,\n" + - " \"Fee\": \"5000000\",\n" + - " \"Sequence\": 2470665,\n" + - " \"NetworkID\": 1024,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + - "}"; - - assertCanSerializeAndDeserialize(accountDelete, json); + assertCanSerializeAndDeserialize(fullyPopulatedTransaction(), json); } } diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/AccountSetJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/AccountSetJsonTests.java index 25f16a2b1..f9abd0261 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/AccountSetJsonTests.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/AccountSetJsonTests.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -26,26 +26,40 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.xrpl.xrpl4j.crypto.keys.PublicKey; -import org.xrpl.xrpl4j.crypto.signing.Signature; -import org.xrpl.xrpl4j.model.AbstractJsonTest; import org.xrpl.xrpl4j.model.flags.AccountSetTransactionFlags; import org.xrpl.xrpl4j.model.flags.TransactionFlags; -import org.xrpl.xrpl4j.model.transactions.AccountDelete; import org.xrpl.xrpl4j.model.transactions.AccountSet; import org.xrpl.xrpl4j.model.transactions.AccountSet.AccountSetFlag; import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.ImmutableAccountSet; import org.xrpl.xrpl4j.model.transactions.NetworkId; +import org.xrpl.xrpl4j.model.transactions.TransactionType; import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; -public class AccountSetJsonTests extends AbstractJsonTest { +import java.util.Optional; - @Test - public void fullyPopulatedAccountSet() throws JSONException, JsonProcessingException { - AccountSet accountSet = AccountSet.builder() +public class AccountSetJsonTests + extends AbstractTransactionJsonTest { + + /** + * No-args Constructor. + */ + protected AccountSetJsonTests() { + super(AccountSet.class, ImmutableAccountSet.class, TransactionType.ACCOUNT_SET); + } + + @Override + protected ImmutableAccountSet.Builder builder() { + return ImmutableAccountSet.builder(); + } + + @Override + protected AccountSet fullyPopulatedTransaction() { + return AccountSet.builder() .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.valueOf(5)) .domain("6578616D706C652E636F6D") + .sequence(UnsignedInteger.valueOf(5)) .setFlag(AccountSetFlag.ACCOUNT_TXN_ID) .messageKey("03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB") .transferRate(UnsignedInteger.valueOf(1000000001)) @@ -61,105 +75,124 @@ public void fullyPopulatedAccountSet() throws JSONException, JsonProcessingExcep .walletLocator("ABCD") .walletSize(UnsignedInteger.ONE) .build(); + } - String json = "{\n" + - " \"TransactionType\":\"AccountSet\",\n" + - " \"Account\":\"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\":\"12\",\n" + - " \"Sequence\":5,\n" + - " \"Flags\":2147483648,\n" + - " \"Domain\":\"6578616D706C652E636F6D\",\n" + - " \"SetFlag\":5,\n" + - " \"MessageKey\":\"03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB\",\n" + - " \"TransferRate\":1000000001,\n" + - " \"TickSize\":15,\n" + - " \"ClearFlag\":8,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NFTokenMinter\" : \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"NetworkID\": 1024,\n" + - " \"WalletSize\": 1,\n" + - " \"WalletLocator\": \"ABCD\",\n" + - " \"EmailHash\":\"f9879d71855b5ff21e4963273a886bfc\"\n" + - "}"; - - assertCanSerializeAndDeserialize(accountSet, json); + @Override + protected AccountSet fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); } - @Test - public void accountSetWithEmptyOptionalStringFields() throws JSONException, JsonProcessingException { - AccountSet accountSet = AccountSet.builder() + @Override + protected AccountSet minimallyPopulatedTransaction() { + return AccountSet.builder() .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.valueOf(5)) - .setFlag(AccountSetFlag.ACCOUNT_TXN_ID) - .transferRate(UnsignedInteger.valueOf(1000000001)) - .tickSize(UnsignedInteger.valueOf(15)) - .clearFlag(AccountSetFlag.DEFAULT_RIPPLE) .signingPublicKey( PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") ) - .flags(AccountSetTransactionFlags.of(TransactionFlags.FULLY_CANONICAL_SIG.getValue())) - .mintAccount(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .networkId(NetworkId.of(1024)) .build(); + } - String json = "{\n" + - " \"TransactionType\":\"AccountSet\",\n" + - " \"Account\":\"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\":\"12\",\n" + - " \"Sequence\":5,\n" + - " \"Flags\":2147483648,\n" + - " \"SetFlag\":5,\n" + - " \"TransferRate\":1000000001,\n" + - " \"TickSize\":15,\n" + - " \"ClearFlag\":8,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NFTokenMinter\" : \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"NetworkID\": 1024\n" + + @Test + public void fullyPopulatedAccountSet() throws JSONException, JsonProcessingException { + String json = + "{\n" + + " \"TransactionType\":\"AccountSet\",\n" + + " \"Account\":\"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\":\"12\",\n" + + " \"Sequence\":5,\n" + + " \"Flags\":2147483648,\n" + + " \"Domain\":\"6578616D706C652E636F6D\",\n" + + " \"SetFlag\":5,\n" + + " \"MessageKey\":\"03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB\",\n" + + " \"TransferRate\":1000000001,\n" + + " \"TickSize\":15,\n" + + " \"ClearFlag\":8,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NFTokenMinter\" : \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"NetworkID\": 1024,\n" + + " \"WalletSize\": 1,\n" + + " \"WalletLocator\": \"ABCD\",\n" + + " \"EmailHash\":\"f9879d71855b5ff21e4963273a886bfc\"\n" + "}"; - assertCanSerializeAndDeserialize(accountSet, json); + assertCanSerializeAndDeserialize(fullyPopulatedTransaction(), json); + } + + @Test + public void minimallyPopulatedAccountSet() throws JSONException, JsonProcessingException { + + String json = + "{\n" + + " \"TransactionType\":\"AccountSet\",\n" + + " \"Account\":\"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\":\"12\",\n" + + " \"Sequence\": 0,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; + + assertCanSerializeAndDeserialize(minimallyPopulatedTransaction(), json); + } + + @Test + public void accountSetWithEmptyOptionalStringFields() throws JSONException, JsonProcessingException { + AccountSet fullyPopulatedAccountSet = AccountSet.builder().from(fullyPopulatedTransaction()) + .emailHash(Optional.empty()) + .domain(Optional.empty()) + .walletLocator(Optional.empty()) + .walletSize(Optional.empty()) + .messageKey(Optional.empty()) + .build(); + + String json = + "{\n" + + " \"TransactionType\":\"AccountSet\",\n" + + " \"Account\":\"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\":\"12\",\n" + + " \"Sequence\":5,\n" + + " \"Flags\":2147483648,\n" + + " \"SetFlag\":5,\n" + + " \"TransferRate\":1000000001,\n" + + " \"TickSize\":15,\n" + + " \"ClearFlag\":8,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NFTokenMinter\" : \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"NetworkID\": 1024\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedAccountSet, json); } @Test public void accountSetWithEmptyStringFields() throws JSONException, JsonProcessingException { - AccountSet accountSet = AccountSet.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) + AccountSet accountSet = builder().from(fullyPopulatedTransaction()) .domain("") .messageKey("") .emailHash(Strings.repeat("0", 32)) .walletLocator(Strings.repeat("0", 64)) - .sequence(UnsignedInteger.valueOf(5)) - .setFlag(AccountSetFlag.ACCOUNT_TXN_ID) - .transferRate(UnsignedInteger.valueOf(1000000001)) - .tickSize(UnsignedInteger.valueOf(15)) - .clearFlag(AccountSetFlag.DEFAULT_RIPPLE) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(AccountSetTransactionFlags.of(TransactionFlags.FULLY_CANONICAL_SIG.getValue())) - .mintAccount(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .networkId(NetworkId.of(1024)) + .walletSize(Optional.empty()) .build(); - String json = "{\n" + - " \"TransactionType\":\"AccountSet\",\n" + - " \"Account\":\"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\":\"12\",\n" + - " \"Sequence\":5,\n" + - " \"Flags\":2147483648,\n" + - " \"Domain\":\"\",\n" + - " \"SetFlag\":5,\n" + - " \"MessageKey\":\"\",\n" + - " \"TransferRate\":1000000001,\n" + - " \"TickSize\":15,\n" + - " \"ClearFlag\":8,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NFTokenMinter\" : \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"WalletLocator\" : \"" + Strings.repeat("0", 64) + "\",\n" + - " \"EmailHash\" : \"" + Strings.repeat("0", 32) + "\",\n" + - " \"NetworkID\": 1024\n" + + String json = + "{\n" + + " \"TransactionType\":\"AccountSet\",\n" + + " \"Account\":\"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\":\"12\",\n" + + " \"Sequence\":5,\n" + + " \"Flags\":2147483648,\n" + + " \"Domain\":\"\",\n" + + " \"SetFlag\":5,\n" + + " \"MessageKey\":\"\",\n" + + " \"TransferRate\":1000000001,\n" + + " \"TickSize\":15,\n" + + " \"ClearFlag\":8,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NFTokenMinter\" : \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"WalletLocator\" : \"" + Strings.repeat("0", 64) + "\",\n" + + " \"EmailHash\" : \"" + Strings.repeat("0", 32) + "\",\n" + + " \"NetworkID\": 1024\n" + "}"; assertCanSerializeAndDeserialize(accountSet, json); @@ -167,39 +200,30 @@ public void accountSetWithEmptyStringFields() throws JSONException, JsonProcessi @Test public void testJsonWithUnsetFlags() throws JsonProcessingException, JSONException { - AccountSet accountSet = AccountSet.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.valueOf(5)) - .domain("6578616D706C652E636F6D") - .setFlag(AccountSetFlag.ACCOUNT_TXN_ID) - .messageKey("03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB") - .transferRate(UnsignedInteger.valueOf(1000000001)) - .tickSize(UnsignedInteger.valueOf(15)) - .clearFlag(AccountSetFlag.DEFAULT_RIPPLE) - .emailHash(Strings.repeat("0", 32)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) + AccountSet accountSet = builder().from(fullyPopulatedTransaction()) .flags(AccountSetTransactionFlags.of(0)) - .mintAccount(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .emailHash(Strings.repeat("0", 32)) + .networkId(Optional.empty()) + .walletLocator(Optional.empty()) + .walletSize(Optional.empty()) .build(); - String json = "{\n" + - " \"TransactionType\":\"AccountSet\",\n" + - " \"Account\":\"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\":\"12\",\n" + - " \"Sequence\":5,\n" + - " \"Flags\":0,\n" + - " \"Domain\":\"6578616D706C652E636F6D\",\n" + - " \"SetFlag\":5,\n" + - " \"MessageKey\":\"03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB\",\n" + - " \"TransferRate\":1000000001,\n" + - " \"TickSize\":15,\n" + - " \"ClearFlag\":8,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NFTokenMinter\" : \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"EmailHash\":\"" + Strings.repeat("0", 32) + "\"\n" + + String json = + "{\n" + + " \"TransactionType\":\"AccountSet\",\n" + + " \"Account\":\"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\":\"12\",\n" + + " \"Sequence\":5,\n" + + " \"Flags\":0,\n" + + " \"Domain\":\"6578616D706C652E636F6D\",\n" + + " \"SetFlag\":5,\n" + + " \"MessageKey\":\"03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB\",\n" + + " \"TransferRate\":1000000001,\n" + + " \"TickSize\":15,\n" + + " \"ClearFlag\":8,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NFTokenMinter\" : \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"EmailHash\":\"" + Strings.repeat("0", 32) + "\"\n" + "}"; assertCanSerializeAndDeserialize(accountSet, json); @@ -207,37 +231,30 @@ public void testJsonWithUnsetFlags() throws JsonProcessingException, JSONExcepti @Test public void testJsonWithEmptyFlags() throws JsonProcessingException, JSONException { - AccountSet accountSet = AccountSet.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.valueOf(5)) - .domain("6578616D706C652E636F6D") - .setFlag(AccountSetFlag.ACCOUNT_TXN_ID) - .messageKey("03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB") - .transferRate(UnsignedInteger.valueOf(1000000001)) - .tickSize(UnsignedInteger.valueOf(15)) - .clearFlag(AccountSetFlag.DEFAULT_RIPPLE) - .emailHash("f9879d71855b5ff21e4963273a886bfc") - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .mintAccount(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + AccountSet accountSet = builder().from(fullyPopulatedTransaction()) + .clearFlag(Optional.empty()) + .setFlagRawValue(Optional.empty()) + .flags(AccountSetTransactionFlags.empty()) + .networkId(Optional.empty()) + .walletLocator(Optional.empty()) + .walletSize(Optional.empty()) .build(); - String json = "{\n" + - " \"TransactionType\":\"AccountSet\",\n" + - " \"Account\":\"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\":\"12\",\n" + - " \"Sequence\":5,\n" + - " \"Domain\":\"6578616D706C652E636F6D\",\n" + - " \"SetFlag\":5,\n" + - " \"MessageKey\":\"03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB\",\n" + - " \"TransferRate\":1000000001,\n" + - " \"TickSize\":15,\n" + - " \"ClearFlag\":8,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NFTokenMinter\" : \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"EmailHash\":\"f9879d71855b5ff21e4963273a886bfc\"\n" + + String json = + "{\n" + + " \"TransactionType\":\"AccountSet\",\n" + + " \"Account\":\"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\":\"12\",\n" + + " \"Sequence\":5,\n" + + " \"Domain\":\"6578616D706C652E636F6D\",\n" + + " \"SetFlag\":5,\n" + + " \"MessageKey\":\"03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB\",\n" + + " \"TransferRate\":1000000001,\n" + + " \"TickSize\":15,\n" + + " \"ClearFlag\":8,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NFTokenMinter\" : \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"EmailHash\":\"f9879d71855b5ff21e4963273a886bfc\"\n" + "}"; assertCanSerializeAndDeserialize(accountSet, json); @@ -245,37 +262,32 @@ public void testJsonWithEmptyFlags() throws JsonProcessingException, JSONExcepti @Test void testJsonWithZeroClearFlagAndSetFlag() throws JSONException, JsonProcessingException { - AccountSet accountSet = AccountSet.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.valueOf(5)) - .domain("6578616D706C652E636F6D") + AccountSet accountSet = builder().from(fullyPopulatedTransaction()) .setFlag(AccountSetFlag.NONE) - .messageKey("03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB") - .transferRate(UnsignedInteger.valueOf(1000000001)) - .tickSize(UnsignedInteger.valueOf(15)) + .setFlagRawValue(Optional.empty()) .clearFlag(AccountSetFlag.NONE) - .emailHash("f9879d71855b5ff21e4963273a886bfc") - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .mintAccount(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .clearFlagRawValue(Optional.empty()) + .flags(AccountSetTransactionFlags.empty()) + .networkId(Optional.empty()) + .walletLocator(Optional.empty()) + .walletSize(Optional.empty()) .build(); - String json = "{\n" + - " \"TransactionType\":\"AccountSet\",\n" + - " \"Account\":\"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\":\"12\",\n" + - " \"Sequence\":5,\n" + - " \"Domain\":\"6578616D706C652E636F6D\",\n" + - " \"SetFlag\":0,\n" + - " \"MessageKey\":\"03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB\",\n" + - " \"TransferRate\":1000000001,\n" + - " \"TickSize\":15,\n" + - " \"ClearFlag\":0,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NFTokenMinter\" : \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"EmailHash\":\"f9879d71855b5ff21e4963273a886bfc\"\n" + + String json = + "{\n" + + " \"TransactionType\":\"AccountSet\",\n" + + " \"Account\":\"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\":\"12\",\n" + + " \"Sequence\":5,\n" + + " \"Domain\":\"6578616D706C652E636F6D\",\n" + + " \"SetFlag\":0,\n" + + " \"MessageKey\":\"03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB\",\n" + + " \"TransferRate\":1000000001,\n" + + " \"TickSize\":15,\n" + + " \"ClearFlag\":0,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NFTokenMinter\" : \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"EmailHash\":\"f9879d71855b5ff21e4963273a886bfc\"\n" + "}"; assertCanSerializeAndDeserialize(accountSet, json); @@ -283,29 +295,22 @@ void testJsonWithZeroClearFlagAndSetFlag() throws JSONException, JsonProcessingE @Test void testJsonWithUnrecognizedClearAndSetFlag() throws JSONException, JsonProcessingException { - AccountSet accountSet = AccountSet.builder() - .account(Address.of("rhyg7sn3ZQj9aja9CBuLETFKdkG9Fte7ck")) - .fee(XrpCurrencyAmount.ofDrops(15)) - .sequence(UnsignedInteger.valueOf(40232131)) + AccountSet accountSet = builder().from(minimallyPopulatedTransaction()) + .setFlag(Optional.empty()) .setFlagRawValue(UnsignedInteger.valueOf(4294967295L)) + .clearFlag(Optional.empty()) .clearFlagRawValue(UnsignedInteger.valueOf(4294967295L)) - .signingPublicKey(PublicKey.fromBase16EncodedPublicKey( - "ED03FCED79BB3699089BC3F0F57BBD9F9ABA4772C20EC14BFAE908B4299344194A" - )) - .transactionSignature(Signature.fromBase16("8D0915449FB617234DD54E1BA79136B50C4439696BB4287F" + - "CA25717F3FD4875D5A1FEE6269B91D71D9306B48DECAAE1F1C91CAD1AAD0E0D683DC11E68212740E")) .build(); - String json = "{\n" + - " \"Account\": \"rhyg7sn3ZQj9aja9CBuLETFKdkG9Fte7ck\",\n" + - " \"Fee\": \"15\",\n" + - " \"Sequence\": 40232131,\n" + - " \"SetFlag\": 4294967295,\n" + - " \"ClearFlag\": 4294967295,\n" + - " \"SigningPubKey\": \"ED03FCED79BB3699089BC3F0F57BBD9F9ABA4772C20EC14BFAE908B4299344194A\",\n" + - " \"TransactionType\": \"AccountSet\",\n" + - " \"TxnSignature\": \"8D0915449FB617234DD54E1BA79136B50C4439696BB4287FCA25717F3FD4875D5A1FEE6269B" + - "91D71D9306B48DECAAE1F1C91CAD1AAD0E0D683DC11E68212740E\"" + + String json = + "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 0,\n" + + " \"SetFlag\": 4294967295,\n" + + " \"ClearFlag\": 4294967295,\n" + + " \"SigningPubKey\": \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"TransactionType\": \"AccountSet\"\n" + "}"; assertCanSerializeAndDeserialize(accountSet, json); @@ -313,49 +318,28 @@ void testJsonWithUnrecognizedClearAndSetFlag() throws JSONException, JsonProcess @Test public void testJsonWithUnknownFields() throws JSONException, JsonProcessingException { - AccountSet accountSet = AccountSet.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.valueOf(5)) - .domain("6578616D706C652E636F6D") - .setFlag(AccountSetFlag.ACCOUNT_TXN_ID) - .messageKey("03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB") - .transferRate(UnsignedInteger.valueOf(1000000001)) - .tickSize(UnsignedInteger.valueOf(15)) - .clearFlag(AccountSetFlag.DEFAULT_RIPPLE) - .emailHash("f9879d71855b5ff21e4963273a886bfc") - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(AccountSetTransactionFlags.of(TransactionFlags.FULLY_CANONICAL_SIG.getValue())) - .mintAccount(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .networkId(NetworkId.of(1024)) - .walletLocator("ABCD") - .walletSize(UnsignedInteger.ONE) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"TransactionType\":\"AccountSet\",\n" + - " \"Account\":\"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\":\"12\",\n" + - " \"Sequence\":5,\n" + - " \"Flags\":2147483648,\n" + - " \"Domain\":\"6578616D706C652E636F6D\",\n" + - " \"SetFlag\":5,\n" + - " \"MessageKey\":\"03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB\",\n" + - " \"TransferRate\":1000000001,\n" + - " \"TickSize\":15,\n" + - " \"ClearFlag\":8,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NFTokenMinter\" : \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"NetworkID\": 1024,\n" + - " \"WalletSize\": 1,\n" + - " \"WalletLocator\": \"ABCD\",\n" + - " \"EmailHash\":\"f9879d71855b5ff21e4963273a886bfc\"\n" + + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"TransactionType\":\"AccountSet\",\n" + + " \"Account\":\"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\":\"12\",\n" + + " \"Sequence\":5,\n" + + " \"Flags\":2147483648,\n" + + " \"Domain\":\"6578616D706C652E636F6D\",\n" + + " \"SetFlag\":5,\n" + + " \"MessageKey\":\"03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB\",\n" + + " \"TransferRate\":1000000001,\n" + + " \"TickSize\":15,\n" + + " \"ClearFlag\":8,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NFTokenMinter\" : \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"NetworkID\": 1024,\n" + + " \"WalletSize\": 1,\n" + + " \"WalletLocator\": \"ABCD\",\n" + + " \"EmailHash\":\"f9879d71855b5ff21e4963273a886bfc\"\n" + "}"; - assertCanSerializeAndDeserialize(accountSet, json); + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); } } diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/CheckCancelJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/CheckCancelJsonTests.java new file mode 100644 index 000000000..07e39e7da --- /dev/null +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/CheckCancelJsonTests.java @@ -0,0 +1,185 @@ +package org.xrpl.xrpl4j.model.transactions.json; + +/*- + * ========================LICENSE_START================================= + * xrpl4j :: model + * %% + * Copyright (C) 2020 - 2022 XRPL Foundation and its contributors + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.primitives.UnsignedInteger; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.xrpl.xrpl4j.crypto.keys.PublicKey; +import org.xrpl.xrpl4j.model.flags.TransactionFlags; +import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.CheckCancel; +import org.xrpl.xrpl4j.model.transactions.Hash256; +import org.xrpl.xrpl4j.model.transactions.ImmutableCheckCancel; +import org.xrpl.xrpl4j.model.transactions.NetworkId; +import org.xrpl.xrpl4j.model.transactions.TransactionType; +import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; + +public class CheckCancelJsonTests + extends AbstractTransactionJsonTest { + + /** + * No-args Constructor. + */ + protected CheckCancelJsonTests() { + super(CheckCancel.class, ImmutableCheckCancel.class, TransactionType.CHECK_CANCEL); + } + + @Override + protected ImmutableCheckCancel.Builder builder() { + return ImmutableCheckCancel.builder(); + } + + @Override + protected CheckCancel fullyPopulatedTransaction() { + return CheckCancel.builder() + .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) + .checkId(Hash256.of("49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0")) + .sequence(UnsignedInteger.valueOf(12)) + .fee(XrpCurrencyAmount.ofDrops(12)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .flags(TransactionFlags.UNSET) + .networkId(NetworkId.of(1024)) + .build(); + } + + @Override + protected CheckCancel fullyPopulatedTransactionWithUnknownFields() { + return CheckCancel.builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); + } + + @Override + protected CheckCancel minimallyPopulatedTransaction() { + return CheckCancel.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(12)) + .checkId(Hash256.of("49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0")) + .sequence(UnsignedInteger.valueOf(5)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .build(); + } + + @Test + public void testFullyPopulatedCheckCancelJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + + " \"TransactionType\": \"CheckCancel\",\n" + + " \"CheckID\": \"49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0\",\n" + + " \"Sequence\": 12,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Flags\": 0,\n" + + " \"Fee\": \"12\"\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); + } + + @Test + public void testCheckCancelJsonWithUnsetFlags() throws JsonProcessingException, JSONException { + CheckCancel fullyPopulatedTransaction = CheckCancel.builder().from(fullyPopulatedTransactionWithUnknownFields()) + .flags(TransactionFlags.UNSET) + .build(); + + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + + " \"TransactionType\": \"CheckCancel\",\n" + + " \"CheckID\": \"49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0\",\n" + + " \"Sequence\": 12,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Flags\": 0,\n" + + " \"Fee\": \"12\"\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransaction, json); + } + + @Test + public void testCheckCancelJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { + CheckCancel fullyPopulatedTransaction = CheckCancel.builder().from(fullyPopulatedTransaction()) + .flags(TransactionFlags.FULLY_CANONICAL_SIG) + .build(); + + String json = + "{\n" + + " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + + " \"TransactionType\": \"CheckCancel\",\n" + + " \"CheckID\": \"49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0\",\n" + + " \"Sequence\": 12,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Flags\": " + TransactionFlags.FULLY_CANONICAL_SIG.getValue() + ",\n" + + " \"Fee\": \"12\"\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransaction, json); + } + + @Test + public void testCheckCancelJsonWithEmptyFlags() throws JsonProcessingException, JSONException { + CheckCancel fullyPopulatedTransaction = CheckCancel.builder().from(fullyPopulatedTransaction()) + .flags(TransactionFlags.EMPTY) + .build(); + + String json = + "{\n" + + " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + + " \"TransactionType\": \"CheckCancel\",\n" + + " \"CheckID\": \"49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0\",\n" + + " \"Sequence\": 12,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Fee\": \"12\"\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransaction, json); + } + + @Test + public void testCheckCancelJsonWithUnknownFields() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"Flags\": 0,\n" + + " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + + " \"TransactionType\": \"CheckCancel\",\n" + + " \"CheckID\": \"49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0\",\n" + + " \"Sequence\": 12,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Fee\": \"12\"\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); + } +} diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/CheckCashJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/CheckCashJsonTests.java new file mode 100644 index 000000000..1d6f85390 --- /dev/null +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/CheckCashJsonTests.java @@ -0,0 +1,198 @@ +package org.xrpl.xrpl4j.model.transactions.json; + +/*- + * ========================LICENSE_START================================= + * xrpl4j :: model + * %% + * Copyright (C) 2020 - 2022 XRPL Foundation and its contributors + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.primitives.UnsignedInteger; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.xrpl.xrpl4j.crypto.keys.PublicKey; +import org.xrpl.xrpl4j.model.flags.TransactionFlags; +import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.CheckCash; +import org.xrpl.xrpl4j.model.transactions.Hash256; +import org.xrpl.xrpl4j.model.transactions.ImmutableCheckCash; +import org.xrpl.xrpl4j.model.transactions.IssuedCurrencyAmount; +import org.xrpl.xrpl4j.model.transactions.NetworkId; +import org.xrpl.xrpl4j.model.transactions.TransactionType; +import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; + +public class CheckCashJsonTests + extends AbstractTransactionJsonTest { + + /** + * No-args Constructor. + */ + protected CheckCashJsonTests() { + super(CheckCash.class, ImmutableCheckCash.class, TransactionType.CHECK_CASH); + } + + @Override + protected ImmutableCheckCash.Builder builder() { + return ImmutableCheckCash.builder(); + } + + @Override + protected CheckCash fullyPopulatedTransaction() { + return builder() + .account(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) + .amount(XrpCurrencyAmount.ofDrops(100)) + .checkId(Hash256.of("838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334")) + .sequence(UnsignedInteger.valueOf(1)) + .fee(XrpCurrencyAmount.ofDrops(12)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .flags(TransactionFlags.UNSET) + .networkId(NetworkId.of(1024)) + .build(); + } + + @Override + protected CheckCash fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); + } + + @Override + protected CheckCash minimallyPopulatedTransaction() { + return builder() + .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) + .checkId(Hash256.of("49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0")) + .deliverMin(IssuedCurrencyAmount.builder() + .currency("USD") + .value("10") + .issuer(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo") + ).build()) + .fee(XrpCurrencyAmount.ofDrops(12)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .build(); + } + + @Test + public void testCheckCashJsonWithDeliverMin() throws JsonProcessingException, JSONException { + CheckCash checkCash = builder().from(minimallyPopulatedTransaction()) + .deliverMin(XrpCurrencyAmount.ofDrops(100)) + .build(); + + String json = + "{\n" + + " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + + " \"DeliverMin\": \"100\",\n" + + " \"TransactionType\": \"CheckCash\",\n" + + " \"CheckID\": \"49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Sequence\": 0,\n" + + " \"Fee\": \"12\"\n" + + "}"; + + assertCanSerializeAndDeserialize(checkCash, json); + } + + @Test + public void testCheckCashJsonWithAmount() throws JsonProcessingException, JSONException { + CheckCash checkCash = builder().from(fullyPopulatedTransactionWithUnknownFields()) + .amount(XrpCurrencyAmount.ofDrops(100)) + .build(); + + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"Account\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + + " \"Amount\": \"100\",\n" + + " \"CheckID\": \"838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334\",\n" + + " \"Flags\": 0,\n" + + " \"Fee\": \"12\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"TransactionType\": \"CheckCash\"\n" + + "}"; + + assertCanSerializeAndDeserialize(checkCash, json); + } + + @Test + public void testCheckCashJsonWithUnsetFlags() throws JsonProcessingException, JSONException { + CheckCash checkCash = builder().from(fullyPopulatedTransaction()) + .flags(TransactionFlags.UNSET) + .build(); + + String json = + "{\n" + + " \"Account\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + + " \"TransactionType\": \"CheckCash\",\n" + + " \"Amount\": \"100\",\n" + + " \"CheckID\": \"838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334\",\n" + + " \"Sequence\": 1,\n" + + " \"Flags\": 0,\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Fee\": \"12\"\n" + + "}"; + + assertCanSerializeAndDeserialize(checkCash, json); + } + + @Test + public void testCheckCashJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { + CheckCash checkCash = builder().from(fullyPopulatedTransaction()) + .flags(TransactionFlags.FULLY_CANONICAL_SIG) + .build(); + + String json = + "{\n" + + " \"Account\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + + " \"TransactionType\": \"CheckCash\",\n" + + " \"Amount\": \"100\",\n" + + " \"CheckID\": \"838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334\",\n" + + " \"Sequence\": 1,\n" + + " \"Flags\": " + TransactionFlags.FULLY_CANONICAL_SIG.getValue() + ",\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Fee\": \"12\"\n" + + "}"; + + assertCanSerializeAndDeserialize(checkCash, json); + } + + @Test + public void testCheckCashJsonWithUnknownFields() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"Amount\": \"100\",\n" + + " \"Account\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + + " \"CheckID\": \"838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334\",\n" + + " \"Fee\": \"12\",\n" + + " \"Flags\": 0,\n" + + " \"NetworkID\": 1024,\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"TransactionType\": \"CheckCash\"\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); + } +} diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/CheckCreateJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/CheckCreateJsonTests.java new file mode 100644 index 000000000..668bf69fb --- /dev/null +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/CheckCreateJsonTests.java @@ -0,0 +1,221 @@ +package org.xrpl.xrpl4j.model.transactions.json; + +/*- + * ========================LICENSE_START================================= + * xrpl4j :: model + * %% + * Copyright (C) 2020 - 2022 XRPL Foundation and its contributors + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.primitives.UnsignedInteger; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.xrpl.xrpl4j.crypto.keys.PublicKey; +import org.xrpl.xrpl4j.model.flags.TransactionFlags; +import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.CheckCreate; +import org.xrpl.xrpl4j.model.transactions.Hash256; +import org.xrpl.xrpl4j.model.transactions.ImmutableCheckCreate; +import org.xrpl.xrpl4j.model.transactions.NetworkId; +import org.xrpl.xrpl4j.model.transactions.TransactionType; +import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; + +public class CheckCreateJsonTests + extends AbstractTransactionJsonTest { + + /** + * No-args Constructor. + */ + protected CheckCreateJsonTests() { + super(CheckCreate.class, ImmutableCheckCreate.class, TransactionType.CHECK_CREATE); + } + + @Override + protected ImmutableCheckCreate.Builder builder() { + return CheckCreate.builder(); + } + + @Override + protected CheckCreate fullyPopulatedTransaction() { + return builder() + .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) + .accountTransactionId(Hash256.of("6F1DFD1D0FE8A32E40E1F2C05CF1C15545BAB56B617F9C6C2D63A6B704BEF59B")) + .destination(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) + .destinationTag(UnsignedInteger.ONE) + .expiration(UnsignedInteger.valueOf(570113521)) + .fee(XrpCurrencyAmount.ofDrops(12)) + .flags(TransactionFlags.FULLY_CANONICAL_SIG) + .invoiceId(Hash256.of("6F1DFD1D0FE8A32E40E1F2C05CF1C15545BAB56B617F9C6C2D63A6B704BEF59B")) + .networkId(NetworkId.of(1024)) + .sequence(UnsignedInteger.ONE) + .sendMax(XrpCurrencyAmount.ofDrops(100000000)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .build(); + } + + @Override + protected CheckCreate fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); + } + + @Override + protected CheckCreate minimallyPopulatedTransaction() { + return builder() + .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) + .destination(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) + .fee(XrpCurrencyAmount.ofDrops(12)) + .sendMax(XrpCurrencyAmount.ofDrops(100000000)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .build(); + } + + @Test + public void testCheckCreateJson() throws JsonProcessingException, JSONException { + CheckCreate checkCreate = CheckCreate.builder() + .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) + .sequence(UnsignedInteger.ONE) + .fee(XrpCurrencyAmount.ofDrops(12)) + .destination(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) + .destinationTag(UnsignedInteger.ONE) + .sendMax(XrpCurrencyAmount.ofDrops(100000000)) + .expiration(UnsignedInteger.valueOf(570113521)) + .invoiceId(Hash256.of("6F1DFD1D0FE8A32E40E1F2C05CF1C15545BAB56B617F9C6C2D63A6B704BEF59B")) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .build(); + + String json = + "{\n" + + " \"TransactionType\": \"CheckCreate\",\n" + + " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + + " \"Destination\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + + " \"SendMax\": \"100000000\",\n" + + " \"Expiration\": 570113521,\n" + + " \"InvoiceID\": \"6F1DFD1D0FE8A32E40E1F2C05CF1C15545BAB56B617F9C6C2D63A6B704BEF59B\",\n" + + " \"DestinationTag\": 1,\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Fee\": \"12\"\n" + + "}"; + + assertCanSerializeAndDeserialize(checkCreate, json); + } + + @Test + public void testCheckCreateJsonWithUnsetFlags() throws JsonProcessingException, JSONException { + CheckCreate checkCreate = CheckCreate.builder() + .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) + .sequence(UnsignedInteger.ONE) + .fee(XrpCurrencyAmount.ofDrops(12)) + .destination(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) + .sendMax(XrpCurrencyAmount.ofDrops(100000000)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .flags(TransactionFlags.UNSET) + .build(); + + String json = + "{\n" + + " \"TransactionType\": \"CheckCreate\",\n" + + " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + + " \"Destination\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + + " \"SendMax\": \"100000000\",\n" + + " \"Sequence\": 1,\n" + + " \"Flags\": 0,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Fee\": \"12\"\n" + + "}"; + + assertCanSerializeAndDeserialize(checkCreate, json); + } + + @Test + public void testCheckCreateJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { + CheckCreate checkCreate = CheckCreate.builder() + .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) + .sequence(UnsignedInteger.ONE) + .fee(XrpCurrencyAmount.ofDrops(12)) + .destination(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) + .sendMax(XrpCurrencyAmount.ofDrops(100000000)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .flags(TransactionFlags.FULLY_CANONICAL_SIG) + .build(); + + String json = + "{\n" + + " \"TransactionType\": \"CheckCreate\",\n" + + " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + + " \"Destination\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + + " \"SendMax\": \"100000000\",\n" + + " \"Sequence\": 1,\n" + + " \"Flags\": " + TransactionFlags.FULLY_CANONICAL_SIG + ",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Fee\": \"12\"\n" + + "}"; + + assertCanSerializeAndDeserialize(checkCreate, json); + } + + @Test + public void testCheckCreateJsonWithUnknownFields() throws JsonProcessingException, JSONException { + CheckCreate checkCreate = CheckCreate.builder() + .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) + .sequence(UnsignedInteger.ONE) + .fee(XrpCurrencyAmount.ofDrops(12)) + .destination(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) + .destinationTag(UnsignedInteger.ONE) + .sendMax(XrpCurrencyAmount.ofDrops(100000000)) + .expiration(UnsignedInteger.valueOf(570113521)) + .invoiceId(Hash256.of("6F1DFD1D0FE8A32E40E1F2C05CF1C15545BAB56B617F9C6C2D63A6B704BEF59B")) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .putUnknownFields("Foo", "Bar") + .build(); + + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"TransactionType\": \"CheckCreate\",\n" + + " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + + " \"Destination\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + + " \"SendMax\": \"100000000\",\n" + + " \"Expiration\": 570113521,\n" + + " \"InvoiceID\": \"6F1DFD1D0FE8A32E40E1F2C05CF1C15545BAB56B617F9C6C2D63A6B704BEF59B\",\n" + + " \"DestinationTag\": 1,\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Fee\": \"12\"\n" + + "}"; + + assertCanSerializeAndDeserialize(checkCreate, json); + } +} diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/CheckJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/CheckJsonTests.java deleted file mode 100644 index 056979430..000000000 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/CheckJsonTests.java +++ /dev/null @@ -1,437 +0,0 @@ -package org.xrpl.xrpl4j.model.transactions.json; - -/*- - * ========================LICENSE_START================================= - * xrpl4j :: model - * %% - * Copyright (C) 2020 - 2022 XRPL Foundation and its contributors - * %% - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * =========================LICENSE_END================================== - */ - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.google.common.primitives.UnsignedInteger; -import org.json.JSONException; -import org.junit.jupiter.api.Test; -import org.xrpl.xrpl4j.crypto.keys.PublicKey; -import org.xrpl.xrpl4j.model.AbstractJsonTest; -import org.xrpl.xrpl4j.model.flags.TransactionFlags; -import org.xrpl.xrpl4j.model.transactions.Address; -import org.xrpl.xrpl4j.model.transactions.CheckCancel; -import org.xrpl.xrpl4j.model.transactions.CheckCash; -import org.xrpl.xrpl4j.model.transactions.CheckCreate; -import org.xrpl.xrpl4j.model.transactions.Hash256; -import org.xrpl.xrpl4j.model.transactions.NetworkId; -import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; - -public class CheckJsonTests extends AbstractJsonTest { - - @Test - public void testCheckCancelJson() throws JsonProcessingException, JSONException { - CheckCancel checkCancel = CheckCancel.builder() - .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) - .checkId(Hash256.of("49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0")) - .sequence(UnsignedInteger.valueOf(12)) - .fee(XrpCurrencyAmount.ofDrops(12)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey( "02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .build(); - - String json = "{\n" + - " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + - " \"TransactionType\": \"CheckCancel\",\n" + - " \"CheckID\": \"49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0\",\n" + - " \"Sequence\": 12,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Fee\": \"12\"\n" + - "}"; - - assertCanSerializeAndDeserialize(checkCancel, json); - } - - @Test - public void testCheckCancelJsonWithUnsetFlags() throws JsonProcessingException, JSONException { - CheckCancel checkCancel = CheckCancel.builder() - .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) - .checkId(Hash256.of("49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0")) - .sequence(UnsignedInteger.valueOf(12)) - .fee(XrpCurrencyAmount.ofDrops(12)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey( "02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.UNSET) - .build(); - - String json = "{\n" + - " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + - " \"TransactionType\": \"CheckCancel\",\n" + - " \"CheckID\": \"49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0\",\n" + - " \"Sequence\": 12,\n" + - " \"Flags\": 0,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"12\"\n" + - "}"; - - assertCanSerializeAndDeserialize(checkCancel, json); - } - - @Test - public void testCheckCancelJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { - CheckCancel checkCancel = CheckCancel.builder() - .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) - .checkId(Hash256.of("49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0")) - .sequence(UnsignedInteger.valueOf(12)) - .fee(XrpCurrencyAmount.ofDrops(12)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey( "02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.FULLY_CANONICAL_SIG) - .build(); - - String json = String.format("{\n" + - " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + - " \"TransactionType\": \"CheckCancel\",\n" + - " \"CheckID\": \"49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0\",\n" + - " \"Sequence\": 12,\n" + - " \"Flags\": %s,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"12\"\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); - - assertCanSerializeAndDeserialize(checkCancel, json); - } - - @Test - public void testCheckCancelJsonWithUnknownFields() throws JsonProcessingException, JSONException { - CheckCancel checkCancel = CheckCancel.builder() - .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) - .checkId(Hash256.of("49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0")) - .sequence(UnsignedInteger.valueOf(12)) - .fee(XrpCurrencyAmount.ofDrops(12)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey( "02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + - " \"TransactionType\": \"CheckCancel\",\n" + - " \"CheckID\": \"49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0\",\n" + - " \"Sequence\": 12,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Fee\": \"12\"\n" + - "}"; - - assertCanSerializeAndDeserialize(checkCancel, json); - } - - @Test - public void testCheckCashJsonWithDeliverMin() throws JsonProcessingException, JSONException { - CheckCash checkCash = CheckCash.builder() - .account(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) - .checkId(Hash256.of("838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334")) - .sequence(UnsignedInteger.ONE) - .fee(XrpCurrencyAmount.ofDrops(12)) - .deliverMin(XrpCurrencyAmount.ofDrops(100)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .build(); - - String json = "{\n" + - " \"Account\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + - " \"TransactionType\": \"CheckCash\",\n" + - " \"DeliverMin\": \"100\",\n" + - " \"CheckID\": \"838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334\",\n" + - " \"Sequence\": 1,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Fee\": \"12\"\n" + - "}"; - - assertCanSerializeAndDeserialize(checkCash, json); - } - - @Test - public void testCheckCashJsonWithAmount() throws JsonProcessingException, JSONException { - CheckCash checkCash = CheckCash.builder() - .account(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) - .checkId(Hash256.of("838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334")) - .sequence(UnsignedInteger.ONE) - .fee(XrpCurrencyAmount.ofDrops(12)) - .amount(XrpCurrencyAmount.ofDrops(100)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .build(); - - String json = "{\n" + - " \"Account\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + - " \"TransactionType\": \"CheckCash\",\n" + - " \"Amount\": \"100\",\n" + - " \"CheckID\": \"838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334\",\n" + - " \"Sequence\": 1,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"12\"\n" + - "}"; - - assertCanSerializeAndDeserialize(checkCash, json); - } - - @Test - public void testCheckCashJsonWithUnsetFlags() throws JsonProcessingException, JSONException { - CheckCash checkCash = CheckCash.builder() - .account(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) - .checkId(Hash256.of("838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334")) - .sequence(UnsignedInteger.ONE) - .fee(XrpCurrencyAmount.ofDrops(12)) - .amount(XrpCurrencyAmount.ofDrops(100)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.UNSET) - .build(); - - String json = "{\n" + - " \"Account\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + - " \"TransactionType\": \"CheckCash\",\n" + - " \"Amount\": \"100\",\n" + - " \"CheckID\": \"838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334\",\n" + - " \"Sequence\": 1,\n" + - " \"Flags\": 0,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"12\"\n" + - "}"; - - assertCanSerializeAndDeserialize(checkCash, json); - } - - @Test - public void testCheckCashJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { - CheckCash checkCash = CheckCash.builder() - .account(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) - .checkId(Hash256.of("838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334")) - .sequence(UnsignedInteger.ONE) - .fee(XrpCurrencyAmount.ofDrops(12)) - .amount(XrpCurrencyAmount.ofDrops(100)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.FULLY_CANONICAL_SIG) - .build(); - - String json = String.format("{\n" + - " \"Account\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + - " \"TransactionType\": \"CheckCash\",\n" + - " \"Amount\": \"100\",\n" + - " \"CheckID\": \"838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334\",\n" + - " \"Sequence\": 1,\n" + - " \"Flags\": %s,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"12\"\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); - - assertCanSerializeAndDeserialize(checkCash, json); - } - - @Test - public void testCheckCashJsonWithUnknownFields() throws JsonProcessingException, JSONException { - CheckCash checkCash = CheckCash.builder() - .account(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) - .checkId(Hash256.of("838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334")) - .sequence(UnsignedInteger.ONE) - .fee(XrpCurrencyAmount.ofDrops(12)) - .deliverMin(XrpCurrencyAmount.ofDrops(100)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"Account\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + - " \"TransactionType\": \"CheckCash\",\n" + - " \"DeliverMin\": \"100\",\n" + - " \"CheckID\": \"838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334\",\n" + - " \"Sequence\": 1,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Fee\": \"12\"\n" + - "}"; - - assertCanSerializeAndDeserialize(checkCash, json); - } - - @Test - public void testCheckCreateJson() throws JsonProcessingException, JSONException { - CheckCreate checkCreate = CheckCreate.builder() - .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) - .sequence(UnsignedInteger.ONE) - .fee(XrpCurrencyAmount.ofDrops(12)) - .destination(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) - .destinationTag(UnsignedInteger.ONE) - .sendMax(XrpCurrencyAmount.ofDrops(100000000)) - .expiration(UnsignedInteger.valueOf(570113521)) - .invoiceId(Hash256.of("6F1DFD1D0FE8A32E40E1F2C05CF1C15545BAB56B617F9C6C2D63A6B704BEF59B")) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .build(); - - String json = "{\n" + - " \"TransactionType\": \"CheckCreate\",\n" + - " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + - " \"Destination\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + - " \"SendMax\": \"100000000\",\n" + - " \"Expiration\": 570113521,\n" + - " \"InvoiceID\": \"6F1DFD1D0FE8A32E40E1F2C05CF1C15545BAB56B617F9C6C2D63A6B704BEF59B\",\n" + - " \"DestinationTag\": 1,\n" + - " \"Sequence\": 1,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Fee\": \"12\"\n" + - "}"; - - assertCanSerializeAndDeserialize(checkCreate, json); - } - - @Test - public void testMinimalCheckCreateJson() throws JsonProcessingException, JSONException { - CheckCreate checkCreate = CheckCreate.builder() - .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) - .sequence(UnsignedInteger.ONE) - .fee(XrpCurrencyAmount.ofDrops(12)) - .destination(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) - .sendMax(XrpCurrencyAmount.ofDrops(100000000)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .build(); - - String json = "{\n" + - " \"TransactionType\": \"CheckCreate\",\n" + - " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + - " \"Destination\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + - " \"SendMax\": \"100000000\",\n" + - " \"Sequence\": 1,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"12\"\n" + - "}"; - - assertCanSerializeAndDeserialize(checkCreate, json); - } - - @Test - public void testCheckCreateJsonWithUnsetFlags() throws JsonProcessingException, JSONException { - CheckCreate checkCreate = CheckCreate.builder() - .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) - .sequence(UnsignedInteger.ONE) - .fee(XrpCurrencyAmount.ofDrops(12)) - .destination(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) - .sendMax(XrpCurrencyAmount.ofDrops(100000000)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.UNSET) - .build(); - - String json = "{\n" + - " \"TransactionType\": \"CheckCreate\",\n" + - " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + - " \"Destination\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + - " \"SendMax\": \"100000000\",\n" + - " \"Sequence\": 1,\n" + - " \"Flags\": 0,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"12\"\n" + - "}"; - - assertCanSerializeAndDeserialize(checkCreate, json); - } - - @Test - public void testCheckCreateJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { - CheckCreate checkCreate = CheckCreate.builder() - .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) - .sequence(UnsignedInteger.ONE) - .fee(XrpCurrencyAmount.ofDrops(12)) - .destination(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) - .sendMax(XrpCurrencyAmount.ofDrops(100000000)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.FULLY_CANONICAL_SIG) - .build(); - - String json = String.format("{\n" + - " \"TransactionType\": \"CheckCreate\",\n" + - " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + - " \"Destination\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + - " \"SendMax\": \"100000000\",\n" + - " \"Sequence\": 1,\n" + - " \"Flags\": %s,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"12\"\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG); - - assertCanSerializeAndDeserialize(checkCreate, json); - } - - @Test - public void testCheckCreateJsonWithUnknownFields() throws JsonProcessingException, JSONException { - CheckCreate checkCreate = CheckCreate.builder() - .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) - .sequence(UnsignedInteger.ONE) - .fee(XrpCurrencyAmount.ofDrops(12)) - .destination(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) - .destinationTag(UnsignedInteger.ONE) - .sendMax(XrpCurrencyAmount.ofDrops(100000000)) - .expiration(UnsignedInteger.valueOf(570113521)) - .invoiceId(Hash256.of("6F1DFD1D0FE8A32E40E1F2C05CF1C15545BAB56B617F9C6C2D63A6B704BEF59B")) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"TransactionType\": \"CheckCreate\",\n" + - " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + - " \"Destination\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + - " \"SendMax\": \"100000000\",\n" + - " \"Expiration\": 570113521,\n" + - " \"InvoiceID\": \"6F1DFD1D0FE8A32E40E1F2C05CF1C15545BAB56B617F9C6C2D63A6B704BEF59B\",\n" + - " \"DestinationTag\": 1,\n" + - " \"Sequence\": 1,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Fee\": \"12\"\n" + - "}"; - - assertCanSerializeAndDeserialize(checkCreate, json); - } -} diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/EnableAmendmentJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/EnableAmendmentJsonTests.java index 85486ade3..fea1c16fc 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/EnableAmendmentJsonTests.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/EnableAmendmentJsonTests.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -24,60 +24,86 @@ import com.google.common.primitives.UnsignedInteger; import org.json.JSONException; import org.junit.jupiter.api.Test; -import org.xrpl.xrpl4j.model.AbstractJsonTest; import org.xrpl.xrpl4j.model.client.common.LedgerIndex; import org.xrpl.xrpl4j.model.transactions.Address; import org.xrpl.xrpl4j.model.transactions.EnableAmendment; import org.xrpl.xrpl4j.model.transactions.Hash256; +import org.xrpl.xrpl4j.model.transactions.ImmutableEnableAmendment; +import org.xrpl.xrpl4j.model.transactions.TransactionType; import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; import java.util.Optional; -public class EnableAmendmentJsonTests extends AbstractJsonTest { +public class EnableAmendmentJsonTests + extends AbstractTransactionJsonTest { - @Test - public void testJson() throws JsonProcessingException, JSONException { - EnableAmendment enableAmendment = EnableAmendment.builder() + /** + * No-args Constructor. + */ + protected EnableAmendmentJsonTests() { + super(EnableAmendment.class, ImmutableEnableAmendment.class, TransactionType.ENABLE_AMENDMENT); + } + + + @Override + protected ImmutableEnableAmendment.Builder builder() { + return ImmutableEnableAmendment.builder(); + } + + @Override + protected EnableAmendment fullyPopulatedTransaction() { + return EnableAmendment.builder() .account(Address.of("rrrrrrrrrrrrrrrrrrrrrhoLvTp")) .fee(XrpCurrencyAmount.ofDrops(12)) .sequence(UnsignedInteger.valueOf(2470665)) .amendment(Hash256.of("42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE")) .ledgerSequence(Optional.of(LedgerIndex.of(UnsignedInteger.valueOf(67850752)))) .build(); + } - String json = "{" + - "\"Account\":\"rrrrrrrrrrrrrrrrrrrrrhoLvTp\"," + - "\"Fee\":\"12\"," + - "\"LedgerSequence\":67850752," + - "\"Sequence\":2470665," + - "\"SigningPubKey\":\"\"," + - "\"TransactionType\":\"EnableAmendment\"," + - "\"Amendment\":\"42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE\"}"; - - assertCanSerializeAndDeserialize(enableAmendment, json); + @Override + protected EnableAmendment fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); } - @Test - public void testJsonWithUnknownFields() throws JsonProcessingException, JSONException { - EnableAmendment enableAmendment = EnableAmendment.builder() + @Override + protected EnableAmendment minimallyPopulatedTransaction() { + return EnableAmendment.builder() .account(Address.of("rrrrrrrrrrrrrrrrrrrrrhoLvTp")) .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.valueOf(2470665)) .amendment(Hash256.of("42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE")) .ledgerSequence(Optional.of(LedgerIndex.of(UnsignedInteger.valueOf(67850752)))) - .putUnknownFields("Foo", "Bar") .build(); + } + + @Test + public void testJson() throws JsonProcessingException, JSONException { + String json = "{" + + "\"Account\":\"rrrrrrrrrrrrrrrrrrrrrhoLvTp\"," + + "\"Fee\":\"12\"," + + "\"LedgerSequence\":67850752," + + "\"Sequence\":2470665," + + "\"SigningPubKey\":\"\"," + + "\"TransactionType\":\"EnableAmendment\"," + + "\"Amendment\":\"42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE\"}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransaction(), json); + } + @Test + public void testJsonWithUnknownFields() throws JsonProcessingException, JSONException { String json = "{" + - "\"Foo\" : \"Bar\",\n" + - "\"Account\":\"rrrrrrrrrrrrrrrrrrrrrhoLvTp\"," + - "\"Fee\":\"12\"," + - "\"LedgerSequence\":67850752," + - "\"Sequence\":2470665," + - "\"SigningPubKey\":\"\"," + - "\"TransactionType\":\"EnableAmendment\"," + - "\"Amendment\":\"42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE\"}"; + "\"Foo\" : \"Bar\",\n" + + "\"Account\":\"rrrrrrrrrrrrrrrrrrrrrhoLvTp\"," + + "\"Fee\":\"12\"," + + "\"LedgerSequence\":67850752," + + "\"Sequence\":2470665," + + "\"SigningPubKey\":\"\"," + + "\"TransactionType\":\"EnableAmendment\"," + + "\"Amendment\":\"42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE\"}"; - assertCanSerializeAndDeserialize(enableAmendment, json); + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); } } diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/EscrowCancelJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/EscrowCancelJsonTests.java new file mode 100644 index 000000000..a23a79522 --- /dev/null +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/EscrowCancelJsonTests.java @@ -0,0 +1,136 @@ +package org.xrpl.xrpl4j.model.transactions.json; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.primitives.UnsignedInteger; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.xrpl.xrpl4j.crypto.keys.PublicKey; +import org.xrpl.xrpl4j.model.flags.TransactionFlags; +import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.EscrowCancel; +import org.xrpl.xrpl4j.model.transactions.ImmutableEscrowCancel; +import org.xrpl.xrpl4j.model.transactions.NetworkId; +import org.xrpl.xrpl4j.model.transactions.TransactionType; +import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; + +public class EscrowCancelJsonTests + extends AbstractTransactionJsonTest { + + /** + * No-args Constructor. + */ + protected EscrowCancelJsonTests() { + super(EscrowCancel.class, ImmutableEscrowCancel.class, TransactionType.ESCROW_CANCEL); + } + + @Override + protected ImmutableEscrowCancel.Builder builder() { + return ImmutableEscrowCancel.builder(); + } + + @Override + protected EscrowCancel fullyPopulatedTransaction() { + return EscrowCancel.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(12)) + .sequence(UnsignedInteger.ONE) + .owner(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .offerSequence(UnsignedInteger.valueOf(7)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .build(); + } + + @Override + protected EscrowCancel fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); + } + + @Override + protected EscrowCancel minimallyPopulatedTransaction() { + return EscrowCancel.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(12)) + .sequence(UnsignedInteger.ONE) + .owner(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .offerSequence(UnsignedInteger.valueOf(7)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .build(); + } + + @Test + public void testEscrowCancelJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"TransactionType\": \"EscrowCancel\",\n" + + " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"OfferSequence\": 7,\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Fee\": \"12\"\n" + + "}"; + assertCanSerializeAndDeserialize(fullyPopulatedTransaction(), json); + } + + @Test + public void testEscrowCancelJsonWithUnsetFlags() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"TransactionType\": \"EscrowCancel\",\n" + + " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"OfferSequence\": 7,\n" + + " \"Sequence\": 1,\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Fee\": \"12\"\n" + + "}"; + assertCanSerializeAndDeserialize(fullyPopulatedTransaction(), json); + } + + @Test + public void testEscrowCancelJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { + EscrowCancel transaction = builder().from(fullyPopulatedTransaction()) + .flags(TransactionFlags.FULLY_CANONICAL_SIG) + .build(); + + String json = + "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"Flags\": " + TransactionFlags.FULLY_CANONICAL_SIG.getValue() + ",\n" + + " \"NetworkID\": 1024,\n" + + " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"OfferSequence\": 7,\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"TransactionType\": \"EscrowCancel\"\n" + + "}"; + assertCanSerializeAndDeserialize(transaction, json); + } + + @Test + public void testEscrowCancelJsonWithUnknownFields() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"TransactionType\": \"EscrowCancel\",\n" + + " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"OfferSequence\": 7,\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Fee\": \"12\"\n" + + "}"; + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); + } +} diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/EscrowCreateJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/EscrowCreateJsonTests.java new file mode 100644 index 000000000..fbcedf579 --- /dev/null +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/EscrowCreateJsonTests.java @@ -0,0 +1,271 @@ +package org.xrpl.xrpl4j.model.transactions.json; + +/*- + * ========================LICENSE_START================================= + * xrpl4j :: model + * %% + * Copyright (C) 2020 - 2022 XRPL Foundation and its contributors + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.io.BaseEncoding; +import com.google.common.primitives.UnsignedInteger; +import com.google.common.primitives.UnsignedLong; +import com.ripple.cryptoconditions.CryptoConditionReader; +import com.ripple.cryptoconditions.der.DerEncodingException; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.xrpl.xrpl4j.crypto.keys.PublicKey; +import org.xrpl.xrpl4j.model.flags.TransactionFlags; +import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.EscrowCreate; +import org.xrpl.xrpl4j.model.transactions.ImmutableEscrowCreate; +import org.xrpl.xrpl4j.model.transactions.NetworkId; +import org.xrpl.xrpl4j.model.transactions.TransactionType; +import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; + +public class EscrowCreateJsonTests extends AbstractTransactionJsonTest< + ImmutableEscrowCreate, ImmutableEscrowCreate.Builder, EscrowCreate + > { + + /** + * No-args Constructor. + */ + protected EscrowCreateJsonTests() { + super(EscrowCreate.class, ImmutableEscrowCreate.class, TransactionType.ESCROW_CREATE); + } + + @Override + protected ImmutableEscrowCreate.Builder builder() { + return ImmutableEscrowCreate.builder(); + } + + @Override + protected EscrowCreate fullyPopulatedTransaction() { + try { + return EscrowCreate.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(12)) + .sequence(UnsignedInteger.ONE) + .amount(XrpCurrencyAmount.ofDrops(10000)) + .destination(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) + .destinationTag(UnsignedInteger.valueOf(23480)) + .cancelAfter(UnsignedLong.valueOf(533257958)) + .finishAfter(UnsignedLong.valueOf(533171558)) + .condition(CryptoConditionReader.readCondition( + BaseEncoding.base16() + .decode("A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) + ) + .sourceTag(UnsignedInteger.valueOf(11747)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .build(); + } catch (DerEncodingException e) { + throw new RuntimeException(e); + } + } + + @Override + protected EscrowCreate fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); + } + + @Override + protected EscrowCreate minimallyPopulatedTransaction() { + return EscrowCreate.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(12)) + .sequence(UnsignedInteger.ONE) + .amount(XrpCurrencyAmount.ofDrops(10000)) + .destination(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .build(); + } + + @Test + public void testEscrowCreateJson() throws JsonProcessingException, JSONException, DerEncodingException { + EscrowCreate escrowCreate = EscrowCreate.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(12)) + .sequence(UnsignedInteger.ONE) + .amount(XrpCurrencyAmount.ofDrops(10000)) + .destination(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) + .destinationTag(UnsignedInteger.valueOf(23480)) + .cancelAfter(UnsignedLong.valueOf(533257958)) + .finishAfter(UnsignedLong.valueOf(533171558)) + .condition(CryptoConditionReader.readCondition( + BaseEncoding.base16() + .decode("A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) + ) + .sourceTag(UnsignedInteger.valueOf(11747)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .build(); + + String json = "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"TransactionType\": \"EscrowCreate\",\n" + + " \"Amount\": \"10000\",\n" + + " \"Destination\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + + " \"CancelAfter\": 533257958,\n" + + " \"FinishAfter\": 533171558,\n" + + " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + + " \"DestinationTag\": 23480,\n" + + " \"SourceTag\": 11747,\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Fee\": \"12\"\n" + + "}"; + + assertCanSerializeAndDeserialize(escrowCreate, json); + } + + @Test + public void testEscrowCreateJsonWithUnsetFlags() throws JsonProcessingException, JSONException, DerEncodingException { + EscrowCreate escrowCreate = EscrowCreate.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(12)) + .sequence(UnsignedInteger.ONE) + .amount(XrpCurrencyAmount.ofDrops(10000)) + .destination(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) + .destinationTag(UnsignedInteger.valueOf(23480)) + .cancelAfter(UnsignedLong.valueOf(533257958)) + .finishAfter(UnsignedLong.valueOf(533171558)) + .condition(CryptoConditionReader.readCondition( + BaseEncoding.base16() + .decode("A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) + ) + .sourceTag(UnsignedInteger.valueOf(11747)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .flags(TransactionFlags.UNSET) + .build(); + + String json = "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"TransactionType\": \"EscrowCreate\",\n" + + " \"Amount\": \"10000\",\n" + + " \"Destination\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + + " \"CancelAfter\": 533257958,\n" + + " \"FinishAfter\": 533171558,\n" + + " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + + " \"DestinationTag\": 23480,\n" + + " \"SourceTag\": 11747,\n" + + " \"Sequence\": 1,\n" + + " \"Flags\": 0,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Fee\": \"12\"\n" + + "}"; + + assertCanSerializeAndDeserialize(escrowCreate, json); + } + + @Test + public void testEscrowCreateJsonWithNonZeroFlags() + throws JsonProcessingException, JSONException, DerEncodingException { + EscrowCreate escrowCreate = EscrowCreate.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(12)) + .sequence(UnsignedInteger.ONE) + .amount(XrpCurrencyAmount.ofDrops(10000)) + .destination(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) + .destinationTag(UnsignedInteger.valueOf(23480)) + .cancelAfter(UnsignedLong.valueOf(533257958)) + .finishAfter(UnsignedLong.valueOf(533171558)) + .condition(CryptoConditionReader.readCondition( + BaseEncoding.base16() + .decode("A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) + ) + .sourceTag(UnsignedInteger.valueOf(11747)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .flags(TransactionFlags.FULLY_CANONICAL_SIG) + .build(); + + String json = String.format("{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"TransactionType\": \"EscrowCreate\",\n" + + " \"Amount\": \"10000\",\n" + + " \"Destination\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + + " \"CancelAfter\": 533257958,\n" + + " \"FinishAfter\": 533171558,\n" + + " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + + " \"DestinationTag\": 23480,\n" + + " \"SourceTag\": 11747,\n" + + " \"Sequence\": 1,\n" + + " \"Flags\": %s,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Fee\": \"12\"\n" + + "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); + + assertCanSerializeAndDeserialize(escrowCreate, json); + } + + @Test + public void testEscrowCreateJsonWithUnknownFields() + throws JsonProcessingException, JSONException, DerEncodingException { + EscrowCreate escrowCreate = EscrowCreate.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(12)) + .sequence(UnsignedInteger.ONE) + .amount(XrpCurrencyAmount.ofDrops(10000)) + .destination(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) + .destinationTag(UnsignedInteger.valueOf(23480)) + .cancelAfter(UnsignedLong.valueOf(533257958)) + .finishAfter(UnsignedLong.valueOf(533171558)) + .condition(CryptoConditionReader.readCondition( + BaseEncoding.base16() + .decode("A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) + ) + .sourceTag(UnsignedInteger.valueOf(11747)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .putUnknownFields("Foo", "Bar") + .build(); + + String json = "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"TransactionType\": \"EscrowCreate\",\n" + + " \"Amount\": \"10000\",\n" + + " \"Destination\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + + " \"CancelAfter\": 533257958,\n" + + " \"FinishAfter\": 533171558,\n" + + " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + + " \"DestinationTag\": 23480,\n" + + " \"SourceTag\": 11747,\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Fee\": \"12\"\n" + + "}"; + + assertCanSerializeAndDeserialize(escrowCreate, json); + } +} diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/EscrowFinishJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/EscrowFinishJsonTests.java new file mode 100644 index 000000000..ec49c001c --- /dev/null +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/EscrowFinishJsonTests.java @@ -0,0 +1,289 @@ +package org.xrpl.xrpl4j.model.transactions.json; + +/*- + * ========================LICENSE_START================================= + * xrpl4j :: model + * %% + * Copyright (C) 2020 - 2022 XRPL Foundation and its contributors + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.io.BaseEncoding; +import com.google.common.primitives.UnsignedInteger; +import com.ripple.cryptoconditions.CryptoConditionReader; +import com.ripple.cryptoconditions.der.DerEncodingException; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.xrpl.xrpl4j.crypto.keys.PublicKey; +import org.xrpl.xrpl4j.model.flags.TransactionFlags; +import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.EscrowFinish; +import org.xrpl.xrpl4j.model.transactions.ImmutableEscrowFinish; +import org.xrpl.xrpl4j.model.transactions.NetworkId; +import org.xrpl.xrpl4j.model.transactions.TransactionType; +import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; + +public class EscrowFinishJsonTests + extends AbstractTransactionJsonTest { + + /** + * No-args Constructor. + */ + protected EscrowFinishJsonTests() { + super(EscrowFinish.class, ImmutableEscrowFinish.class, TransactionType.ESCROW_FINISH); + } + + @Override + protected ImmutableEscrowFinish.Builder builder() { + return ImmutableEscrowFinish.builder(); + } + + @Override + protected EscrowFinish fullyPopulatedTransaction() { + try { + return EscrowFinish.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(330)) + .sequence(UnsignedInteger.ONE) + .owner(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .offerSequence(UnsignedInteger.valueOf(7)) + .condition(CryptoConditionReader.readCondition(BaseEncoding.base16().decode( + "A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) + ) + .fulfillment(CryptoConditionReader.readFulfillment(BaseEncoding.base16().decode("A0028000"))) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .build(); + } catch (DerEncodingException e) { + throw new RuntimeException(e); + } + } + + @Override + protected EscrowFinish fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); + } + + @Override + protected EscrowFinish minimallyPopulatedTransaction() { + return EscrowFinish.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(330)) + .sequence(UnsignedInteger.ONE) + .owner(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .offerSequence(UnsignedInteger.valueOf(7)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .build(); + } + + @Test + public void testEscrowFinishJson() throws JsonProcessingException, JSONException, DerEncodingException { + EscrowFinish escrowFinish = EscrowFinish.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(330)) + .sequence(UnsignedInteger.ONE) + .owner(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .offerSequence(UnsignedInteger.valueOf(7)) + .condition(CryptoConditionReader.readCondition(BaseEncoding.base16().decode( + "A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) + ) + .fulfillment(CryptoConditionReader.readFulfillment(BaseEncoding.base16().decode("A0028000"))) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .build(); + + String json = + "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"TransactionType\": \"EscrowFinish\",\n" + + " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"OfferSequence\": 7,\n" + + " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + + " \"Fulfillment\": \"A0028000\",\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Fee\": \"330\"\n" + + "}"; + + assertCanSerializeAndDeserialize(escrowFinish, json); + } + + @Test + public void testEscrowFinishJsonWithUnsetFlags() throws JsonProcessingException, JSONException, DerEncodingException { + EscrowFinish escrowFinish = EscrowFinish.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(330)) + .sequence(UnsignedInteger.ONE) + .owner(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .offerSequence(UnsignedInteger.valueOf(7)) + .condition(CryptoConditionReader.readCondition(BaseEncoding.base16().decode( + "A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) + ) + .fulfillment(CryptoConditionReader.readFulfillment(BaseEncoding.base16().decode("A0028000"))) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .flags(TransactionFlags.UNSET) + .build(); + + String json = + "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"TransactionType\": \"EscrowFinish\",\n" + + " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"OfferSequence\": 7,\n" + + " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + + " \"Fulfillment\": \"A0028000\",\n" + + " \"Sequence\": 1,\n" + + " \"Flags\": 0,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Fee\": \"330\"\n" + + "}"; + + assertCanSerializeAndDeserialize(escrowFinish, json); + } + + @Test + public void testEscrowFinishJsonWithNonZeroFlags() + throws JsonProcessingException, JSONException, DerEncodingException { + EscrowFinish escrowFinish = EscrowFinish.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(330)) + .sequence(UnsignedInteger.ONE) + .owner(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .offerSequence(UnsignedInteger.valueOf(7)) + .condition(CryptoConditionReader.readCondition(BaseEncoding.base16().decode( + "A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) + ) + .fulfillment(CryptoConditionReader.readFulfillment(BaseEncoding.base16().decode("A0028000"))) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .flags(TransactionFlags.FULLY_CANONICAL_SIG) + .build(); + + String json = + "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + + " \"Fee\": \"330\",\n" + + " \"Flags\": " + TransactionFlags.FULLY_CANONICAL_SIG.getValue() + ",\n" + + " \"Fulfillment\": \"A0028000\",\n" + + " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"OfferSequence\": 7,\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"TransactionType\": \"EscrowFinish\"\n" + + "}"; + + assertCanSerializeAndDeserialize(escrowFinish, json); + } + + @Test + void testEscrowFinishJsonWithMalformedCondition() throws JsonProcessingException { + String json = + "{\n" + + " \"Account\": \"rKWZ2fDqE5B9XorAcEQZD46H6HEdJQVNdb\",\n" + + " \"Condition\": \"A02580209423ED2EF4CACA8CA4AFC08D3F5EC60A545FD7A97E66E16EA0E2E2\",\n" + + " \"Fee\": \"563\",\n" + + " \"Fulfillment\": \"A02280203377850F1B3A4322F1562DF6F75D584596ABE5B9C76EEA8301F56CB942ACC69B\",\n" + + " \"LastLedgerSequence\": 40562057,\n" + + " \"OfferSequence\": 40403748,\n" + + " \"Owner\": \"r3iocgQwoGNCYyvvt8xuWv2XYXx7Z2gQqd\",\n" + + " \"Sequence\": 39899485,\n" + + " \"SigningPubKey\": \"ED09285829A011D520A1873A0E2F1014F5D6B66A6DDE6953FC02C8185EAFA6A1B0\",\n" + + " \"TransactionType\": \"EscrowFinish\",\n" + + " \"TxnSignature\": \"A3E64F6B8D1D7C4FBC9663FCD217F86C3529EC2E2F16442DD48D1B66EEE30EAC2CE960A76080F74BC749" + + "8CA7BBFB822BEE9E8F767114D7B54F7403A7CB672501\"\n" + + "}"; + + EscrowFinish escrowFinish = objectMapper.readValue(json, EscrowFinish.class); + assertThat(escrowFinish.condition()).isEmpty(); + assertThat(escrowFinish.conditionRawValue()).isNotEmpty().get() + .isEqualTo("A02580209423ED2EF4CACA8CA4AFC08D3F5EC60A545FD7A97E66E16EA0E2E2"); + } + + @Test + void testEscrowFinishJsonWithMalformedFulfillment() throws JsonProcessingException { + String json = + "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"TransactionType\": \"EscrowFinish\",\n" + + " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"OfferSequence\": 7,\n" + + " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + + " \"Fulfillment\": \"123\",\n" + + " \"Sequence\": 1,\n" + + " \"Flags\": " + TransactionFlags.FULLY_CANONICAL_SIG.getValue() + ",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Fee\": \"330\"\n" + + "}"; + + EscrowFinish escrowFinish = objectMapper.readValue(json, EscrowFinish.class); + assertThat(escrowFinish.fulfillment()).isEmpty(); + assertThat(escrowFinish.fulfillmentRawValue()).isNotEmpty().get() + .isEqualTo("123"); + } + + @Test + public void testEscrowFinishJsonWithUnknownFields() + throws JsonProcessingException, JSONException, DerEncodingException { + EscrowFinish escrowFinish = EscrowFinish.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(330)) + .sequence(UnsignedInteger.ONE) + .owner(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .offerSequence(UnsignedInteger.valueOf(7)) + .condition(CryptoConditionReader.readCondition(BaseEncoding.base16().decode( + "A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) + ) + .fulfillment(CryptoConditionReader.readFulfillment(BaseEncoding.base16().decode("A0028000"))) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .putUnknownFields("Foo", "Bar") + .build(); + + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"TransactionType\": \"EscrowFinish\",\n" + + " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"OfferSequence\": 7,\n" + + " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + + " \"Fulfillment\": \"A0028000\",\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Fee\": \"330\"\n" + + "}"; + + assertCanSerializeAndDeserialize(escrowFinish, json); + } +} diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/EscrowJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/EscrowJsonTests.java deleted file mode 100644 index c9b1b7aaa..000000000 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/EscrowJsonTests.java +++ /dev/null @@ -1,506 +0,0 @@ -package org.xrpl.xrpl4j.model.transactions.json; - -/*- - * ========================LICENSE_START================================= - * xrpl4j :: model - * %% - * Copyright (C) 2020 - 2022 XRPL Foundation and its contributors - * %% - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * =========================LICENSE_END================================== - */ - -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.google.common.io.BaseEncoding; -import com.google.common.primitives.UnsignedInteger; -import com.google.common.primitives.UnsignedLong; -import com.ripple.cryptoconditions.CryptoConditionReader; -import com.ripple.cryptoconditions.der.DerEncodingException; -import org.json.JSONException; -import org.junit.jupiter.api.Test; -import org.xrpl.xrpl4j.crypto.keys.PublicKey; -import org.xrpl.xrpl4j.model.AbstractJsonTest; -import org.xrpl.xrpl4j.model.flags.TransactionFlags; -import org.xrpl.xrpl4j.model.transactions.Address; -import org.xrpl.xrpl4j.model.transactions.EscrowCancel; -import org.xrpl.xrpl4j.model.transactions.EscrowCreate; -import org.xrpl.xrpl4j.model.transactions.EscrowFinish; -import org.xrpl.xrpl4j.model.transactions.NetworkId; -import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; - -public class EscrowJsonTests extends AbstractJsonTest { - - @Test - public void testEscrowCreateJson() throws JsonProcessingException, JSONException, DerEncodingException { - EscrowCreate escrowCreate = EscrowCreate.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.ONE) - .amount(XrpCurrencyAmount.ofDrops(10000)) - .destination(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) - .destinationTag(UnsignedInteger.valueOf(23480)) - .cancelAfter(UnsignedLong.valueOf(533257958)) - .finishAfter(UnsignedLong.valueOf(533171558)) - .condition(CryptoConditionReader.readCondition( - BaseEncoding.base16() - .decode("A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) - ) - .sourceTag(UnsignedInteger.valueOf(11747)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .build(); - - String json = "{\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"TransactionType\": \"EscrowCreate\",\n" + - " \"Amount\": \"10000\",\n" + - " \"Destination\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + - " \"CancelAfter\": 533257958,\n" + - " \"FinishAfter\": 533171558,\n" + - " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + - " \"DestinationTag\": 23480,\n" + - " \"SourceTag\": 11747,\n" + - " \"Sequence\": 1,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Fee\": \"12\"\n" + - "}"; - - assertCanSerializeAndDeserialize(escrowCreate, json); - } - - @Test - public void testEscrowCreateJsonWithUnsetFlags() throws JsonProcessingException, JSONException, DerEncodingException { - EscrowCreate escrowCreate = EscrowCreate.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.ONE) - .amount(XrpCurrencyAmount.ofDrops(10000)) - .destination(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) - .destinationTag(UnsignedInteger.valueOf(23480)) - .cancelAfter(UnsignedLong.valueOf(533257958)) - .finishAfter(UnsignedLong.valueOf(533171558)) - .condition(CryptoConditionReader.readCondition( - BaseEncoding.base16() - .decode("A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) - ) - .sourceTag(UnsignedInteger.valueOf(11747)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.UNSET) - .build(); - - String json = "{\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"TransactionType\": \"EscrowCreate\",\n" + - " \"Amount\": \"10000\",\n" + - " \"Destination\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + - " \"CancelAfter\": 533257958,\n" + - " \"FinishAfter\": 533171558,\n" + - " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + - " \"DestinationTag\": 23480,\n" + - " \"SourceTag\": 11747,\n" + - " \"Sequence\": 1,\n" + - " \"Flags\": 0,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"12\"\n" + - "}"; - - assertCanSerializeAndDeserialize(escrowCreate, json); - } - - @Test - public void testEscrowCreateJsonWithNonZeroFlags() - throws JsonProcessingException, JSONException, DerEncodingException { - EscrowCreate escrowCreate = EscrowCreate.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.ONE) - .amount(XrpCurrencyAmount.ofDrops(10000)) - .destination(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) - .destinationTag(UnsignedInteger.valueOf(23480)) - .cancelAfter(UnsignedLong.valueOf(533257958)) - .finishAfter(UnsignedLong.valueOf(533171558)) - .condition(CryptoConditionReader.readCondition( - BaseEncoding.base16() - .decode("A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) - ) - .sourceTag(UnsignedInteger.valueOf(11747)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.FULLY_CANONICAL_SIG) - .build(); - - String json = String.format("{\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"TransactionType\": \"EscrowCreate\",\n" + - " \"Amount\": \"10000\",\n" + - " \"Destination\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + - " \"CancelAfter\": 533257958,\n" + - " \"FinishAfter\": 533171558,\n" + - " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + - " \"DestinationTag\": 23480,\n" + - " \"SourceTag\": 11747,\n" + - " \"Sequence\": 1,\n" + - " \"Flags\": %s,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"12\"\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); - - assertCanSerializeAndDeserialize(escrowCreate, json); - } - - @Test - public void testEscrowCreateJsonWithUnknownFields() - throws JsonProcessingException, JSONException, DerEncodingException { - EscrowCreate escrowCreate = EscrowCreate.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.ONE) - .amount(XrpCurrencyAmount.ofDrops(10000)) - .destination(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) - .destinationTag(UnsignedInteger.valueOf(23480)) - .cancelAfter(UnsignedLong.valueOf(533257958)) - .finishAfter(UnsignedLong.valueOf(533171558)) - .condition(CryptoConditionReader.readCondition( - BaseEncoding.base16() - .decode("A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) - ) - .sourceTag(UnsignedInteger.valueOf(11747)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"TransactionType\": \"EscrowCreate\",\n" + - " \"Amount\": \"10000\",\n" + - " \"Destination\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + - " \"CancelAfter\": 533257958,\n" + - " \"FinishAfter\": 533171558,\n" + - " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + - " \"DestinationTag\": 23480,\n" + - " \"SourceTag\": 11747,\n" + - " \"Sequence\": 1,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Fee\": \"12\"\n" + - "}"; - - assertCanSerializeAndDeserialize(escrowCreate, json); - } - - @Test - public void testEscrowCancelJson() throws JsonProcessingException, JSONException { - EscrowCancel escrowCancel = EscrowCancel.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.ONE) - .owner(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .offerSequence(UnsignedInteger.valueOf(7)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .build(); - - String json = "{\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"TransactionType\": \"EscrowCancel\",\n" + - " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"OfferSequence\": 7,\n" + - " \"Sequence\": 1,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Fee\": \"12\"\n" + - "}"; - assertCanSerializeAndDeserialize(escrowCancel, json); - } - - @Test - public void testEscrowCancelJsonWithUnsetFlags() throws JsonProcessingException, JSONException { - EscrowCancel escrowCancel = EscrowCancel.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.ONE) - .owner(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .offerSequence(UnsignedInteger.valueOf(7)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.UNSET) - .build(); - - String json = "{\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"TransactionType\": \"EscrowCancel\",\n" + - " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"OfferSequence\": 7,\n" + - " \"Sequence\": 1,\n" + - " \"Flags\": 0,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"12\"\n" + - "}"; - assertCanSerializeAndDeserialize(escrowCancel, json); - } - - @Test - public void testEscrowCancelJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { - EscrowCancel escrowCancel = EscrowCancel.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.ONE) - .owner(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .offerSequence(UnsignedInteger.valueOf(7)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.FULLY_CANONICAL_SIG) - .build(); - - String json = String.format("{\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"TransactionType\": \"EscrowCancel\",\n" + - " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"OfferSequence\": 7,\n" + - " \"Sequence\": 1,\n" + - " \"Flags\": %s,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"12\"\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); - assertCanSerializeAndDeserialize(escrowCancel, json); - } - - @Test - public void testEscrowCancelJsonWithUnknownFields() throws JsonProcessingException, JSONException { - EscrowCancel escrowCancel = EscrowCancel.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.ONE) - .owner(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .offerSequence(UnsignedInteger.valueOf(7)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"TransactionType\": \"EscrowCancel\",\n" + - " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"OfferSequence\": 7,\n" + - " \"Sequence\": 1,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Fee\": \"12\"\n" + - "}"; - assertCanSerializeAndDeserialize(escrowCancel, json); - } - - @Test - public void testEscrowFinishJson() throws JsonProcessingException, JSONException, DerEncodingException { - EscrowFinish escrowFinish = EscrowFinish.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(330)) - .sequence(UnsignedInteger.ONE) - .owner(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .offerSequence(UnsignedInteger.valueOf(7)) - .condition(CryptoConditionReader.readCondition(BaseEncoding.base16().decode( - "A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) - ) - .fulfillment(CryptoConditionReader.readFulfillment(BaseEncoding.base16().decode("A0028000"))) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .build(); - - String json = "{\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"TransactionType\": \"EscrowFinish\",\n" + - " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"OfferSequence\": 7,\n" + - " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + - " \"Fulfillment\": \"A0028000\",\n" + - " \"Sequence\": 1,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Fee\": \"330\"\n" + - "}"; - - assertCanSerializeAndDeserialize(escrowFinish, json); - } - - @Test - public void testEscrowFinishJsonWithUnsetFlags() throws JsonProcessingException, JSONException, DerEncodingException { - EscrowFinish escrowFinish = EscrowFinish.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(330)) - .sequence(UnsignedInteger.ONE) - .owner(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .offerSequence(UnsignedInteger.valueOf(7)) - .condition(CryptoConditionReader.readCondition(BaseEncoding.base16().decode( - "A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) - ) - .fulfillment(CryptoConditionReader.readFulfillment(BaseEncoding.base16().decode("A0028000"))) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.UNSET) - .build(); - - String json = "{\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"TransactionType\": \"EscrowFinish\",\n" + - " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"OfferSequence\": 7,\n" + - " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + - " \"Fulfillment\": \"A0028000\",\n" + - " \"Sequence\": 1,\n" + - " \"Flags\": 0,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"330\"\n" + - "}"; - - assertCanSerializeAndDeserialize(escrowFinish, json); - } - - @Test - public void testEscrowFinishJsonWithNonZeroFlags() - throws JsonProcessingException, JSONException, DerEncodingException { - EscrowFinish escrowFinish = EscrowFinish.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(330)) - .sequence(UnsignedInteger.ONE) - .owner(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .offerSequence(UnsignedInteger.valueOf(7)) - .condition(CryptoConditionReader.readCondition(BaseEncoding.base16().decode( - "A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) - ) - .fulfillment(CryptoConditionReader.readFulfillment(BaseEncoding.base16().decode("A0028000"))) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.FULLY_CANONICAL_SIG) - .build(); - - String json = String.format("{\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"TransactionType\": \"EscrowFinish\",\n" + - " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"OfferSequence\": 7,\n" + - " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + - " \"Fulfillment\": \"A0028000\",\n" + - " \"Sequence\": 1,\n" + - " \"Flags\": %s,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"330\"\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); - - assertCanSerializeAndDeserialize(escrowFinish, json); - } - - @Test - void testEscrowFinishJsonWithMalformedCondition() throws JsonProcessingException { - String json = "{\n" + - " \"Account\": \"rKWZ2fDqE5B9XorAcEQZD46H6HEdJQVNdb\",\n" + - " \"Condition\": \"A02580209423ED2EF4CACA8CA4AFC08D3F5EC60A545FD7A97E66E16EA0E2E2\",\n" + - " \"Fee\": \"563\",\n" + - " \"Fulfillment\": \"A02280203377850F1B3A4322F1562DF6F75D584596ABE5B9C76EEA8301F56CB942ACC69B\",\n" + - " \"LastLedgerSequence\": 40562057,\n" + - " \"OfferSequence\": 40403748,\n" + - " \"Owner\": \"r3iocgQwoGNCYyvvt8xuWv2XYXx7Z2gQqd\",\n" + - " \"Sequence\": 39899485,\n" + - " \"SigningPubKey\": \"ED09285829A011D520A1873A0E2F1014F5D6B66A6DDE6953FC02C8185EAFA6A1B0\",\n" + - " \"TransactionType\": \"EscrowFinish\",\n" + - " \"TxnSignature\": \"A3E64F6B8D1D7C4FBC9663FCD217F86C3529EC2E2F16442DD48D1B66EEE30EAC2CE960A76080F74BC749" + - "8CA7BBFB822BEE9E8F767114D7B54F7403A7CB672501\"\n" + - "}"; - - EscrowFinish escrowFinish = objectMapper.readValue(json, EscrowFinish.class); - assertThat(escrowFinish.condition()).isEmpty(); - assertThat(escrowFinish.conditionRawValue()).isNotEmpty().get() - .isEqualTo("A02580209423ED2EF4CACA8CA4AFC08D3F5EC60A545FD7A97E66E16EA0E2E2"); - } - - @Test - void testEscrowFinishJsonWithMalformedFulfillment() throws JsonProcessingException { - String json = String.format("{\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"TransactionType\": \"EscrowFinish\",\n" + - " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"OfferSequence\": 7,\n" + - " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + - " \"Fulfillment\": \"123\",\n" + - " \"Sequence\": 1,\n" + - " \"Flags\": %s,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"330\"\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); - - EscrowFinish escrowFinish = objectMapper.readValue(json, EscrowFinish.class); - assertThat(escrowFinish.fulfillment()).isEmpty(); - assertThat(escrowFinish.fulfillmentRawValue()).isNotEmpty().get() - .isEqualTo("123"); - } - - @Test - public void testEscrowFinishJsonWithUnknownFields() - throws JsonProcessingException, JSONException, DerEncodingException { - EscrowFinish escrowFinish = EscrowFinish.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(330)) - .sequence(UnsignedInteger.ONE) - .owner(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .offerSequence(UnsignedInteger.valueOf(7)) - .condition(CryptoConditionReader.readCondition(BaseEncoding.base16().decode( - "A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100")) - ) - .fulfillment(CryptoConditionReader.readFulfillment(BaseEncoding.base16().decode("A0028000"))) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"TransactionType\": \"EscrowFinish\",\n" + - " \"Owner\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"OfferSequence\": 7,\n" + - " \"Condition\": \"A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100\",\n" + - " \"Fulfillment\": \"A0028000\",\n" + - " \"Sequence\": 1,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Fee\": \"330\"\n" + - "}"; - - assertCanSerializeAndDeserialize(escrowFinish, json); - } -} diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenAcceptOfferJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenAcceptOfferJsonTests.java index d9216d18f..80b9e2c0e 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenAcceptOfferJsonTests.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenAcceptOfferJsonTests.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -25,21 +25,35 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.xrpl.xrpl4j.crypto.keys.PublicKey; -import org.xrpl.xrpl4j.model.AbstractJsonTest; import org.xrpl.xrpl4j.model.flags.TransactionFlags; import org.xrpl.xrpl4j.model.transactions.Address; import org.xrpl.xrpl4j.model.transactions.Hash256; +import org.xrpl.xrpl4j.model.transactions.ImmutableNfTokenAcceptOffer; import org.xrpl.xrpl4j.model.transactions.NetworkId; import org.xrpl.xrpl4j.model.transactions.NfTokenAcceptOffer; +import org.xrpl.xrpl4j.model.transactions.TransactionType; import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; -public class NfTokenAcceptOfferJsonTests extends AbstractJsonTest { +public class NfTokenAcceptOfferJsonTests extends AbstractTransactionJsonTest< + ImmutableNfTokenAcceptOffer, ImmutableNfTokenAcceptOffer.Builder, NfTokenAcceptOffer + > { - @Test - public void testMinimalNfTokenAcceptOfferJson() throws JsonProcessingException, JSONException { + /** + * No-args Constructor. + */ + protected NfTokenAcceptOfferJsonTests() { + super(NfTokenAcceptOffer.class, ImmutableNfTokenAcceptOffer.class, TransactionType.NFTOKEN_ACCEPT_OFFER); + } + + @Override + protected ImmutableNfTokenAcceptOffer.Builder builder() { + return ImmutableNfTokenAcceptOffer.builder(); + } + @Override + protected NfTokenAcceptOffer fullyPopulatedTransaction() { Hash256 offer = Hash256.of("000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"); - NfTokenAcceptOffer nfTokenAcceptOffer = NfTokenAcceptOffer.builder() + return NfTokenAcceptOffer.builder() .fee(XrpCurrencyAmount.ofDrops(12)) .account(Address.of("rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba")) .sequence(UnsignedInteger.valueOf(12)) @@ -51,89 +65,94 @@ public void testMinimalNfTokenAcceptOfferJson() throws JsonProcessingException, ) .networkId(NetworkId.of(1024)) .build(); - - String json = "{\n" + - " \"TransactionType\": \"NFTokenAcceptOffer\",\n" + - " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"NFTokenBuyOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + - " \"NFTokenSellOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"NFTokenBrokerFee\": \"10\"\n" + - "}"; - - assertCanSerializeAndDeserialize(nfTokenAcceptOffer, json); } - @Test - public void testNfTokenAcceptOfferJsonWithUnsetFlags() throws JsonProcessingException, JSONException { + @Override + protected NfTokenAcceptOffer fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); + } + @Override + protected NfTokenAcceptOffer minimallyPopulatedTransaction() { Hash256 offer = Hash256.of("000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"); - NfTokenAcceptOffer nfTokenAcceptOffer = NfTokenAcceptOffer.builder() + return NfTokenAcceptOffer.builder() .fee(XrpCurrencyAmount.ofDrops(12)) .account(Address.of("rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba")) - .sequence(UnsignedInteger.valueOf(12)) - .brokerFee(XrpCurrencyAmount.ofDrops(10)) .buyOffer(offer) - .sellOffer(offer) .signingPublicKey( PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") ) - .flags(TransactionFlags.UNSET) .build(); + } - String json = "{\n" + - " \"TransactionType\": \"NFTokenAcceptOffer\",\n" + - " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"Flags\": 0,\n" + - " \"NFTokenBuyOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + - " \"NFTokenSellOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NFTokenBrokerFee\": \"10\"\n" + - "}"; + @Test + public void testMinimalNfTokenAcceptOfferJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"TransactionType\": \"NFTokenAcceptOffer\",\n" + + " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 12,\n" + + " \"NFTokenBuyOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + + " \"NFTokenSellOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"NFTokenBrokerFee\": \"10\"\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransaction(), json); + } - assertCanSerializeAndDeserialize(nfTokenAcceptOffer, json); + @Test + public void testNfTokenAcceptOfferJsonWithUnsetFlags() throws JsonProcessingException, JSONException { + NfTokenAcceptOffer transactionWithUnsetFlags = builder().from(fullyPopulatedTransaction()) + .flags(TransactionFlags.UNSET) + .build(); + + String json = + "{\n" + + " \"TransactionType\": \"NFTokenAcceptOffer\",\n" + + " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + + " \"Fee\": \"12\",\n" + + " \"Flags\": 0,\n" + + " \"NetworkID\": 1024,\n" + + " \"NFTokenBrokerFee\": \"10\",\n" + + " \"NFTokenBuyOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + + " \"NFTokenSellOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + + " \"Sequence\": 12,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; + + assertCanSerializeAndDeserialize(transactionWithUnsetFlags, json); } @Test public void testNfTokenAcceptOfferJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { - - Hash256 offer = Hash256.of("000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"); - NfTokenAcceptOffer nfTokenAcceptOffer = NfTokenAcceptOffer.builder() - .fee(XrpCurrencyAmount.ofDrops(12)) - .account(Address.of("rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba")) - .sequence(UnsignedInteger.valueOf(12)) - .brokerFee(XrpCurrencyAmount.ofDrops(10)) - .buyOffer(offer) - .sellOffer(offer) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) + NfTokenAcceptOffer transactionWithNonZeroFlags = builder().from(fullyPopulatedTransaction()) .flags(TransactionFlags.FULLY_CANONICAL_SIG) .build(); - String json = String.format("{\n" + - " \"TransactionType\": \"NFTokenAcceptOffer\",\n" + - " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"Flags\": %s,\n" + - " \"NFTokenBuyOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + - " \"NFTokenSellOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NFTokenBrokerFee\": \"10\"\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); - - assertCanSerializeAndDeserialize(nfTokenAcceptOffer, json); + String json = + "{\n" + + " \"TransactionType\": \"NFTokenAcceptOffer\",\n" + + " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 12,\n" + + " \"Flags\": " + TransactionFlags.FULLY_CANONICAL_SIG.getValue() + ",\n" + + " \"NFTokenBuyOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + + " \"NFTokenSellOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"NFTokenBrokerFee\": \"10\"\n" + + "}"; + + assertCanSerializeAndDeserialize(transactionWithNonZeroFlags, json); } @Test public void testNfTokenAcceptOfferWithOnlyBuyOffer() throws JsonProcessingException, JSONException { - Hash256 offer = Hash256.of("000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"); NfTokenAcceptOffer nfTokenAcceptOffer = NfTokenAcceptOffer.builder() .fee(XrpCurrencyAmount.ofDrops(12)) @@ -145,50 +164,35 @@ public void testNfTokenAcceptOfferWithOnlyBuyOffer() throws JsonProcessingExcept ) .build(); - String json = "{\n" + - " \"TransactionType\": \"NFTokenAcceptOffer\",\n" + - " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"NFTokenBuyOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + - "}"; + String json = + "{\n" + + " \"TransactionType\": \"NFTokenAcceptOffer\",\n" + + " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 12,\n" + + " \"NFTokenBuyOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; assertCanSerializeAndDeserialize(nfTokenAcceptOffer, json); } @Test public void testJsonWithUnknownFields() throws JsonProcessingException, JSONException { - - Hash256 offer = Hash256.of("000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"); - NfTokenAcceptOffer nfTokenAcceptOffer = NfTokenAcceptOffer.builder() - .fee(XrpCurrencyAmount.ofDrops(12)) - .account(Address.of("rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba")) - .sequence(UnsignedInteger.valueOf(12)) - .brokerFee(XrpCurrencyAmount.ofDrops(10)) - .buyOffer(offer) - .sellOffer(offer) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"TransactionType\": \"NFTokenAcceptOffer\",\n" + - " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"NFTokenBuyOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + - " \"NFTokenSellOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"NFTokenBrokerFee\": \"10\"\n" + - "}"; - - assertCanSerializeAndDeserialize(nfTokenAcceptOffer, json); + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"TransactionType\": \"NFTokenAcceptOffer\",\n" + + " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 12,\n" + + " \"NFTokenBuyOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + + " \"NFTokenSellOffer\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"NFTokenBrokerFee\": \"10\"\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); } - } diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenBurnJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenBurnJsonTests.java index 27bacd498..64dba9d77 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenBurnJsonTests.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenBurnJsonTests.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -25,22 +25,37 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.xrpl.xrpl4j.crypto.keys.PublicKey; -import org.xrpl.xrpl4j.model.AbstractJsonTest; import org.xrpl.xrpl4j.model.flags.TransactionFlags; import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.ImmutableNfTokenBurn; import org.xrpl.xrpl4j.model.transactions.NetworkId; import org.xrpl.xrpl4j.model.transactions.NfTokenBurn; import org.xrpl.xrpl4j.model.transactions.NfTokenId; +import org.xrpl.xrpl4j.model.transactions.TransactionType; import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; -public class NfTokenBurnJsonTests extends AbstractJsonTest { +public class NfTokenBurnJsonTests + extends AbstractTransactionJsonTest { + + /** + * No-args Constructor. + */ + protected NfTokenBurnJsonTests() { + super(NfTokenBurn.class, ImmutableNfTokenBurn.class, TransactionType.NFTOKEN_BURN); + } - @Test - public void testMinimalNfTokenBurnJson() throws JsonProcessingException, JSONException { + @Override + protected ImmutableNfTokenBurn.Builder builder() { + return ImmutableNfTokenBurn.builder(); + } + + @Override + protected NfTokenBurn fullyPopulatedTransaction() { NfTokenId id = NfTokenId.of("000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"); - NfTokenBurn nfTokenBurn = NfTokenBurn.builder() + return NfTokenBurn.builder() .fee(XrpCurrencyAmount.ofDrops(12)) + .owner(Address.of("rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba")) .account(Address.of("rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba")) .sequence(UnsignedInteger.valueOf(12)) .nfTokenId(id) @@ -49,101 +64,102 @@ public void testMinimalNfTokenBurnJson() throws JsonProcessingException, JSONExc ) .networkId(NetworkId.of(1024)) .build(); + } - String json = "{\n" + - " \"TransactionType\": \"NFTokenBurn\",\n" + - " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"NFTokenID\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + - " \"NetworkID\": 1024,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + - "}"; - - assertCanSerializeAndDeserialize(nfTokenBurn, json); + @Override + protected NfTokenBurn fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); } - @Test - public void testNfTokenBurnJsonWithUnsetFlags() throws JsonProcessingException, JSONException { + @Override + protected NfTokenBurn minimallyPopulatedTransaction() { NfTokenId id = NfTokenId.of("000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"); - NfTokenBurn nfTokenBurn = NfTokenBurn.builder() - .fee(XrpCurrencyAmount.ofDrops(12)) + return NfTokenBurn.builder() .account(Address.of("rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba")) - .sequence(UnsignedInteger.valueOf(12)) + .fee(XrpCurrencyAmount.ofDrops(12)) .nfTokenId(id) .signingPublicKey( PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") ) + .build(); + } + + @Test + public void testMinimalNfTokenBurnJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"TransactionType\": \"NFTokenBurn\",\n" + + " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 0,\n" + + " \"NFTokenID\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; + + assertCanSerializeAndDeserialize(minimallyPopulatedTransaction(), json); + } + + @Test + public void testNfTokenBurnJsonWithUnsetFlags() throws JsonProcessingException, JSONException { + NfTokenBurn transactionWithUnsetFlags = builder().from(fullyPopulatedTransaction()) .flags(TransactionFlags.UNSET) .build(); - String json = "{\n" + - " \"TransactionType\": \"NFTokenBurn\",\n" + - " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"Flags\": 0,\n" + - " \"NFTokenID\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + String json = + "{\n" + + " \"TransactionType\": \"NFTokenBurn\",\n" + + " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + + " \"Fee\": \"12\",\n" + + " \"Flags\": 0,\n" + + " \"NFTokenID\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Owner\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + + " \"Sequence\": 12,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + "}"; - assertCanSerializeAndDeserialize(nfTokenBurn, json); + assertCanSerializeAndDeserialize(transactionWithUnsetFlags, json); } @Test public void testNfTokenBurnJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { - NfTokenId id = NfTokenId.of("000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"); - NfTokenBurn nfTokenBurn = NfTokenBurn.builder() - .fee(XrpCurrencyAmount.ofDrops(12)) - .account(Address.of("rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba")) - .sequence(UnsignedInteger.valueOf(12)) - .nfTokenId(id) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) + NfTokenBurn transactionWithNonZeroFlags = builder().from(fullyPopulatedTransaction()) .flags(TransactionFlags.FULLY_CANONICAL_SIG) .build(); - String json = String.format("{\n" + - " \"TransactionType\": \"NFTokenBurn\",\n" + - " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"Flags\": %s,\n" + - " \"NFTokenID\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); - - assertCanSerializeAndDeserialize(nfTokenBurn, json); + String json = + "{\n" + + " \"TransactionType\": \"NFTokenBurn\",\n" + + " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + + " \"Fee\": \"12\",\n" + + " \"Flags\": " + TransactionFlags.FULLY_CANONICAL_SIG.getValue() + ",\n" + + " \"NetworkID\": 1024,\n" + + " \"NFTokenID\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + + " \"Owner\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + + " \"Sequence\": 12,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; + + assertCanSerializeAndDeserialize(transactionWithNonZeroFlags, json); } @Test public void testJsonWithUnknownFields() throws JsonProcessingException, JSONException { - - NfTokenId id = NfTokenId.of("000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"); - NfTokenBurn nfTokenBurn = NfTokenBurn.builder() - .fee(XrpCurrencyAmount.ofDrops(12)) - .account(Address.of("rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba")) - .sequence(UnsignedInteger.valueOf(12)) - .nfTokenId(id) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"TransactionType\": \"NFTokenBurn\",\n" + - " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"NFTokenID\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + - " \"NetworkID\": 1024,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"TransactionType\": \"NFTokenBurn\",\n" + + " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 12,\n" + + " \"NFTokenID\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Owner\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + "}"; - assertCanSerializeAndDeserialize(nfTokenBurn, json); + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); } } diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenCancelOfferJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenCancelOfferJsonTests.java index d4f1a02d4..de3c445a5 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenCancelOfferJsonTests.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenCancelOfferJsonTests.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -25,25 +25,40 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.xrpl.xrpl4j.crypto.keys.PublicKey; -import org.xrpl.xrpl4j.model.AbstractJsonTest; import org.xrpl.xrpl4j.model.flags.TransactionFlags; import org.xrpl.xrpl4j.model.transactions.Address; import org.xrpl.xrpl4j.model.transactions.Hash256; +import org.xrpl.xrpl4j.model.transactions.ImmutableNfTokenCancelOffer; import org.xrpl.xrpl4j.model.transactions.NetworkId; import org.xrpl.xrpl4j.model.transactions.NfTokenCancelOffer; +import org.xrpl.xrpl4j.model.transactions.TransactionType; import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; import java.util.ArrayList; import java.util.List; -public class NfTokenCancelOfferJsonTests extends AbstractJsonTest { +public class NfTokenCancelOfferJsonTests extends AbstractTransactionJsonTest< + ImmutableNfTokenCancelOffer, ImmutableNfTokenCancelOffer.Builder, NfTokenCancelOffer + > { - @Test - public void testMinimalNfTokenCancelOfferJson() throws JsonProcessingException, JSONException { + /** + * No-args Constructor. + */ + protected NfTokenCancelOfferJsonTests() { + super(NfTokenCancelOffer.class, ImmutableNfTokenCancelOffer.class, TransactionType.NFTOKEN_CANCEL_OFFER); + } + + @Override + protected ImmutableNfTokenCancelOffer.Builder builder() { + return ImmutableNfTokenCancelOffer.builder(); + } + + @Override + protected NfTokenCancelOffer fullyPopulatedTransaction() { Hash256 offer = Hash256.of("000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"); List offers = new ArrayList<>(); offers.add(offer); - NfTokenCancelOffer nfTokenCancelOffer = NfTokenCancelOffer.builder() + return NfTokenCancelOffer.builder() .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) .fee(XrpCurrencyAmount.ofDrops(12)) .sequence(UnsignedInteger.valueOf(12)) @@ -53,114 +68,109 @@ public void testMinimalNfTokenCancelOfferJson() throws JsonProcessingException, ) .networkId(NetworkId.of(1024)) .build(); + } - String json = "{\n" + - " \"TransactionType\": \"NFTokenCancelOffer\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"NetworkID\": 1024,\n" + - " \"NFTokenOffers\": [" + - " \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\"" + - " ],\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + - "}"; - - assertCanSerializeAndDeserialize(nfTokenCancelOffer, json); + @Override + protected NfTokenCancelOffer fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); } - @Test - public void testNfTokenCancelOfferJsonWithUnsetFlags() throws JsonProcessingException, JSONException { + @Override + protected NfTokenCancelOffer minimallyPopulatedTransaction() { Hash256 offer = Hash256.of("000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"); List offers = new ArrayList<>(); offers.add(offer); - NfTokenCancelOffer nfTokenCancelOffer = NfTokenCancelOffer.builder() + return NfTokenCancelOffer.builder() .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.valueOf(12)) .tokenOffers(offers) .signingPublicKey( PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") ) + .build(); + } + + @Test + public void testMinimalNfTokenCancelOfferJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"TransactionType\": \"NFTokenCancelOffer\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 0,\n" + + " \"NFTokenOffers\": [" + + " \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\"" + + " ],\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; + + assertCanSerializeAndDeserialize(minimallyPopulatedTransaction(), json); + } + + @Test + public void testNfTokenCancelOfferJsonWithUnsetFlags() throws JsonProcessingException, JSONException { + NfTokenCancelOffer transaction = builder().from(fullyPopulatedTransaction()) .flags(TransactionFlags.UNSET) .build(); - String json = "{\n" + - " \"TransactionType\": \"NFTokenCancelOffer\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"Flags\": 0,\n" + - " \"NFTokenOffers\": [" + - " \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\"" + - " ],\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + - "}"; - - assertCanSerializeAndDeserialize(nfTokenCancelOffer, json); + String json = + "{\n" + + " \"TransactionType\": \"NFTokenCancelOffer\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 12,\n" + + " \"Flags\": 0,\n" + + " \"NetworkID\": 1024,\n" + + " \"NFTokenOffers\": [" + + " \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\"" + + " ],\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; + + assertCanSerializeAndDeserialize(transaction, json); } @Test public void testNfTokenCancelOfferJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { - Hash256 offer = Hash256.of("000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"); - List offers = new ArrayList<>(); - offers.add(offer); - NfTokenCancelOffer nfTokenCancelOffer = NfTokenCancelOffer.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.valueOf(12)) - .tokenOffers(offers) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) + NfTokenCancelOffer transaction = builder().from(fullyPopulatedTransaction()) .flags(TransactionFlags.FULLY_CANONICAL_SIG) .build(); - String json = String.format("{\n" + - " \"TransactionType\": \"NFTokenCancelOffer\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"Flags\": %s,\n" + - " \"NFTokenOffers\": [" + - " \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\"" + - " ],\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); - - assertCanSerializeAndDeserialize(nfTokenCancelOffer, json); + String json = + "{\n" + + " \"TransactionType\": \"NFTokenCancelOffer\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 12,\n" + + " \"Flags\": " + TransactionFlags.FULLY_CANONICAL_SIG.getValue() + ",\n" + + " \"NetworkID\": 1024,\n" + + " \"NFTokenOffers\": [" + + " \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\"" + + " ],\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; + + assertCanSerializeAndDeserialize(transaction, json); } @Test public void testJsonWithUnknownFields() throws JsonProcessingException, JSONException { - Hash256 offer = Hash256.of("000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"); - List offers = new ArrayList<>(); - offers.add(offer); - NfTokenCancelOffer nfTokenCancelOffer = NfTokenCancelOffer.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.valueOf(12)) - .tokenOffers(offers) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"TransactionType\": \"NFTokenCancelOffer\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"NetworkID\": 1024,\n" + - " \"NFTokenOffers\": [" + - " \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\"" + - " ],\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + - "}"; - - assertCanSerializeAndDeserialize(nfTokenCancelOffer, json); + String json = + "{\n" + + " \"Foo\": \"Bar\",\n" + + " \"TransactionType\": \"NFTokenCancelOffer\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 12,\n" + + " \"NetworkID\": 1024,\n" + + " \"NFTokenOffers\": [" + + " \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\"" + + " ],\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); } } diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenCreateOfferJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenCreateOfferJsonTests.java index 832a7ff3c..c7cf13c83 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenCreateOfferJsonTests.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenCreateOfferJsonTests.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -25,21 +25,36 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.xrpl.xrpl4j.crypto.keys.PublicKey; -import org.xrpl.xrpl4j.model.AbstractJsonTest; import org.xrpl.xrpl4j.model.flags.NfTokenCreateOfferFlags; import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.ImmutableNfTokenCreateOffer; import org.xrpl.xrpl4j.model.transactions.NetworkId; import org.xrpl.xrpl4j.model.transactions.NfTokenCreateOffer; import org.xrpl.xrpl4j.model.transactions.NfTokenId; +import org.xrpl.xrpl4j.model.transactions.TransactionType; import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; -public class NfTokenCreateOfferJsonTests extends AbstractJsonTest { +public class NfTokenCreateOfferJsonTests extends AbstractTransactionJsonTest< + ImmutableNfTokenCreateOffer, ImmutableNfTokenCreateOffer.Builder, NfTokenCreateOffer + > { + + /** + * No-args Constructor. + */ + protected NfTokenCreateOfferJsonTests() { + super(NfTokenCreateOffer.class, ImmutableNfTokenCreateOffer.class, TransactionType.NFTOKEN_CREATE_OFFER); + } - @Test - public void testMinimalNfTokenCreateOfferJson() throws JsonProcessingException, JSONException { + @Override + protected ImmutableNfTokenCreateOffer.Builder builder() { + return ImmutableNfTokenCreateOffer.builder(); + } + + @Override + protected NfTokenCreateOffer fullyPopulatedTransaction() { NfTokenId id = NfTokenId.of("000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"); - NfTokenCreateOffer nfTokenCreateOffer = NfTokenCreateOffer.builder() + return NfTokenCreateOffer.builder() .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) .fee(XrpCurrencyAmount.ofDrops(12)) .nfTokenId(id) @@ -50,54 +65,69 @@ public void testMinimalNfTokenCreateOfferJson() throws JsonProcessingException, ) .networkId(NetworkId.of(1024)) .build(); - - String json = "{\n" + - " \"TransactionType\": \"NFTokenCreateOffer\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"Amount\": \"2000\",\n" + - " \"NetworkID\": 1024,\n" + - " \"NFTokenID\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + - "}"; - - assertCanSerializeAndDeserialize(nfTokenCreateOffer, json); } - @Test - public void testJsonWithFlags() throws JsonProcessingException, JSONException { + @Override + protected NfTokenCreateOffer fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); + } + @Override + protected NfTokenCreateOffer minimallyPopulatedTransaction() { NfTokenId id = NfTokenId.of("000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"); - NfTokenCreateOffer nfTokenCreateOffer = NfTokenCreateOffer.builder() + return NfTokenCreateOffer.builder() .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) .fee(XrpCurrencyAmount.ofDrops(12)) .nfTokenId(id) - .sequence(UnsignedInteger.valueOf(12)) .amount(XrpCurrencyAmount.ofDrops(2000L)) - .flags(NfTokenCreateOfferFlags.SELL_NFTOKEN) .signingPublicKey( PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") ) .build(); + } - String json = String.format("{\n" + - " \"TransactionType\": \"NFTokenCreateOffer\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"Amount\": \"2000\",\n" + - " \"Flags\": %s,\n" + - " \"NFTokenID\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + - "}", NfTokenCreateOfferFlags.SELL_NFTOKEN); + @Test + public void testMinimalNfTokenCreateOfferJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"TransactionType\": \"NFTokenCreateOffer\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 0,\n" + + " \"Amount\": \"2000\",\n" + + " \"NFTokenID\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; - assertCanSerializeAndDeserialize(nfTokenCreateOffer, json); + assertCanSerializeAndDeserialize(minimallyPopulatedTransaction(), json); } @Test - public void testJsonWithUnknownFields() throws JsonProcessingException, JSONException { + public void testJsonWithFlags() throws JsonProcessingException, JSONException { + NfTokenCreateOffer transaction = builder().from(fullyPopulatedTransaction()) + .flags(NfTokenCreateOfferFlags.SELL_NFTOKEN) + .build(); + String json = + "{\n" + + " \"TransactionType\": \"NFTokenCreateOffer\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 12,\n" + + " \"Amount\": \"2000\",\n" + + " \"Flags\": " + NfTokenCreateOfferFlags.SELL_NFTOKEN + ",\n" + + " \"NetworkID\": 1024,\n" + + " \"NFTokenID\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; + + assertCanSerializeAndDeserialize(transaction, json); + } + + @Test + public void testJsonWithUnknownFields() throws JsonProcessingException, JSONException { NfTokenId id = NfTokenId.of("000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65"); NfTokenCreateOffer nfTokenCreateOffer = NfTokenCreateOffer.builder() .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) @@ -112,17 +142,18 @@ public void testJsonWithUnknownFields() throws JsonProcessingException, JSONExce .putUnknownFields("Foo", "Bar") .build(); - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"TransactionType\": \"NFTokenCreateOffer\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"Amount\": \"2000\",\n" + - " \"NetworkID\": 1024,\n" + - " \"NFTokenID\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + - "}"; + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"TransactionType\": \"NFTokenCreateOffer\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 12,\n" + + " \"Amount\": \"2000\",\n" + + " \"NetworkID\": 1024,\n" + + " \"NFTokenID\": \"000B013A95F14B0044F78A264E41713C64B5F89242540EE208C3098E00000D65\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\"\n" + + "}"; assertCanSerializeAndDeserialize(nfTokenCreateOffer, json); } diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenMintJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenMintJsonTests.java index f52801b0a..17072e613 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenMintJsonTests.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/NfTokenMintJsonTests.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -26,20 +26,36 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.xrpl.xrpl4j.crypto.keys.PublicKey; -import org.xrpl.xrpl4j.model.AbstractJsonTest; import org.xrpl.xrpl4j.model.flags.NfTokenMintFlags; import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.ImmutableNfTokenMint; import org.xrpl.xrpl4j.model.transactions.NetworkId; import org.xrpl.xrpl4j.model.transactions.NfTokenMint; import org.xrpl.xrpl4j.model.transactions.NfTokenUri; +import org.xrpl.xrpl4j.model.transactions.TransactionType; import org.xrpl.xrpl4j.model.transactions.TransferFee; import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; -public class NfTokenMintJsonTests extends AbstractJsonTest { +public class NfTokenMintJsonTests extends AbstractTransactionJsonTest< + ImmutableNfTokenMint, ImmutableNfTokenMint.Builder, NfTokenMint + > { - @Test - public void testMinimalNfTokenMintJson() throws JsonProcessingException, JSONException { - NfTokenMint nfTokenMint = NfTokenMint.builder() + /** + * No-args Constructor. + */ + protected NfTokenMintJsonTests() { + super(NfTokenMint.class, ImmutableNfTokenMint.class, TransactionType.NFTOKEN_MINT); + } + + + @Override + protected ImmutableNfTokenMint.Builder builder() { + return ImmutableNfTokenMint.builder(); + } + + @Override + protected NfTokenMint fullyPopulatedTransaction() { + return NfTokenMint.builder() .fee(XrpCurrencyAmount.ofDrops(12)) .account(Address.of("rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba")) .tokenTaxon(UnsignedLong.valueOf(146999694L)) @@ -53,112 +69,101 @@ public void testMinimalNfTokenMintJson() throws JsonProcessingException, JSONExc ) .networkId(NetworkId.of(1024)) .build(); + } - String json = "{\n" + - " \"TransactionType\": \"NFTokenMint\",\n" + - " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + - " \"Fee\": \"12\",\n" + - " \"Flags\": 2147483656,\n" + - " \"Sequence\": 12,\n" + - " \"TransferFee\": 1000,\n" + - " \"NetworkID\": 1024,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NFTokenTaxon\": 146999694\n" + - "}"; - - assertCanSerializeAndDeserialize(nfTokenMint, json); + @Override + protected NfTokenMint fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); } - @Test - public void testJsonWithoutFlags() throws JsonProcessingException, JSONException { - NfTokenMint nfTokenMint = NfTokenMint.builder() + @Override + protected NfTokenMint minimallyPopulatedTransaction() { + return NfTokenMint.builder() .fee(XrpCurrencyAmount.ofDrops(12)) .account(Address.of("rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba")) .tokenTaxon(UnsignedLong.valueOf(146999694L)) - .sequence(UnsignedInteger.valueOf(12)) .signingPublicKey( PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") ) .build(); + } - String json = "{\n" + - " \"TransactionType\": \"NFTokenMint\",\n" + - " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 12,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NFTokenTaxon\": 146999694\n" + - "}"; + @Test + public void testMinimalNfTokenMintJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"TransactionType\": \"NFTokenMint\",\n" + + " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + + " \"Fee\": \"12\",\n" + + " \"Flags\": 2147483656,\n" + + " \"Sequence\": 12,\n" + + " \"TransferFee\": 1000,\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NFTokenTaxon\": 146999694\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransaction(), json); + } - assertCanSerializeAndDeserialize(nfTokenMint, json); + @Test + public void testJsonWithoutFlags() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"TransactionType\": \"NFTokenMint\",\n" + + " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 0,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NFTokenTaxon\": 146999694\n" + + "}"; + + assertCanSerializeAndDeserialize(minimallyPopulatedTransaction(), json); } @Test public void testMinimalNfTokenMintWithUriJson() throws JsonProcessingException, JSONException { - String uri = "ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf4dfuylqabf3oclgtqy55fbzdi"; - NfTokenMint nfTokenMint = NfTokenMint.builder() - .fee(XrpCurrencyAmount.ofDrops(12)) - .account(Address.of("rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba")) - .tokenTaxon(UnsignedLong.valueOf(146999694L)) - .sequence(UnsignedInteger.valueOf(12)) - .transferFee(TransferFee.of(UnsignedInteger.valueOf(1000))) + NfTokenMint transaction = builder().from(fullyPopulatedTransaction()) .uri(NfTokenUri.ofPlainText(uri)) - .flags(NfTokenMintFlags.builder() - .tfTransferable(true) - .build()) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) .build(); - String json = "{\n" + - " \"TransactionType\": \"NFTokenMint\",\n" + - " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + - " \"Fee\": \"12\",\n" + - " \"Flags\": 2147483656,\n" + - " \"Sequence\": 12,\n" + - " \"TransferFee\": 1000,\n" + - " \"URI\": \"697066733A2F2F62616679626569676479727A74357366703775646D3768753736756837" + - "7932366E6634646675796C71616266336F636C67747179353566627A6469\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NFTokenTaxon\": 146999694\n" + - "}"; - - assertCanSerializeAndDeserialize(nfTokenMint, json); + String json = + "{\n" + + " \"TransactionType\": \"NFTokenMint\",\n" + + " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + + " \"Fee\": \"12\",\n" + + " \"Flags\": 2147483656,\n" + + " \"Sequence\": 12,\n" + + " \"TransferFee\": 1000,\n" + + " \"URI\": \"697066733A2F2F62616679626569676479727A74357366703775646D3768753736756837" + + "7932366E6634646675796C71616266336F636C67747179353566627A6469\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NFTokenTaxon\": 146999694,\n" + + " \"NetworkID\": 1024\n" + + "}"; + + assertCanSerializeAndDeserialize(transaction, json); } @Test public void testJsonWithUnknownFields() throws JsonProcessingException, JSONException { - NfTokenMint nfTokenMint = NfTokenMint.builder() - .fee(XrpCurrencyAmount.ofDrops(12)) - .account(Address.of("rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba")) - .tokenTaxon(UnsignedLong.valueOf(146999694L)) - .sequence(UnsignedInteger.valueOf(12)) - .transferFee(TransferFee.of(UnsignedInteger.valueOf(1000))) - .flags(NfTokenMintFlags.builder() - .tfTransferable(true) - .build()) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"TransactionType\": \"NFTokenMint\",\n" + - " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + - " \"Fee\": \"12\",\n" + - " \"Flags\": 2147483656,\n" + - " \"Sequence\": 12,\n" + - " \"TransferFee\": 1000,\n" + - " \"NetworkID\": 1024,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NFTokenTaxon\": 146999694\n" + - "}"; - - assertCanSerializeAndDeserialize(nfTokenMint, json); + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"TransactionType\": \"NFTokenMint\",\n" + + " \"Account\": \"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59Ba\",\n" + + " \"Fee\": \"12\",\n" + + " \"Flags\": 2147483656,\n" + + " \"Sequence\": 12,\n" + + " \"TransferFee\": 1000,\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NFTokenTaxon\": 146999694\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); } } diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/OfferCancelJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/OfferCancelJsonTests.java new file mode 100644 index 000000000..5923d55d6 --- /dev/null +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/OfferCancelJsonTests.java @@ -0,0 +1,194 @@ +package org.xrpl.xrpl4j.model.transactions.json; + +/*- + * ========================LICENSE_START================================= + * xrpl4j :: model + * %% + * Copyright (C) 2020 - 2022 XRPL Foundation and its contributors + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.primitives.UnsignedInteger; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.xrpl.xrpl4j.crypto.keys.PublicKey; +import org.xrpl.xrpl4j.model.flags.TransactionFlags; +import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.ImmutableOfferCancel; +import org.xrpl.xrpl4j.model.transactions.NetworkId; +import org.xrpl.xrpl4j.model.transactions.OfferCancel; +import org.xrpl.xrpl4j.model.transactions.TransactionType; +import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; + +public class OfferCancelJsonTests + extends AbstractTransactionJsonTest { + + /** + * No-args Constructor. + */ + protected OfferCancelJsonTests() { + super(OfferCancel.class, ImmutableOfferCancel.class, TransactionType.OFFER_CANCEL); + } + + + @Override + protected ImmutableOfferCancel.Builder builder() { + return ImmutableOfferCancel.builder(); + } + + @Override + protected OfferCancel fullyPopulatedTransaction() { + return OfferCancel.builder() + .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) + .sequence(UnsignedInteger.valueOf(12)) + .offerSequence(UnsignedInteger.valueOf(13)) + .fee(XrpCurrencyAmount.ofDrops(14)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .build(); + } + + @Override + protected OfferCancel fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); + } + + @Override + protected OfferCancel minimallyPopulatedTransaction() { + return OfferCancel.builder() + .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) + .fee(XrpCurrencyAmount.ofDrops(14)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .build(); + } + + @Test + public void testOfferCancelJson() throws JsonProcessingException, JSONException { + OfferCancel offerCancel = OfferCancel.builder() + .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) + .sequence(UnsignedInteger.valueOf(12)) + .offerSequence(UnsignedInteger.valueOf(13)) + .fee(XrpCurrencyAmount.ofDrops(14)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .build(); + + String json = + "{\n" + + " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + + " \"TransactionType\": \"OfferCancel\",\n" + + " \"Sequence\": 12,\n" + + " \"OfferSequence\": 13,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Fee\": \"14\"\n" + + "}"; + + assertCanSerializeAndDeserialize(offerCancel, json); + } + + @Test + public void testOfferCancelJsonWithUnsetFlags() throws JsonProcessingException, JSONException { + OfferCancel offerCancel = OfferCancel.builder() + .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) + .sequence(UnsignedInteger.valueOf(12)) + .offerSequence(UnsignedInteger.valueOf(13)) + .fee(XrpCurrencyAmount.ofDrops(14)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .flags(TransactionFlags.UNSET) + .build(); + + String json = + "{\n" + + " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + + " \"TransactionType\": \"OfferCancel\",\n" + + " \"Sequence\": 12,\n" + + " \"OfferSequence\": 13,\n" + + " \"Flags\": 0,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Fee\": \"14\"\n" + + "}"; + + assertCanSerializeAndDeserialize(offerCancel, json); + } + + @Test + public void testOfferCancelJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { + OfferCancel offerCancel = OfferCancel.builder() + .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) + .sequence(UnsignedInteger.valueOf(12)) + .offerSequence(UnsignedInteger.valueOf(13)) + .fee(XrpCurrencyAmount.ofDrops(14)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .flags(TransactionFlags.FULLY_CANONICAL_SIG) + .build(); + + String json = + "{\n" + + " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + + " \"TransactionType\": \"OfferCancel\",\n" + + " \"Sequence\": 12,\n" + + " \"OfferSequence\": 13,\n" + + " \"Flags\": " + TransactionFlags.FULLY_CANONICAL_SIG.getValue() + ",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Fee\": \"14\"\n" + + "}"; + + assertCanSerializeAndDeserialize(offerCancel, json); + } + + @Test + public void testOfferCancelJsonWithUnknownFields() throws JsonProcessingException, JSONException { + OfferCancel offerCancel = OfferCancel.builder() + .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) + .sequence(UnsignedInteger.valueOf(12)) + .offerSequence(UnsignedInteger.valueOf(13)) + .fee(XrpCurrencyAmount.ofDrops(14)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .putUnknownFields("Foo", "Bar") + .build(); + + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + + " \"TransactionType\": \"OfferCancel\",\n" + + " \"Sequence\": 12,\n" + + " \"OfferSequence\": 13,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Fee\": \"14\"\n" + + "}"; + + assertCanSerializeAndDeserialize(offerCancel, json); + } + +} diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/OfferCreateJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/OfferCreateJsonTests.java new file mode 100644 index 000000000..00061c2d8 --- /dev/null +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/OfferCreateJsonTests.java @@ -0,0 +1,177 @@ +package org.xrpl.xrpl4j.model.transactions.json; + +/*- + * ========================LICENSE_START================================= + * xrpl4j :: model + * %% + * Copyright (C) 2020 - 2022 XRPL Foundation and its contributors + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.primitives.UnsignedInteger; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.xrpl.xrpl4j.crypto.keys.PublicKey; +import org.xrpl.xrpl4j.model.flags.OfferCreateFlags; +import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.ImmutableOfferCreate; +import org.xrpl.xrpl4j.model.transactions.NetworkId; +import org.xrpl.xrpl4j.model.transactions.OfferCreate; +import org.xrpl.xrpl4j.model.transactions.TransactionType; +import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; + +public class OfferCreateJsonTests + extends AbstractTransactionJsonTest { + + /** + * No-args Constructor. + */ + protected OfferCreateJsonTests() { + super(OfferCreate.class, ImmutableOfferCreate.class, TransactionType.OFFER_CREATE); + } + + + @Override + protected ImmutableOfferCreate.Builder builder() { + return ImmutableOfferCreate.builder(); + } + + @Override + protected OfferCreate fullyPopulatedTransaction() { + return OfferCreate.builder() + .account(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) + .sequence(UnsignedInteger.ONE) + .fee(XrpCurrencyAmount.ofDrops(12)) + .offerSequence(UnsignedInteger.valueOf(13)) + .takerPays(XrpCurrencyAmount.ofDrops(14)) + .takerGets(XrpCurrencyAmount.ofDrops(15)) + .expiration(UnsignedInteger.valueOf(16)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .build(); + } + + @Override + protected OfferCreate fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); + } + + @Override + protected OfferCreate minimallyPopulatedTransaction() { + return OfferCreate.builder() + .account(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) + .fee(XrpCurrencyAmount.ofDrops(12)) + .takerPays(XrpCurrencyAmount.ofDrops(14)) + .takerGets(XrpCurrencyAmount.ofDrops(15)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .build(); + } + + @Test + public void testOfferCreateJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Account\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + + " \"TransactionType\": \"OfferCreate\",\n" + + " \"Sequence\": 1,\n" + + " \"OfferSequence\": 13,\n" + + " \"TakerPays\": \"14\",\n" + + " \"TakerGets\": \"15\",\n" + + " \"Fee\": \"12\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Expiration\": 16\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransaction(), json); + } + + @Test + public void testMinimallyPopulatedOfferCreateJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Account\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + + " \"TransactionType\": \"OfferCreate\",\n" + + " \"Sequence\": 1,\n" + + " \"OfferSequence\": 13,\n" + + " \"TakerPays\": \"14\",\n" + + " \"TakerGets\": \"15\",\n" + + " \"Fee\": \"12\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Expiration\": 16\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransaction(), json); + } + + @Test + public void testOfferCreateJsonWithFlags() throws JsonProcessingException, JSONException { + OfferCreateFlags flags = OfferCreateFlags.builder() + .tfSell(true) + .tfImmediateOrCancel(true) + .tfPassive(true) + .tfImmediateOrCancel(true) + .build(); + OfferCreate transaction = builder().from(fullyPopulatedTransaction()) + .flags(flags) + .build(); + + String json = + "{\n" + + " \"Account\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + + " \"Fee\": \"12\",\n" + + " \"Flags\": " + flags + ",\n" + + " \"NetworkID\": 1024,\n" + + " \"OfferSequence\": 13,\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"TakerPays\": \"14\",\n" + + " \"TakerGets\": \"15\",\n" + + " \"TransactionType\": \"OfferCreate\",\n" + + " \"Expiration\": 16\n" + + "}"; + + assertCanSerializeAndDeserialize(transaction, json); + } + + @Test + public void testOfferCreateJsonWithUnknownFields() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"Account\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + + " \"TransactionType\": \"OfferCreate\",\n" + + " \"Sequence\": 1,\n" + + " \"OfferSequence\": 13,\n" + + " \"TakerPays\": \"14\",\n" + + " \"TakerGets\": \"15\",\n" + + " \"Fee\": \"12\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Expiration\": 16\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); + } + +} diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/OfferJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/OfferJsonTests.java deleted file mode 100644 index 0d3ef0c9d..000000000 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/OfferJsonTests.java +++ /dev/null @@ -1,243 +0,0 @@ -package org.xrpl.xrpl4j.model.transactions.json; - -/*- - * ========================LICENSE_START================================= - * xrpl4j :: model - * %% - * Copyright (C) 2020 - 2022 XRPL Foundation and its contributors - * %% - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * =========================LICENSE_END================================== - */ - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.google.common.primitives.UnsignedInteger; -import org.json.JSONException; -import org.junit.jupiter.api.Test; -import org.xrpl.xrpl4j.crypto.keys.PublicKey; -import org.xrpl.xrpl4j.model.AbstractJsonTest; -import org.xrpl.xrpl4j.model.flags.OfferCreateFlags; -import org.xrpl.xrpl4j.model.flags.TransactionFlags; -import org.xrpl.xrpl4j.model.transactions.Address; -import org.xrpl.xrpl4j.model.transactions.NetworkId; -import org.xrpl.xrpl4j.model.transactions.OfferCancel; -import org.xrpl.xrpl4j.model.transactions.OfferCreate; -import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; - -public class OfferJsonTests extends AbstractJsonTest { - - @Test - public void testOfferCancelJson() throws JsonProcessingException, JSONException { - OfferCancel offerCancel = OfferCancel.builder() - .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) - .sequence(UnsignedInteger.valueOf(12)) - .offerSequence(UnsignedInteger.valueOf(13)) - .fee(XrpCurrencyAmount.ofDrops(14)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .build(); - - String json = "{\n" + - " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + - " \"TransactionType\": \"OfferCancel\",\n" + - " \"Sequence\": 12,\n" + - " \"OfferSequence\": 13,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Fee\": \"14\"\n" + - "}"; - - assertCanSerializeAndDeserialize(offerCancel, json); - } - - @Test - public void testOfferCancelJsonWithUnsetFlags() throws JsonProcessingException, JSONException { - OfferCancel offerCancel = OfferCancel.builder() - .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) - .sequence(UnsignedInteger.valueOf(12)) - .offerSequence(UnsignedInteger.valueOf(13)) - .fee(XrpCurrencyAmount.ofDrops(14)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.UNSET) - .build(); - - String json = "{\n" + - " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + - " \"TransactionType\": \"OfferCancel\",\n" + - " \"Sequence\": 12,\n" + - " \"OfferSequence\": 13,\n" + - " \"Flags\": 0,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"14\"\n" + - "}"; - - assertCanSerializeAndDeserialize(offerCancel, json); - } - - @Test - public void testOfferCancelJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { - OfferCancel offerCancel = OfferCancel.builder() - .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) - .sequence(UnsignedInteger.valueOf(12)) - .offerSequence(UnsignedInteger.valueOf(13)) - .fee(XrpCurrencyAmount.ofDrops(14)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.FULLY_CANONICAL_SIG) - .build(); - - String json = String.format("{\n" + - " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + - " \"TransactionType\": \"OfferCancel\",\n" + - " \"Sequence\": 12,\n" + - " \"OfferSequence\": 13,\n" + - " \"Flags\": %s,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Fee\": \"14\"\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); - - assertCanSerializeAndDeserialize(offerCancel, json); - } - - @Test - public void testOfferCancelJsonWithUnknownFields() throws JsonProcessingException, JSONException { - OfferCancel offerCancel = OfferCancel.builder() - .account(Address.of("rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo")) - .sequence(UnsignedInteger.valueOf(12)) - .offerSequence(UnsignedInteger.valueOf(13)) - .fee(XrpCurrencyAmount.ofDrops(14)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"Account\": \"rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo\",\n" + - " \"TransactionType\": \"OfferCancel\",\n" + - " \"Sequence\": 12,\n" + - " \"OfferSequence\": 13,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Fee\": \"14\"\n" + - "}"; - - assertCanSerializeAndDeserialize(offerCancel, json); - } - - @Test - public void testOfferCreateJson() throws JsonProcessingException, JSONException { - OfferCreate offerCreate = OfferCreate.builder() - .account(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) - .sequence(UnsignedInteger.ONE) - .fee(XrpCurrencyAmount.ofDrops(12)) - .offerSequence(UnsignedInteger.valueOf(13)) - .takerPays(XrpCurrencyAmount.ofDrops(14)) - .takerGets(XrpCurrencyAmount.ofDrops(15)) - .expiration(UnsignedInteger.valueOf(16)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .build(); - - String json = "{\n" + - " \"Account\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + - " \"TransactionType\": \"OfferCreate\",\n" + - " \"Sequence\": 1,\n" + - " \"OfferSequence\": 13,\n" + - " \"TakerPays\": \"14\",\n" + - " \"TakerGets\": \"15\",\n" + - " \"Fee\": \"12\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Expiration\": 16\n" + - "}"; - - assertCanSerializeAndDeserialize(offerCreate, json); - } - - @Test - public void testOfferCreateJsonWithFlags() throws JsonProcessingException, JSONException { - OfferCreate offerCreate = OfferCreate.builder() - .account(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) - .sequence(UnsignedInteger.ONE) - .fee(XrpCurrencyAmount.ofDrops(12)) - .offerSequence(UnsignedInteger.valueOf(13)) - .takerPays(XrpCurrencyAmount.ofDrops(14)) - .takerGets(XrpCurrencyAmount.ofDrops(15)) - .expiration(UnsignedInteger.valueOf(16)) - .flags(OfferCreateFlags.builder().tfSell(true).build()) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .build(); - - String json = String.format("{\n" + - " \"Account\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + - " \"TransactionType\": \"OfferCreate\",\n" + - " \"Sequence\": 1,\n" + - " \"OfferSequence\": 13,\n" + - " \"TakerPays\": \"14\",\n" + - " \"TakerGets\": \"15\",\n" + - " \"Fee\": \"12\",\n" + - " \"Flags\": %s,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Expiration\": 16\n" + - "}", offerCreate.flags()); - - assertCanSerializeAndDeserialize(offerCreate, json); - } - - @Test - public void testOfferCreateJsonWithUnknownFields() throws JsonProcessingException, JSONException { - OfferCreate offerCreate = OfferCreate.builder() - .account(Address.of("rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy")) - .sequence(UnsignedInteger.ONE) - .fee(XrpCurrencyAmount.ofDrops(12)) - .offerSequence(UnsignedInteger.valueOf(13)) - .takerPays(XrpCurrencyAmount.ofDrops(14)) - .takerGets(XrpCurrencyAmount.ofDrops(15)) - .expiration(UnsignedInteger.valueOf(16)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"Account\": \"rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy\",\n" + - " \"TransactionType\": \"OfferCreate\",\n" + - " \"Sequence\": 1,\n" + - " \"OfferSequence\": 13,\n" + - " \"TakerPays\": \"14\",\n" + - " \"TakerGets\": \"15\",\n" + - " \"Fee\": \"12\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Expiration\": 16\n" + - "}"; - - assertCanSerializeAndDeserialize(offerCreate, json); - } - -} diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/PaymentChannelClaimJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/PaymentChannelClaimJsonTests.java new file mode 100644 index 000000000..a85163ebc --- /dev/null +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/PaymentChannelClaimJsonTests.java @@ -0,0 +1,165 @@ +package org.xrpl.xrpl4j.model.transactions.json; + +/*- + * ========================LICENSE_START================================= + * xrpl4j :: model + * %% + * Copyright (C) 2020 - 2022 XRPL Foundation and its contributors + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.primitives.UnsignedInteger; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.xrpl.xrpl4j.crypto.keys.PublicKey; +import org.xrpl.xrpl4j.model.flags.PaymentChannelClaimFlags; +import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.Hash256; +import org.xrpl.xrpl4j.model.transactions.ImmutablePaymentChannelClaim; +import org.xrpl.xrpl4j.model.transactions.NetworkId; +import org.xrpl.xrpl4j.model.transactions.PaymentChannelClaim; +import org.xrpl.xrpl4j.model.transactions.TransactionType; +import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; + +public class PaymentChannelClaimJsonTests extends AbstractTransactionJsonTest< + ImmutablePaymentChannelClaim, ImmutablePaymentChannelClaim.Builder, PaymentChannelClaim + > { + + /** + * No-args Constructor. + */ + protected PaymentChannelClaimJsonTests() { + super(PaymentChannelClaim.class, ImmutablePaymentChannelClaim.class, TransactionType.PAYMENT_CHANNEL_CLAIM); + } + + @Override + protected ImmutablePaymentChannelClaim.Builder builder() { + return ImmutablePaymentChannelClaim.builder(); + } + + @Override + protected PaymentChannelClaim fullyPopulatedTransaction() { + return PaymentChannelClaim.builder() + .account(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) + .fee(XrpCurrencyAmount.ofDrops(10)) + .sequence(UnsignedInteger.ONE) + .channel(Hash256.of("C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198")) + .balance(XrpCurrencyAmount.ofDrops(1000000)) + .amount(XrpCurrencyAmount.ofDrops(1000000)) + .signature("30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E721B420C0DAB02203A5A4779E" + + "F4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA3CD7B9B") + .publicKey("32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A") + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .build(); + } + + @Override + protected PaymentChannelClaim fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); + } + + @Override + protected PaymentChannelClaim minimallyPopulatedTransaction() { + return PaymentChannelClaim.builder() + .account(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) + .fee(XrpCurrencyAmount.ofDrops(10)) + .channel(Hash256.of("C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198")) + .signature("30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E721B420C0DAB02203A5A4779E" + + "F4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA3CD7B9B") + .publicKey("32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A") + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .build(); + } + + @Test + public void testPaymentChannelClaimJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Account\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + + " \"Fee\": \"10\",\n" + + " \"Sequence\": 1,\n" + + " \"TransactionType\": \"PaymentChannelClaim\",\n" + + " \"Channel\": \"C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198\",\n" + + " \"Balance\": \"1000000\",\n" + + " \"Amount\": \"1000000\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Signature\": \"30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E721B420C0DAB02203A5A4" + + "779EF4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA3CD7B9B\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"PublicKey\": \"32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A\"\n" + + "}"; + assertCanSerializeAndDeserialize(fullyPopulatedTransaction(), json); + } + + @Test + public void testPaymentChannelClaimJsonWithFlags() throws JsonProcessingException, JSONException { + + PaymentChannelClaimFlags flags = PaymentChannelClaimFlags.builder() + .tfClose(true) + .tfRenew(true) + .build(); + PaymentChannelClaim transaction = builder().from(fullyPopulatedTransaction()) + .flags(flags) + .build(); + + String json = + "{\n" + + " \"Account\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + + " \"Amount\": \"1000000\",\n" + + " \"Balance\": \"1000000\",\n" + + " \"Fee\": \"10\",\n" + + " \"Flags\": 2147680256,\n" + + " \"Channel\": \"C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198\",\n" + + " \"NetworkID\": 1024,\n" + + " \"PublicKey\": \"32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A\",\n" + + " \"Sequence\": 1,\n" + + " \"Signature\": \"30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E721B420C0DAB02203A5A4" + + "779EF4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA3CD7B9B\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"TransactionType\": \"PaymentChannelClaim\"\n" + + "}"; + assertCanSerializeAndDeserialize(transaction, json); + } + + @Test + public void testPaymentChannelClaimJsonWithUnknownFields() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"Account\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + + " \"Fee\": \"10\",\n" + + " \"Sequence\": 1,\n" + + " \"TransactionType\": \"PaymentChannelClaim\",\n" + + " \"Channel\": \"C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198\",\n" + + " \"Balance\": \"1000000\",\n" + + " \"Amount\": \"1000000\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Signature\": \"30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E721B420C0DAB02203A5A4" + + "779EF4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA3CD7B9B\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"PublicKey\": \"32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A\"\n" + + "}"; + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); + } + +} diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/PaymentChannelCreateJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/PaymentChannelCreateJsonTests.java new file mode 100644 index 000000000..fc543a33d --- /dev/null +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/PaymentChannelCreateJsonTests.java @@ -0,0 +1,194 @@ +package org.xrpl.xrpl4j.model.transactions.json; + +/*- + * ========================LICENSE_START================================= + * xrpl4j :: model + * %% + * Copyright (C) 2020 - 2022 XRPL Foundation and its contributors + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.primitives.UnsignedInteger; +import com.google.common.primitives.UnsignedLong; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.xrpl.xrpl4j.crypto.keys.PublicKey; +import org.xrpl.xrpl4j.model.flags.TransactionFlags; +import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.ImmutablePaymentChannelCreate; +import org.xrpl.xrpl4j.model.transactions.NetworkId; +import org.xrpl.xrpl4j.model.transactions.PaymentChannelCreate; +import org.xrpl.xrpl4j.model.transactions.TransactionType; +import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; + +public class PaymentChannelCreateJsonTests extends AbstractTransactionJsonTest< + ImmutablePaymentChannelCreate, ImmutablePaymentChannelCreate.Builder, PaymentChannelCreate + > { + + /** + * No-args Constructor. + */ + protected PaymentChannelCreateJsonTests() { + super(PaymentChannelCreate.class, ImmutablePaymentChannelCreate.class, TransactionType.PAYMENT_CHANNEL_CREATE); + } + + @Override + protected ImmutablePaymentChannelCreate.Builder builder() { + return ImmutablePaymentChannelCreate.builder(); + } + + @Override + protected PaymentChannelCreate fullyPopulatedTransaction() { + return PaymentChannelCreate.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .sourceTag(UnsignedInteger.valueOf(11747)) + .fee(XrpCurrencyAmount.ofDrops(10)) + .sequence(UnsignedInteger.ONE) + .amount(XrpCurrencyAmount.ofDrops(10000)) + .destination(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) + .destinationTag(UnsignedInteger.valueOf(23480)) + .settleDelay(UnsignedInteger.valueOf(86400)) + .publicKey("32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A") + .cancelAfter(UnsignedLong.valueOf(533171558)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .build(); + } + + @Override + protected PaymentChannelCreate fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); + } + + @Override + protected PaymentChannelCreate minimallyPopulatedTransaction() { + return PaymentChannelCreate.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(10)) + .amount(XrpCurrencyAmount.ofDrops(10000)) + .destination(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) + .settleDelay(UnsignedInteger.valueOf(86400)) + .publicKey("32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A") + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .build(); + } + + @Test + public void testPaymentChannelCreateJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"10\",\n" + + " \"Sequence\": 1,\n" + + " \"TransactionType\": \"PaymentChannelCreate\",\n" + + " \"Amount\": \"10000\",\n" + + " \"Destination\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + + " \"SettleDelay\": 86400,\n" + + " \"PublicKey\": \"32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A\",\n" + + " \"CancelAfter\": 533171558,\n" + + " \"DestinationTag\": 23480,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"SourceTag\": 11747\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransaction(), json); + } + + @Test + public void testPaymentChannelCreateJsonWithUnsetFlags() throws JsonProcessingException, JSONException { + PaymentChannelCreate transaction = builder().from(fullyPopulatedTransaction()) + .flags(TransactionFlags.UNSET) + .build(); + + String json = + "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Amount\": \"10000\",\n" + + " \"CancelAfter\": 533171558,\n" + + " \"Destination\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + + " \"DestinationTag\": 23480,\n" + + " \"Fee\": \"10\",\n" + + " \"Flags\": 0,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"PublicKey\": \"32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A\",\n" + + " \"SettleDelay\": 86400,\n" + + " \"Sequence\": 1,\n" + + " \"SourceTag\": 11747,\n" + + " \"TransactionType\": \"PaymentChannelCreate\"\n" + + "}"; + + assertCanSerializeAndDeserialize(transaction, json); + } + + @Test + public void testPaymentChannelCreateJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { + PaymentChannelCreate create = PaymentChannelCreate.builder().from(fullyPopulatedTransaction()) + .flags(TransactionFlags.FULLY_CANONICAL_SIG) + .build(); + + String json = + "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"10\",\n" + + " \"Amount\": \"10000\",\n" + + " \"CancelAfter\": 533171558,\n" + + " \"Destination\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + + " \"DestinationTag\": 23480,\n" + + " \"Flags\": " + TransactionFlags.FULLY_CANONICAL_SIG.getValue() + ",\n" + + " \"NetworkID\": 1024,\n" + + " \"PublicKey\": \"32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A\",\n" + + " \"SettleDelay\": 86400,\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"SourceTag\": 11747,\n" + + " \"TransactionType\": \"PaymentChannelCreate\"\n" + + "}"; + + assertCanSerializeAndDeserialize(create, json); + } + + @Test + public void testPaymentChannelCreateJsonWithUnknownFields() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"10\",\n" + + " \"Sequence\": 1,\n" + + " \"TransactionType\": \"PaymentChannelCreate\",\n" + + " \"Amount\": \"10000\",\n" + + " \"Destination\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + + " \"SettleDelay\": 86400,\n" + + " \"PublicKey\": \"32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A\",\n" + + " \"CancelAfter\": 533171558,\n" + + " \"DestinationTag\": 23480,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"SourceTag\": 11747\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); + } + +} diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/PaymentChannelFundJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/PaymentChannelFundJsonTests.java new file mode 100644 index 000000000..26b05fd66 --- /dev/null +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/PaymentChannelFundJsonTests.java @@ -0,0 +1,186 @@ +package org.xrpl.xrpl4j.model.transactions.json; + +/*- + * ========================LICENSE_START================================= + * xrpl4j :: model + * %% + * Copyright (C) 2020 - 2022 XRPL Foundation and its contributors + * %% + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================LICENSE_END================================== + */ + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.google.common.primitives.UnsignedInteger; +import com.google.common.primitives.UnsignedLong; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.xrpl.xrpl4j.crypto.keys.PublicKey; +import org.xrpl.xrpl4j.model.flags.TransactionFlags; +import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.Hash256; +import org.xrpl.xrpl4j.model.transactions.ImmutablePaymentChannelFund; +import org.xrpl.xrpl4j.model.transactions.NetworkId; +import org.xrpl.xrpl4j.model.transactions.PaymentChannelFund; +import org.xrpl.xrpl4j.model.transactions.TransactionType; +import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; + +public class PaymentChannelFundJsonTests extends AbstractTransactionJsonTest< + ImmutablePaymentChannelFund, ImmutablePaymentChannelFund.Builder, PaymentChannelFund + > { + + /** + * No-args Constructor. + */ + protected PaymentChannelFundJsonTests() { + super(PaymentChannelFund.class, ImmutablePaymentChannelFund.class, TransactionType.PAYMENT_CHANNEL_FUND); + } + + @Override + protected ImmutablePaymentChannelFund.Builder builder() { + return ImmutablePaymentChannelFund.builder(); + } + + @Override + protected PaymentChannelFund fullyPopulatedTransaction() { + return PaymentChannelFund.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(10)) + .sequence(UnsignedInteger.ONE) + .channel(Hash256.of("C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198")) + .amount(XrpCurrencyAmount.ofDrops(200000)) + .expiration(UnsignedLong.valueOf(543171558)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .build(); + } + + @Override + protected PaymentChannelFund fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); + } + + @Override + protected PaymentChannelFund minimallyPopulatedTransaction() { + return PaymentChannelFund.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .amount(XrpCurrencyAmount.ofDrops(200000)) + .channel(Hash256.of("C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198")) + .fee(XrpCurrencyAmount.ofDrops(10)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .build(); + } + + @Test + public void testPaymentChannelFundJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"10\",\n" + + " \"Sequence\": 1,\n" + + " \"TransactionType\": \"PaymentChannelFund\",\n" + + " \"Channel\": \"C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198\",\n" + + " \"Amount\": \"200000\",\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Expiration\": 543171558\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransaction(), json); + } + + @Test + public void testPaymentChannelFundJsonWithUnsetFlags() throws JsonProcessingException, JSONException { + PaymentChannelFund fund = builder().from(fullyPopulatedTransaction()) + .flags(TransactionFlags.UNSET) + .build(); + + String json = + "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Amount\": \"200000\",\n" + + " \"Channel\": \"C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198\",\n" + + " \"Expiration\": 543171558,\n" + + " \"Fee\": \"10\",\n" + + " \"Flags\": 0,\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Sequence\": 1,\n" + + " \"TransactionType\": \"PaymentChannelFund\"\n" + + "}"; + + assertCanSerializeAndDeserialize(fund, json); + } + + @Test + public void testPaymentChannelFundJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { + PaymentChannelFund fund = builder().from(fullyPopulatedTransaction()) + .flags(TransactionFlags.FULLY_CANONICAL_SIG) + .build(); + + String json = + "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Amount\": \"200000\",\n" + + " \"Channel\": \"C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198\",\n" + + " \"Expiration\": 543171558,\n" + + " \"Fee\": \"10\",\n" + + " \"Flags\": " + TransactionFlags.FULLY_CANONICAL_SIG.getValue() + ",\n" + + " \"NetworkID\": 1024,\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"TransactionType\": \"PaymentChannelFund\"\n" + + "}"; + + assertCanSerializeAndDeserialize(fund, json); + } + + @Test + public void testPaymentChannelFundJsonWithUnknownFields() throws JsonProcessingException, JSONException { + PaymentChannelFund fund = PaymentChannelFund.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(10)) + .sequence(UnsignedInteger.ONE) + .channel(Hash256.of("C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198")) + .amount(XrpCurrencyAmount.ofDrops(200000)) + .expiration(UnsignedLong.valueOf(543171558)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .networkId(NetworkId.of(1024)) + .putUnknownFields("Foo", "Bar") + .build(); + + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"10\",\n" + + " \"Sequence\": 1,\n" + + " \"TransactionType\": \"PaymentChannelFund\",\n" + + " \"Channel\": \"C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198\",\n" + + " \"Amount\": \"200000\",\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Expiration\": 543171558\n" + + "}"; + + assertCanSerializeAndDeserialize(fund, json); + } +} diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/PaymentChannelJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/PaymentChannelJsonTests.java deleted file mode 100644 index 251e65df8..000000000 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/PaymentChannelJsonTests.java +++ /dev/null @@ -1,424 +0,0 @@ -package org.xrpl.xrpl4j.model.transactions.json; - -/*- - * ========================LICENSE_START================================= - * xrpl4j :: model - * %% - * Copyright (C) 2020 - 2022 XRPL Foundation and its contributors - * %% - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * =========================LICENSE_END================================== - */ - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.google.common.primitives.UnsignedInteger; -import com.google.common.primitives.UnsignedLong; -import org.json.JSONException; -import org.junit.jupiter.api.Test; -import org.xrpl.xrpl4j.crypto.keys.PublicKey; -import org.xrpl.xrpl4j.model.AbstractJsonTest; -import org.xrpl.xrpl4j.model.flags.PaymentChannelClaimFlags; -import org.xrpl.xrpl4j.model.flags.TransactionFlags; -import org.xrpl.xrpl4j.model.transactions.Address; -import org.xrpl.xrpl4j.model.transactions.Hash256; -import org.xrpl.xrpl4j.model.transactions.NetworkId; -import org.xrpl.xrpl4j.model.transactions.PaymentChannelClaim; -import org.xrpl.xrpl4j.model.transactions.PaymentChannelCreate; -import org.xrpl.xrpl4j.model.transactions.PaymentChannelFund; -import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; - -public class PaymentChannelJsonTests extends AbstractJsonTest { - - @Test - public void testPaymentChannelCreateJson() throws JsonProcessingException, JSONException { - PaymentChannelCreate create = PaymentChannelCreate.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .sourceTag(UnsignedInteger.valueOf(11747)) - .fee(XrpCurrencyAmount.ofDrops(10)) - .sequence(UnsignedInteger.ONE) - .amount(XrpCurrencyAmount.ofDrops(10000)) - .destination(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) - .destinationTag(UnsignedInteger.valueOf(23480)) - .settleDelay(UnsignedInteger.valueOf(86400)) - .publicKey("32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A") - .cancelAfter(UnsignedLong.valueOf(533171558)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .build(); - - String json = "{\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"10\",\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"PaymentChannelCreate\",\n" + - " \"Amount\": \"10000\",\n" + - " \"Destination\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + - " \"SettleDelay\": 86400,\n" + - " \"PublicKey\": \"32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A\",\n" + - " \"CancelAfter\": 533171558,\n" + - " \"DestinationTag\": 23480,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"SourceTag\": 11747\n" + - "}"; - - assertCanSerializeAndDeserialize(create, json); - } - - @Test - public void testPaymentChannelCreateJsonWithUnsetFlags() throws JsonProcessingException, JSONException { - PaymentChannelCreate create = PaymentChannelCreate.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .sourceTag(UnsignedInteger.valueOf(11747)) - .fee(XrpCurrencyAmount.ofDrops(10)) - .sequence(UnsignedInteger.ONE) - .amount(XrpCurrencyAmount.ofDrops(10000)) - .destination(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) - .destinationTag(UnsignedInteger.valueOf(23480)) - .settleDelay(UnsignedInteger.valueOf(86400)) - .publicKey("32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A") - .cancelAfter(UnsignedLong.valueOf(533171558)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.UNSET) - .build(); - - String json = "{\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"10\",\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"PaymentChannelCreate\",\n" + - " \"Amount\": \"10000\",\n" + - " \"Destination\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + - " \"SettleDelay\": 86400,\n" + - " \"PublicKey\": \"32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A\",\n" + - " \"CancelAfter\": 533171558,\n" + - " \"DestinationTag\": 23480,\n" + - " \"Flags\": 0,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"SourceTag\": 11747\n" + - "}"; - - assertCanSerializeAndDeserialize(create, json); - } - - @Test - public void testPaymentChannelCreateJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { - PaymentChannelCreate create = PaymentChannelCreate.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .sourceTag(UnsignedInteger.valueOf(11747)) - .fee(XrpCurrencyAmount.ofDrops(10)) - .sequence(UnsignedInteger.ONE) - .amount(XrpCurrencyAmount.ofDrops(10000)) - .destination(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) - .destinationTag(UnsignedInteger.valueOf(23480)) - .settleDelay(UnsignedInteger.valueOf(86400)) - .publicKey("32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A") - .cancelAfter(UnsignedLong.valueOf(533171558)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.FULLY_CANONICAL_SIG) - .build(); - - String json = String.format("{\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"10\",\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"PaymentChannelCreate\",\n" + - " \"Amount\": \"10000\",\n" + - " \"Destination\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + - " \"SettleDelay\": 86400,\n" + - " \"PublicKey\": \"32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A\",\n" + - " \"CancelAfter\": 533171558,\n" + - " \"DestinationTag\": 23480,\n" + - " \"Flags\": %s,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"SourceTag\": 11747\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); - - assertCanSerializeAndDeserialize(create, json); - } - - @Test - public void testPaymentChannelCreateJsonWithUnknownFields() throws JsonProcessingException, JSONException { - PaymentChannelCreate create = PaymentChannelCreate.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .sourceTag(UnsignedInteger.valueOf(11747)) - .fee(XrpCurrencyAmount.ofDrops(10)) - .sequence(UnsignedInteger.ONE) - .amount(XrpCurrencyAmount.ofDrops(10000)) - .destination(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) - .destinationTag(UnsignedInteger.valueOf(23480)) - .settleDelay(UnsignedInteger.valueOf(86400)) - .publicKey("32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A") - .cancelAfter(UnsignedLong.valueOf(533171558)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"10\",\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"PaymentChannelCreate\",\n" + - " \"Amount\": \"10000\",\n" + - " \"Destination\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + - " \"SettleDelay\": 86400,\n" + - " \"PublicKey\": \"32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A\",\n" + - " \"CancelAfter\": 533171558,\n" + - " \"DestinationTag\": 23480,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"SourceTag\": 11747\n" + - "}"; - - assertCanSerializeAndDeserialize(create, json); - } - - @Test - public void testPaymentChannelClaimJson() throws JsonProcessingException, JSONException { - PaymentChannelClaim claim = PaymentChannelClaim.builder() - .account(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) - .fee(XrpCurrencyAmount.ofDrops(10)) - .sequence(UnsignedInteger.ONE) - .channel(Hash256.of("C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198")) - .balance(XrpCurrencyAmount.ofDrops(1000000)) - .amount(XrpCurrencyAmount.ofDrops(1000000)) - .signature("30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E721B420C0DAB02203A5A4779E" + - "F4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA3CD7B9B") - .publicKey("32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A") - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .build(); - - String json = "{\n" + - " \"Account\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + - " \"Fee\": \"10\",\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"PaymentChannelClaim\",\n" + - " \"Channel\": \"C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198\",\n" + - " \"Balance\": \"1000000\",\n" + - " \"Amount\": \"1000000\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Signature\": \"30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E721B420C0DAB02203A5A4" + - "779EF4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA3CD7B9B\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"PublicKey\": \"32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A\"\n" + - "}"; - assertCanSerializeAndDeserialize(claim, json); - } - - @Test - public void testPaymentChannelClaimJsonWithFlags() throws JsonProcessingException, JSONException { - PaymentChannelClaim claim = PaymentChannelClaim.builder() - .account(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) - .fee(XrpCurrencyAmount.ofDrops(10)) - .sequence(UnsignedInteger.ONE) - .flags(PaymentChannelClaimFlags.builder().tfClose(true).build()) - .channel(Hash256.of("C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198")) - .balance(XrpCurrencyAmount.ofDrops(1000000)) - .amount(XrpCurrencyAmount.ofDrops(1000000)) - .signature("30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E721B420C0DAB02203A5A4779E" + - "F4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA3CD7B9B") - .publicKey("32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A") - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .build(); - - String json = "{\n" + - " \"Account\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + - " \"Fee\": \"10\",\n" + - " \"Sequence\": 1,\n" + - " \"Flags\": 2147614720,\n" + - " \"TransactionType\": \"PaymentChannelClaim\",\n" + - " \"Channel\": \"C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198\",\n" + - " \"Balance\": \"1000000\",\n" + - " \"Amount\": \"1000000\",\n" + - " \"Signature\": \"30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E721B420C0DAB02203A5A4" + - "779EF4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA3CD7B9B\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"PublicKey\": \"32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A\"\n" + - "}"; - assertCanSerializeAndDeserialize(claim, json); - } - - @Test - public void testPaymentChannelClaimJsonWithUnknownFields() throws JsonProcessingException, JSONException { - PaymentChannelClaim claim = PaymentChannelClaim.builder() - .account(Address.of("rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW")) - .fee(XrpCurrencyAmount.ofDrops(10)) - .sequence(UnsignedInteger.ONE) - .channel(Hash256.of("C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198")) - .balance(XrpCurrencyAmount.ofDrops(1000000)) - .amount(XrpCurrencyAmount.ofDrops(1000000)) - .signature("30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E721B420C0DAB02203A5A4779E" + - "F4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA3CD7B9B") - .publicKey("32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A") - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"Account\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + - " \"Fee\": \"10\",\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"PaymentChannelClaim\",\n" + - " \"Channel\": \"C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198\",\n" + - " \"Balance\": \"1000000\",\n" + - " \"Amount\": \"1000000\",\n" + - " \"NetworkID\": 1024,\n" + - " \"Signature\": \"30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E721B420C0DAB02203A5A4" + - "779EF4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA3CD7B9B\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"PublicKey\": \"32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A\"\n" + - "}"; - assertCanSerializeAndDeserialize(claim, json); - } - - @Test - public void testPaymentChannelFundJson() throws JsonProcessingException, JSONException { - PaymentChannelFund fund = PaymentChannelFund.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(10)) - .sequence(UnsignedInteger.ONE) - .channel(Hash256.of("C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198")) - .amount(XrpCurrencyAmount.ofDrops(200000)) - .expiration(UnsignedLong.valueOf(543171558)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .build(); - - String json = "{\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"10\",\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"PaymentChannelFund\",\n" + - " \"Channel\": \"C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198\",\n" + - " \"Amount\": \"200000\",\n" + - " \"NetworkID\": 1024,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Expiration\": 543171558\n" + - "}"; - - assertCanSerializeAndDeserialize(fund, json); - } - - @Test - public void testPaymentChannelFundJsonWithUnsetFlags() throws JsonProcessingException, JSONException { - PaymentChannelFund fund = PaymentChannelFund.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(10)) - .sequence(UnsignedInteger.ONE) - .channel(Hash256.of("C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198")) - .amount(XrpCurrencyAmount.ofDrops(200000)) - .expiration(UnsignedLong.valueOf(543171558)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.UNSET) - .build(); - - String json = "{\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"10\",\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"PaymentChannelFund\",\n" + - " \"Channel\": \"C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198\",\n" + - " \"Amount\": \"200000\",\n" + - " \"Flags\": 0,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Expiration\": 543171558\n" + - "}"; - - assertCanSerializeAndDeserialize(fund, json); - } - - @Test - public void testPaymentChannelFundJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { - PaymentChannelFund fund = PaymentChannelFund.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(10)) - .sequence(UnsignedInteger.ONE) - .channel(Hash256.of("C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198")) - .amount(XrpCurrencyAmount.ofDrops(200000)) - .expiration(UnsignedLong.valueOf(543171558)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.FULLY_CANONICAL_SIG) - .build(); - - String json = String.format("{\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"10\",\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"PaymentChannelFund\",\n" + - " \"Channel\": \"C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198\",\n" + - " \"Amount\": \"200000\",\n" + - " \"Flags\": %s,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Expiration\": 543171558\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); - - assertCanSerializeAndDeserialize(fund, json); - } - - @Test - public void testPaymentChannelFundJsonWithUnknownFields() throws JsonProcessingException, JSONException { - PaymentChannelFund fund = PaymentChannelFund.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(10)) - .sequence(UnsignedInteger.ONE) - .channel(Hash256.of("C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198")) - .amount(XrpCurrencyAmount.ofDrops(200000)) - .expiration(UnsignedLong.valueOf(543171558)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"10\",\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"PaymentChannelFund\",\n" + - " \"Channel\": \"C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198\",\n" + - " \"Amount\": \"200000\",\n" + - " \"NetworkID\": 1024,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Expiration\": 543171558\n" + - "}"; - - assertCanSerializeAndDeserialize(fund, json); - } -} diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/PaymentJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/PaymentJsonTests.java index 16b2f7543..cbe48c40a 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/PaymentJsonTests.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/PaymentJsonTests.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -26,23 +26,36 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.xrpl.xrpl4j.crypto.keys.PublicKey; -import org.xrpl.xrpl4j.model.AbstractJsonTest; import org.xrpl.xrpl4j.model.flags.PaymentFlags; import org.xrpl.xrpl4j.model.flags.TransactionFlags; import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.ImmutablePayment; import org.xrpl.xrpl4j.model.transactions.IssuedCurrencyAmount; import org.xrpl.xrpl4j.model.transactions.NetworkId; import org.xrpl.xrpl4j.model.transactions.PathStep; import org.xrpl.xrpl4j.model.transactions.Payment; +import org.xrpl.xrpl4j.model.transactions.TransactionType; import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; -// FIXME: These tests should probably be replaced with a parameterized test that loads in payment json examples from -// a file. Will do this after merging with Neil's initial codec pass. -public class PaymentJsonTests extends AbstractJsonTest { +public class PaymentJsonTests + extends AbstractTransactionJsonTest { - @Test - public void testJson() throws JsonProcessingException, JSONException { - Payment payment = Payment.builder() + /** + * No-args Constructor. + */ + protected PaymentJsonTests() { + super(Payment.class, ImmutablePayment.class, TransactionType.PAYMENT); + } + + + @Override + protected ImmutablePayment.Builder builder() { + return ImmutablePayment.builder(); + } + + @Override + protected Payment fullyPopulatedTransaction() { + return Payment.builder() .account(Address.of("r9TeThyi5xiuUUrFjtPKZiHcDxs7K9H6Rb")) .destination(Address.of("r4BPgS7DHebQiU31xWELvZawwSG2fSPJ7C")) .amount(XrpCurrencyAmount.ofDrops(25000000)) @@ -54,48 +67,70 @@ public void testJson() throws JsonProcessingException, JSONException { ) .networkId(NetworkId.of(1024)) .build(); - - String json = "{\n" + - " \"Account\": \"r9TeThyi5xiuUUrFjtPKZiHcDxs7K9H6Rb\",\n" + - " \"Destination\": \"r4BPgS7DHebQiU31xWELvZawwSG2fSPJ7C\",\n" + - " \"TransactionType\": \"Payment\",\n" + - " \"Amount\": \"25000000\",\n" + - " \"Fee\": \"10\",\n" + - " \"Flags\": 0,\n" + - " \"NetworkID\": 1024,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Sequence\": 2\n" + - " }"; - - assertCanSerializeAndDeserialize(payment, json); } - @Test - public void testJsonWithFlags() throws JsonProcessingException, JSONException { + @Override + protected Payment fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); + } - Payment payment = Payment.builder() + @Override + protected Payment minimallyPopulatedTransaction() { + return Payment.builder() .account(Address.of("r9TeThyi5xiuUUrFjtPKZiHcDxs7K9H6Rb")) .destination(Address.of("r4BPgS7DHebQiU31xWELvZawwSG2fSPJ7C")) .amount(XrpCurrencyAmount.ofDrops(25000000)) .fee(XrpCurrencyAmount.ofDrops(10)) - .sequence(UnsignedInteger.valueOf(2)) - .flags(PaymentFlags.of(TransactionFlags.FULLY_CANONICAL_SIG.getValue())) .signingPublicKey( PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") ) .build(); + } - String json = "{\n" + - " \"Account\": \"r9TeThyi5xiuUUrFjtPKZiHcDxs7K9H6Rb\",\n" + - " \"Destination\": \"r4BPgS7DHebQiU31xWELvZawwSG2fSPJ7C\",\n" + - " \"TransactionType\": \"Payment\",\n" + - " \"Amount\": \"25000000\",\n" + - " \"Fee\": \"10\",\n" + - " \"Flags\": 2147483648,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Sequence\": 2\n" + - " }"; + @Test + public void testJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Account\": \"r9TeThyi5xiuUUrFjtPKZiHcDxs7K9H6Rb\",\n" + + " \"Destination\": \"r4BPgS7DHebQiU31xWELvZawwSG2fSPJ7C\",\n" + + " \"TransactionType\": \"Payment\",\n" + + " \"Amount\": \"25000000\",\n" + + " \"Fee\": \"10\",\n" + + " \"Flags\": 0,\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Sequence\": 2\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransaction(), json); + } + @Test + public void testJsonWithFlags() throws JsonProcessingException, JSONException { + PaymentFlags flags = PaymentFlags.builder() + .tfPartialPayment(true) + .tfLimitQuality(true) + .tfNoDirectRipple(true) + .build(); + + Payment payment = builder().from(fullyPopulatedTransaction()) + .flags(flags) + .build(); + + String json = + "{\n" + + " \"Account\": \"r9TeThyi5xiuUUrFjtPKZiHcDxs7K9H6Rb\",\n" + + " \"Amount\": \"25000000\",\n" + + " \"Destination\": \"r4BPgS7DHebQiU31xWELvZawwSG2fSPJ7C\",\n" + + " \"Fee\": \"10\",\n" + + " \"Flags\": 2147942400,\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Sequence\": 2,\n" + + " \"TransactionType\": \"Payment\"\n" + + "}"; assertCanSerializeAndDeserialize(payment, json); } @@ -131,62 +166,50 @@ public void testComplicatedJson() throws JsonProcessingException, JSONException ) .build(); - String json = "{\n" + - " \"Account\": \"rHXUjUtk5eiPFYpg27izxHeZ1t4x835Ecn\",\n" + - " \"Destination\": \"r45dBj4S3VvMMYXxr9vHX4Z4Ma6ifPMCkK\",\n" + - " \"TransactionType\": \"Payment\",\n" + - " \"Amount\": {\n" + - " \"currency\": \"CNY\",\n" + - " \"value\": \"5000\",\n" + - " \"issuer\": \"r45dBj4S3VvMMYXxr9vHX4Z4Ma6ifPMCkK\"\n" + - " },\n" + - " \"Fee\": \"12\",\n" + - " \"SendMax\": {\n" + - " \"currency\": \"CNY\",\n" + - " \"value\": \"5050\",\n" + - " \"issuer\": \"rHXUjUtk5eiPFYpg27izxHeZ1t4x835Ecn\"\n" + - " },\n" + - " \"Flags\": 2147483648,\n" + - " \"Sequence\": 6,\n" + - " \"Paths\": [[{\n" + - " \"account\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\"\n" + - " }]],\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"DestinationTag\": 736049272\n" + - " }"; + String json = + "{\n" + + " \"Account\": \"rHXUjUtk5eiPFYpg27izxHeZ1t4x835Ecn\",\n" + + " \"Destination\": \"r45dBj4S3VvMMYXxr9vHX4Z4Ma6ifPMCkK\",\n" + + " \"TransactionType\": \"Payment\",\n" + + " \"Amount\": {\n" + + " \"currency\": \"CNY\",\n" + + " \"value\": \"5000\",\n" + + " \"issuer\": \"r45dBj4S3VvMMYXxr9vHX4Z4Ma6ifPMCkK\"\n" + + " },\n" + + " \"Fee\": \"12\",\n" + + " \"SendMax\": {\n" + + " \"currency\": \"CNY\",\n" + + " \"value\": \"5050\",\n" + + " \"issuer\": \"rHXUjUtk5eiPFYpg27izxHeZ1t4x835Ecn\"\n" + + " },\n" + + " \"Flags\": 2147483648,\n" + + " \"Sequence\": 6,\n" + + " \"Paths\": [[{\n" + + " \"account\": \"razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA\"\n" + + " }]],\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"DestinationTag\": 736049272\n" + + "}"; assertCanSerializeAndDeserialize(payment, json); } @Test public void testJsonWithUnknownFields() throws JsonProcessingException, JSONException { - Payment payment = Payment.builder() - .account(Address.of("r9TeThyi5xiuUUrFjtPKZiHcDxs7K9H6Rb")) - .destination(Address.of("r4BPgS7DHebQiU31xWELvZawwSG2fSPJ7C")) - .amount(XrpCurrencyAmount.ofDrops(25000000)) - .fee(XrpCurrencyAmount.ofDrops(10)) - .flags(PaymentFlags.UNSET) - .sequence(UnsignedInteger.valueOf(2)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"Account\": \"r9TeThyi5xiuUUrFjtPKZiHcDxs7K9H6Rb\",\n" + - " \"Destination\": \"r4BPgS7DHebQiU31xWELvZawwSG2fSPJ7C\",\n" + - " \"TransactionType\": \"Payment\",\n" + - " \"Amount\": \"25000000\",\n" + - " \"Fee\": \"10\",\n" + - " \"Flags\": 0,\n" + - " \"NetworkID\": 1024,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"Sequence\": 2\n" + - " }"; - - assertCanSerializeAndDeserialize(payment, json); + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"Account\": \"r9TeThyi5xiuUUrFjtPKZiHcDxs7K9H6Rb\",\n" + + " \"Destination\": \"r4BPgS7DHebQiU31xWELvZawwSG2fSPJ7C\",\n" + + " \"TransactionType\": \"Payment\",\n" + + " \"Amount\": \"25000000\",\n" + + " \"Fee\": \"10\",\n" + + " \"Flags\": 0,\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"Sequence\": 2\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); } } diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/SetRegularKeyJsonTest.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/SetRegularKeyJsonTest.java index 074f8984c..b5b9c1fab 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/SetRegularKeyJsonTest.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/SetRegularKeyJsonTest.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -25,18 +25,33 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.xrpl.xrpl4j.crypto.keys.PublicKey; -import org.xrpl.xrpl4j.model.AbstractJsonTest; import org.xrpl.xrpl4j.model.flags.TransactionFlags; import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.ImmutableSetRegularKey; import org.xrpl.xrpl4j.model.transactions.NetworkId; import org.xrpl.xrpl4j.model.transactions.SetRegularKey; +import org.xrpl.xrpl4j.model.transactions.TransactionType; import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; -public class SetRegularKeyJsonTest extends AbstractJsonTest { +public class SetRegularKeyJsonTest + extends AbstractTransactionJsonTest { - @Test - public void testSetRegularKeyJson() throws JsonProcessingException, JSONException { - SetRegularKey setRegularKey = SetRegularKey.builder() + /** + * No-args Constructor. + */ + protected SetRegularKeyJsonTest() { + super(SetRegularKey.class, ImmutableSetRegularKey.class, TransactionType.SET_REGULAR_KEY); + } + + + @Override + protected ImmutableSetRegularKey.Builder builder() { + return ImmutableSetRegularKey.builder(); + } + + @Override + protected SetRegularKey fullyPopulatedTransaction() { + return SetRegularKey.builder() .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) .fee(XrpCurrencyAmount.ofDrops(12)) .sequence(UnsignedInteger.ONE) @@ -46,70 +61,83 @@ public void testSetRegularKeyJson() throws JsonProcessingException, JSONExceptio ) .networkId(NetworkId.of(1024)) .build(); + } - String json = "{\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"SetRegularKey\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"RegularKey\": \"rAR8rR8sUkBoCZFawhkWzY4Y5YoyuznwD\"\n" + - "}"; - - assertCanSerializeAndDeserialize(setRegularKey, json); + @Override + protected SetRegularKey fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); } - @Test - public void testSetRegularKeyJsonWithUnsetFlags() throws JsonProcessingException, JSONException { - SetRegularKey setRegularKey = SetRegularKey.builder() + @Override + protected SetRegularKey minimallyPopulatedTransaction() { + return SetRegularKey.builder() .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.ONE) - .regularKey(Address.of("rAR8rR8sUkBoCZFawhkWzY4Y5YoyuznwD")) .signingPublicKey( PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") ) + .build(); + } + + @Test + public void testSetRegularKeyJson() throws JsonProcessingException, JSONException { + + String json = + "{\n" + + " \"Sequence\": 1,\n" + + " \"TransactionType\": \"SetRegularKey\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"RegularKey\": \"rAR8rR8sUkBoCZFawhkWzY4Y5YoyuznwD\"\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransaction(), json); + } + + @Test + public void testSetRegularKeyJsonWithUnsetFlags() throws JsonProcessingException, JSONException { + SetRegularKey transaction = builder().from(fullyPopulatedTransaction()) .flags(TransactionFlags.UNSET) .build(); - String json = "{\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"SetRegularKey\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"Flags\": 0,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"RegularKey\": \"rAR8rR8sUkBoCZFawhkWzY4Y5YoyuznwD\"\n" + + String json = + "{\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"Flags\": 0,\n" + + " \"NetworkID\": 1024,\n" + + " \"RegularKey\": \"rAR8rR8sUkBoCZFawhkWzY4Y5YoyuznwD\",\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"TransactionType\": \"SetRegularKey\"\n" + "}"; - assertCanSerializeAndDeserialize(setRegularKey, json); + assertCanSerializeAndDeserialize(transaction, json); } @Test public void testSetRegularKeyJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { - SetRegularKey setRegularKey = SetRegularKey.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.ONE) - .regularKey(Address.of("rAR8rR8sUkBoCZFawhkWzY4Y5YoyuznwD")) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) + SetRegularKey transaction = builder().from(fullyPopulatedTransaction()) .flags(TransactionFlags.FULLY_CANONICAL_SIG) .build(); - String json = String.format("{\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"SetRegularKey\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"Flags\": %s,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"RegularKey\": \"rAR8rR8sUkBoCZFawhkWzY4Y5YoyuznwD\"\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); - - assertCanSerializeAndDeserialize(setRegularKey, json); + String json = + "{\n" + + " \"Sequence\": 1,\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"Flags\": " + TransactionFlags.FULLY_CANONICAL_SIG.getValue() + ",\n" + + " \"RegularKey\": \"rAR8rR8sUkBoCZFawhkWzY4Y5YoyuznwD\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"TransactionType\": \"SetRegularKey\"\n" + + "}"; + + assertCanSerializeAndDeserialize(transaction, json); } @Test @@ -126,17 +154,18 @@ public void testJsonWithUnknownFields() throws JsonProcessingException, JSONExce .putUnknownFields("Foo", "Bar") .build(); - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"SetRegularKey\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"NetworkID\": 1024,\n" + - " \"RegularKey\": \"rAR8rR8sUkBoCZFawhkWzY4Y5YoyuznwD\"\n" + + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"NetworkID\": 1024,\n" + + " \"RegularKey\": \"rAR8rR8sUkBoCZFawhkWzY4Y5YoyuznwD\",\n" + + " \"Sequence\": 1,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"TransactionType\": \"SetRegularKey\"\n" + "}"; - assertCanSerializeAndDeserialize(setRegularKey, json); + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); } } diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/SignerListSetJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/SignerListSetJsonTests.java index c59eef731..1479edcff 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/SignerListSetJsonTests.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/SignerListSetJsonTests.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -25,20 +25,34 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.xrpl.xrpl4j.crypto.keys.PublicKey; -import org.xrpl.xrpl4j.model.AbstractJsonTest; import org.xrpl.xrpl4j.model.flags.TransactionFlags; import org.xrpl.xrpl4j.model.ledger.SignerEntry; import org.xrpl.xrpl4j.model.ledger.SignerEntryWrapper; import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.ImmutableSignerListSet; import org.xrpl.xrpl4j.model.transactions.NetworkId; import org.xrpl.xrpl4j.model.transactions.SignerListSet; +import org.xrpl.xrpl4j.model.transactions.TransactionType; import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; -public class SignerListSetJsonTests extends AbstractJsonTest { +public class SignerListSetJsonTests + extends AbstractTransactionJsonTest { - @Test - public void testSignerListSetJson() throws JsonProcessingException, JSONException { - SignerListSet signerListSet = SignerListSet.builder() + /** + * No-args Constructor. + */ + protected SignerListSetJsonTests() { + super(SignerListSet.class, ImmutableSignerListSet.class, TransactionType.SIGNER_LIST_SET); + } + + @Override + protected ImmutableSignerListSet.Builder builder() { + return ImmutableSignerListSet.builder(); + } + + @Override + protected SignerListSet fullyPopulatedTransaction() { + return SignerListSet.builder() .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) .fee(XrpCurrencyAmount.ofDrops(12)) .sequence(UnsignedInteger.ONE) @@ -68,16 +82,39 @@ public void testSignerListSetJson() throws JsonProcessingException, JSONExceptio ) .networkId(NetworkId.of(1024)) .build(); + } - String json = "{\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"SignerListSet\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"SignerQuorum\": 3,\n" + - " \"NetworkID\": 1024,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"SignerEntries\": [\n" + + @Override + protected SignerListSet fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); + } + + @Override + protected SignerListSet minimallyPopulatedTransaction() { + return SignerListSet.builder() + .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) + .fee(XrpCurrencyAmount.ofDrops(12)) + .signerQuorum(UnsignedInteger.valueOf(3)) + .signingPublicKey( + PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") + ) + .build(); + } + + @Test + public void testSignerListSetJson() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Sequence\": 1,\n" + + " \"TransactionType\": \"SignerListSet\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"SignerQuorum\": 3,\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"SignerEntries\": [\n" + " {\n" + " \"SignerEntry\": {\n" + " \"Account\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + @@ -99,7 +136,7 @@ public void testSignerListSetJson() throws JsonProcessingException, JSONExceptio " ]\n" + "}"; - assertCanSerializeAndDeserialize(signerListSet, json); + assertCanSerializeAndDeserialize(fullyPopulatedTransaction(), json); } @Test @@ -109,18 +146,21 @@ public void testSignerListSetForDeleteJson() throws JsonProcessingException, JSO .fee(XrpCurrencyAmount.ofDrops(12)) .sequence(UnsignedInteger.ONE) .signerQuorum(UnsignedInteger.ZERO) + .networkId(NetworkId.of(1024)) .signingPublicKey( PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") ) .build(); - String json = "{\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"SignerListSet\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"SignerQuorum\": 0\n" + + String json = + "{\n" + + " \"Sequence\": 1,\n" + + " \"TransactionType\": \"SignerListSet\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"SignerQuorum\": 0\n" + "}"; assertCanSerializeAndDeserialize(signerListSet, json); @@ -128,83 +168,122 @@ public void testSignerListSetForDeleteJson() throws JsonProcessingException, JSO @Test public void testSignerListSetJsonWithUnsetFlags() throws JsonProcessingException, JSONException { - SignerListSet signerListSet = SignerListSet.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.ONE) - .signerQuorum(UnsignedInteger.ZERO) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) + SignerListSet transaction = builder().from(fullyPopulatedTransaction()) .flags(TransactionFlags.UNSET) .build(); - String json = "{\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"SignerListSet\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"Flags\": 0,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"SignerQuorum\": 0\n" + + String json = + "{\n" + + " \"Sequence\": 1,\n" + + " \"TransactionType\": \"SignerListSet\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"Flags\": 0,\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"SignerEntries\": [\n" + + " {\n" + + " \"SignerEntry\": {\n" + + " \"Account\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + + " \"SignerWeight\": 2\n" + + " }\n" + + " },\n" + + " {\n" + + " \"SignerEntry\": {\n" + + " \"Account\": \"rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v\",\n" + + " \"SignerWeight\": 1\n" + + " }\n" + + " },\n" + + " {\n" + + " \"SignerEntry\": {\n" + + " \"Account\": \"raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n\",\n" + + " \"SignerWeight\": 1\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"SignerQuorum\": 3\n" + "}"; - assertCanSerializeAndDeserialize(signerListSet, json); + assertCanSerializeAndDeserialize(transaction, json); } @Test public void testSignerListSetJsonWithNonZeroFlags() throws JsonProcessingException, JSONException { - SignerListSet signerListSet = SignerListSet.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.ONE) - .signerQuorum(UnsignedInteger.ZERO) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) + + SignerListSet transaction = builder().from(fullyPopulatedTransaction()) .flags(TransactionFlags.FULLY_CANONICAL_SIG) .build(); - String json = String.format("{\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"SignerListSet\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"Flags\": %s,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"SignerQuorum\": 0\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); + String json = + "{\n" + + " \"Sequence\": 1,\n" + + " \"TransactionType\": \"SignerListSet\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"NetworkID\": 1024,\n" + + " \"Flags\": " + TransactionFlags.FULLY_CANONICAL_SIG.getValue() + ",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"SignerEntries\": [\n" + + " {\n" + + " \"SignerEntry\": {\n" + + " \"Account\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + + " \"SignerWeight\": 2\n" + + " }\n" + + " },\n" + + " {\n" + + " \"SignerEntry\": {\n" + + " \"Account\": \"rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v\",\n" + + " \"SignerWeight\": 1\n" + + " }\n" + + " },\n" + + " {\n" + + " \"SignerEntry\": {\n" + + " \"Account\": \"raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n\",\n" + + " \"SignerWeight\": 1\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"SignerQuorum\": 3\n" + + "}"; - assertCanSerializeAndDeserialize(signerListSet, json); + assertCanSerializeAndDeserialize(transaction, json); } @Test - public void testSignerListSetJsonWithNonZeroFlagstestJsonWithUnknownFields() - throws JsonProcessingException, JSONException { - SignerListSet signerListSet = SignerListSet.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.ONE) - .signerQuorum(UnsignedInteger.ZERO) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .flags(TransactionFlags.FULLY_CANONICAL_SIG) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = String.format("{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"Sequence\": 1,\n" + - " \"TransactionType\": \"SignerListSet\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"Flags\": %s,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"SignerQuorum\": 0\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); + public void testSignerListSetJsonWithNonZeroFlagsWithUnknownFields() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"Sequence\": 1,\n" + + " \"TransactionType\": \"SignerListSet\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"SignerEntries\": [\n" + + " {\n" + + " \"SignerEntry\": {\n" + + " \"Account\": \"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW\",\n" + + " \"SignerWeight\": 2\n" + + " }\n" + + " },\n" + + " {\n" + + " \"SignerEntry\": {\n" + + " \"Account\": \"rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v\",\n" + + " \"SignerWeight\": 1\n" + + " }\n" + + " },\n" + + " {\n" + + " \"SignerEntry\": {\n" + + " \"Account\": \"raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n\",\n" + + " \"SignerWeight\": 1\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"SignerQuorum\": 3\n" + + "}"; - assertCanSerializeAndDeserialize(signerListSet, json); + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); } } diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/TicketCreateJsonTest.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/TicketCreateJsonTest.java index f7ea93204..ff05203e6 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/TicketCreateJsonTest.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/TicketCreateJsonTest.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -25,18 +25,33 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.xrpl.xrpl4j.crypto.keys.PublicKey; -import org.xrpl.xrpl4j.model.AbstractJsonTest; import org.xrpl.xrpl4j.model.flags.TransactionFlags; import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.ImmutableTicketCreate; import org.xrpl.xrpl4j.model.transactions.NetworkId; import org.xrpl.xrpl4j.model.transactions.TicketCreate; +import org.xrpl.xrpl4j.model.transactions.TransactionType; import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; -class TicketCreateJsonTest extends AbstractJsonTest { +class TicketCreateJsonTest + extends AbstractTransactionJsonTest { - @Test - void testJson() throws JSONException, JsonProcessingException { - TicketCreate ticketCreate = TicketCreate.builder() + /** + * No-args Constructor. + */ + protected TicketCreateJsonTest() { + super(TicketCreate.class, ImmutableTicketCreate.class, TransactionType.TICKET_CREATE); + } + + + @Override + protected ImmutableTicketCreate.Builder builder() { + return ImmutableTicketCreate.builder(); + } + + @Override + protected TicketCreate fullyPopulatedTransaction() { + return TicketCreate.builder() .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) .fee(XrpCurrencyAmount.ofDrops(12)) .sequence(UnsignedInteger.ONE) @@ -46,41 +61,59 @@ void testJson() throws JSONException, JsonProcessingException { ) .networkId(NetworkId.of(1024)) .build(); + } - String json = "{\n" + - " \"TransactionType\": \"TicketCreate\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 1,\n" + - " \"NetworkID\": 1024,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"TicketCount\": 200\n" + - "}"; - - assertCanSerializeAndDeserialize(ticketCreate, json); + @Override + protected TicketCreate fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); } - @Test - void testJsonWithUnsetFlags() throws JSONException, JsonProcessingException { - TicketCreate ticketCreate = TicketCreate.builder() + @Override + protected TicketCreate minimallyPopulatedTransaction() { + return TicketCreate.builder() .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.ONE) .ticketCount(UnsignedInteger.valueOf(200)) .signingPublicKey( PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") ) + .build(); + } + + @Test + void testJson() throws JSONException, JsonProcessingException { + String json = + "{\n" + + " \"TransactionType\": \"TicketCreate\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 1,\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"TicketCount\": 200\n" + + "}"; + + assertCanSerializeAndDeserialize(fullyPopulatedTransaction(), json); + } + + @Test + void testJsonWithUnsetFlags() throws JSONException, JsonProcessingException { + TicketCreate ticketCreate = builder().from(fullyPopulatedTransaction()) .flags(TransactionFlags.UNSET) .build(); - String json = "{\n" + - " \"TransactionType\": \"TicketCreate\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 1,\n" + - " \"Flags\": 0,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"TicketCount\": 200\n" + + String json = + "{\n" + + " \"TransactionType\": \"TicketCreate\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 1,\n" + + " \"Flags\": 0,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"NetworkID\": 1024,\n" + + " \"TicketCount\": 200\n" + "}"; assertCanSerializeAndDeserialize(ticketCreate, json); @@ -88,55 +121,40 @@ void testJsonWithUnsetFlags() throws JSONException, JsonProcessingException { @Test void testJsonWithNonZeroFlags() throws JSONException, JsonProcessingException { - TicketCreate ticketCreate = TicketCreate.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.ONE) - .ticketCount(UnsignedInteger.valueOf(200)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) + TicketCreate ticketCreate = builder().from(fullyPopulatedTransaction()) .flags(TransactionFlags.FULLY_CANONICAL_SIG) .build(); - String json = String.format("{\n" + - " \"TransactionType\": \"TicketCreate\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 1,\n" + - " \"Flags\": %s,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"TicketCount\": 200\n" + - "}", TransactionFlags.FULLY_CANONICAL_SIG.getValue()); + String json = + "{\n" + + " \"TransactionType\": \"TicketCreate\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 1,\n" + + " \"Flags\": " + TransactionFlags.FULLY_CANONICAL_SIG.getValue() + ",\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"TicketCount\": 200\n" + + "}"; assertCanSerializeAndDeserialize(ticketCreate, json); } @Test void testJsonWithUnknownFields() throws JSONException, JsonProcessingException { - TicketCreate ticketCreate = TicketCreate.builder() - .account(Address.of("rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.ONE) - .ticketCount(UnsignedInteger.valueOf(200)) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"TransactionType\": \"TicketCreate\",\n" + - " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + - " \"Fee\": \"12\",\n" + - " \"Sequence\": 1,\n" + - " \"NetworkID\": 1024,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"TicketCount\": 200\n" + + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"TransactionType\": \"TicketCreate\",\n" + + " \"Account\": \"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn\",\n" + + " \"Fee\": \"12\",\n" + + " \"Sequence\": 1,\n" + + " \"NetworkID\": 1024,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"TicketCount\": 200\n" + "}"; - assertCanSerializeAndDeserialize(ticketCreate, json); + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); } } diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/TrustSetJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/TrustSetJsonTests.java index 09452f983..9d59adf26 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/TrustSetJsonTests.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/TrustSetJsonTests.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -25,19 +25,33 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.xrpl.xrpl4j.crypto.keys.PublicKey; -import org.xrpl.xrpl4j.model.AbstractJsonTest; import org.xrpl.xrpl4j.model.flags.TrustSetFlags; import org.xrpl.xrpl4j.model.transactions.Address; +import org.xrpl.xrpl4j.model.transactions.ImmutableTrustSet; import org.xrpl.xrpl4j.model.transactions.IssuedCurrencyAmount; import org.xrpl.xrpl4j.model.transactions.NetworkId; +import org.xrpl.xrpl4j.model.transactions.TransactionType; import org.xrpl.xrpl4j.model.transactions.TrustSet; import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; -public class TrustSetJsonTests extends AbstractJsonTest { +public class TrustSetJsonTests + extends AbstractTransactionJsonTest { - @Test - public void testMinimalTrustSetJson() throws JsonProcessingException, JSONException { - TrustSet trustSet = TrustSet.builder() + /** + * No-args Constructor. + */ + protected TrustSetJsonTests() { + super(TrustSet.class, ImmutableTrustSet.class, TransactionType.TRUST_SET); + } + + @Override + protected ImmutableTrustSet.Builder builder() { + return ImmutableTrustSet.builder(); + } + + @Override + protected TrustSet fullyPopulatedTransaction() { + return TrustSet.builder() .account(Address.of("ra5nK24KXen9AHvsdFTKHSANinZseWnPcX")) .fee(XrpCurrencyAmount.ofDrops(12)) .flags(TrustSetFlags.builder() @@ -54,31 +68,20 @@ public void testMinimalTrustSetJson() throws JsonProcessingException, JSONExcept ) .networkId(NetworkId.of(1024)) .build(); + } - String json = "{\n" + - " \"TransactionType\": \"TrustSet\",\n" + - " \"Account\": \"ra5nK24KXen9AHvsdFTKHSANinZseWnPcX\",\n" + - " \"Fee\": \"12\",\n" + - " \"Flags\": 2147745792,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"LimitAmount\": {\n" + - " \"currency\": \"USD\",\n" + - " \"issuer\": \"rsP3mgGb2tcYUrxiLFiHJiQXhsziegtwBc\",\n" + - " \"value\": \"100\"\n" + - " },\n" + - " \"NetworkID\": 1024,\n" + - " \"Sequence\": 12\n" + - "}"; - - assertCanSerializeAndDeserialize(trustSet, json); + @Override + protected TrustSet fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); } - @Test - public void testMinimalTrustSetJsonWithoutFlags() throws JsonProcessingException, JSONException { - TrustSet trustSet = TrustSet.builder() + @Override + protected TrustSet minimallyPopulatedTransaction() { + return TrustSet.builder() .account(Address.of("ra5nK24KXen9AHvsdFTKHSANinZseWnPcX")) .fee(XrpCurrencyAmount.ofDrops(12)) - .sequence(UnsignedInteger.valueOf(12)) .limitAmount(IssuedCurrencyAmount.builder() .currency("USD") .issuer(Address.of("rsP3mgGb2tcYUrxiLFiHJiQXhsziegtwBc")) @@ -88,23 +91,54 @@ public void testMinimalTrustSetJsonWithoutFlags() throws JsonProcessingException PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") ) .build(); + } + + @Test + public void testMinimalTrustSetJson() throws JsonProcessingException, JSONException { + + TrustSet trustSet = builder().from(minimallyPopulatedTransaction()) + .flags(TrustSetFlags.builder() + .tfClearNoRipple() + .build()) + .build(); - String json = "{\n" + - " \"TransactionType\": \"TrustSet\",\n" + - " \"Account\": \"ra5nK24KXen9AHvsdFTKHSANinZseWnPcX\",\n" + - " \"Fee\": \"12\",\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"LimitAmount\": {\n" + + String json = + "{\n" + + " \"TransactionType\": \"TrustSet\",\n" + + " \"Account\": \"ra5nK24KXen9AHvsdFTKHSANinZseWnPcX\",\n" + + " \"Fee\": \"12\",\n" + + " \"Flags\": 2147745792,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"LimitAmount\": {\n" + " \"currency\": \"USD\",\n" + " \"issuer\": \"rsP3mgGb2tcYUrxiLFiHJiQXhsziegtwBc\",\n" + " \"value\": \"100\"\n" + " },\n" + - " \"Sequence\": 12\n" + + " \"Sequence\": 0\n" + "}"; assertCanSerializeAndDeserialize(trustSet, json); } + @Test + public void testMinimalTrustSetJsonWithoutFlags() throws JsonProcessingException, JSONException { + String json = + "{\n" + + " \"TransactionType\": \"TrustSet\",\n" + + " \"Account\": \"ra5nK24KXen9AHvsdFTKHSANinZseWnPcX\",\n" + + " \"Fee\": \"12\",\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"LimitAmount\": {\n" + + " \"currency\": \"USD\",\n" + + " \"issuer\": \"rsP3mgGb2tcYUrxiLFiHJiQXhsziegtwBc\",\n" + + " \"value\": \"100\"\n" + + " },\n" + + " \"Sequence\": 0\n" + + "}"; + + assertCanSerializeAndDeserialize(minimallyPopulatedTransaction(), json); + } + @Test public void testTrustSetWithQualityJson() throws JsonProcessingException, JSONException { TrustSet trustSet = TrustSet.builder() @@ -126,20 +160,21 @@ public void testTrustSetWithQualityJson() throws JsonProcessingException, JSONEx ) .build(); - String json = "{\n" + - " \"TransactionType\": \"TrustSet\",\n" + - " \"Account\": \"ra5nK24KXen9AHvsdFTKHSANinZseWnPcX\",\n" + - " \"Fee\": \"12\",\n" + - " \"Flags\": 2147745792,\n" + - " \"LimitAmount\": {\n" + + String json = + "{\n" + + " \"TransactionType\": \"TrustSet\",\n" + + " \"Account\": \"ra5nK24KXen9AHvsdFTKHSANinZseWnPcX\",\n" + + " \"Fee\": \"12\",\n" + + " \"Flags\": 2147745792,\n" + + " \"LimitAmount\": {\n" + " \"currency\": \"USD\",\n" + " \"issuer\": \"rsP3mgGb2tcYUrxiLFiHJiQXhsziegtwBc\",\n" + " \"value\": \"100\"\n" + " },\n" + - " \"Sequence\": 12,\n" + - " \"QualityIn\": 100,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"QualityOut\": 100\n" + + " \"Sequence\": 12,\n" + + " \"QualityIn\": 100,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"QualityOut\": 100\n" + "}"; assertCanSerializeAndDeserialize(trustSet, json); @@ -147,41 +182,23 @@ public void testTrustSetWithQualityJson() throws JsonProcessingException, JSONEx @Test public void testJsonWithUnknownFields() throws JsonProcessingException, JSONException { - TrustSet trustSet = TrustSet.builder() - .account(Address.of("ra5nK24KXen9AHvsdFTKHSANinZseWnPcX")) - .fee(XrpCurrencyAmount.ofDrops(12)) - .flags(TrustSetFlags.builder() - .tfClearNoRipple() - .build()) - .sequence(UnsignedInteger.valueOf(12)) - .limitAmount(IssuedCurrencyAmount.builder() - .currency("USD") - .issuer(Address.of("rsP3mgGb2tcYUrxiLFiHJiQXhsziegtwBc")) - .value("100") - .build()) - .signingPublicKey( - PublicKey.fromBase16EncodedPublicKey("02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC") - ) - .networkId(NetworkId.of(1024)) - .putUnknownFields("Foo", "Bar") - .build(); - - String json = "{\n" + - " \"Foo\" : \"Bar\",\n" + - " \"TransactionType\": \"TrustSet\",\n" + - " \"Account\": \"ra5nK24KXen9AHvsdFTKHSANinZseWnPcX\",\n" + - " \"Fee\": \"12\",\n" + - " \"Flags\": 2147745792,\n" + - " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + - " \"LimitAmount\": {\n" + + String json = + "{\n" + + " \"Foo\" : \"Bar\",\n" + + " \"TransactionType\": \"TrustSet\",\n" + + " \"Account\": \"ra5nK24KXen9AHvsdFTKHSANinZseWnPcX\",\n" + + " \"Fee\": \"12\",\n" + + " \"Flags\": 2147745792,\n" + + " \"SigningPubKey\" : \"02356E89059A75438887F9FEE2056A2890DB82A68353BE9C0C0C8F89C0018B37FC\",\n" + + " \"LimitAmount\": {\n" + " \"currency\": \"USD\",\n" + " \"issuer\": \"rsP3mgGb2tcYUrxiLFiHJiQXhsziegtwBc\",\n" + " \"value\": \"100\"\n" + " },\n" + - " \"NetworkID\": 1024,\n" + - " \"Sequence\": 12\n" + + " \"NetworkID\": 1024,\n" + + " \"Sequence\": 12\n" + "}"; - assertCanSerializeAndDeserialize(trustSet, json); + assertCanSerializeAndDeserialize(fullyPopulatedTransactionWithUnknownFields(), json); } } diff --git a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/UnlModifyJsonTests.java b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/UnlModifyJsonTests.java index 7c295ade6..05b0e9a3e 100644 --- a/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/UnlModifyJsonTests.java +++ b/xrpl4j-core/src/test/java/org/xrpl/xrpl4j/model/transactions/json/UnlModifyJsonTests.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -20,19 +20,68 @@ * =========================LICENSE_END================================== */ +import static org.assertj.core.api.Assertions.assertThat; +import static org.xrpl.xrpl4j.model.AddressConstants.ACCOUNT_ZERO; + import com.fasterxml.jackson.core.JsonProcessingException; import com.google.common.primitives.UnsignedInteger; import org.json.JSONException; import org.junit.jupiter.api.Test; -import org.xrpl.xrpl4j.model.AbstractJsonTest; +import org.skyscreamer.jsonassert.JSONAssert; +import org.skyscreamer.jsonassert.JSONCompareMode; import org.xrpl.xrpl4j.model.client.common.LedgerIndex; +import org.xrpl.xrpl4j.model.transactions.ImmutableUnlModify; +import org.xrpl.xrpl4j.model.transactions.Transaction; +import org.xrpl.xrpl4j.model.transactions.TransactionType; import org.xrpl.xrpl4j.model.transactions.UnlModify; import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; -public class UnlModifyJsonTests extends AbstractJsonTest { +public class UnlModifyJsonTests + extends AbstractTransactionJsonTest { + + /** + * No-args Constructor. + */ + protected UnlModifyJsonTests() { + super(UnlModify.class, ImmutableUnlModify.class, TransactionType.UNL_MODIFY); + } + + @Override + protected ImmutableUnlModify.Builder builder() { + return ImmutableUnlModify.builder(); + } + + @Override + protected UnlModify fullyPopulatedTransaction() { + return UnlModify.builder() + .fee(XrpCurrencyAmount.ofDrops(12)) + .sequence(UnsignedInteger.valueOf(2470665)) + .ledgerSequence(LedgerIndex.of(UnsignedInteger.valueOf(67850752))) + .unlModifyValidator("EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539") + .unlModifyDisabling(UnsignedInteger.valueOf(1)) + .build(); + } + + @Override + protected UnlModify fullyPopulatedTransactionWithUnknownFields() { + return builder().from(fullyPopulatedTransaction()) + .putUnknownFields("Foo", "Bar") + .build(); + } + + @Override + protected UnlModify minimallyPopulatedTransaction() { + return UnlModify.builder() + .fee(XrpCurrencyAmount.ofDrops(12)) + .sequence(UnsignedInteger.valueOf(2470665)) + .ledgerSequence(LedgerIndex.of(UnsignedInteger.valueOf(67850752))) + .unlModifyValidator("EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539") + .unlModifyDisabling(UnsignedInteger.valueOf(1)) + .build(); + } @Test - public void testJson() throws JsonProcessingException, JSONException { + public void testJsonWithAccountZero() throws JsonProcessingException, JSONException { UnlModify unlModify = UnlModify.builder() .fee(XrpCurrencyAmount.ofDrops(12)) .sequence(UnsignedInteger.valueOf(2470665)) @@ -55,18 +104,18 @@ public void testJson() throws JsonProcessingException, JSONException { } @Test - public void testJsonWithUnknownFields() throws JsonProcessingException, JSONException { + public void testJsonWithAccountZeroAndUnknownFields() throws JsonProcessingException, JSONException { UnlModify unlModify = UnlModify.builder() + .putUnknownFields("Foo", "Bar") .fee(XrpCurrencyAmount.ofDrops(12)) .sequence(UnsignedInteger.valueOf(2470665)) .ledgerSequence(LedgerIndex.of(UnsignedInteger.valueOf(67850752))) .unlModifyValidator("EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539") .unlModifyDisabling(UnsignedInteger.valueOf(1)) - .putUnknownFields("Foo", "Bar") .build(); String json = "{" + - " \"Foo\" : \"Bar\",\n" + + "\"Foo\" : \"Bar\",\n" + "\"Account\":\"" + UnlModify.ACCOUNT_ZERO + "\"," + "\"Fee\":\"12\"," + "\"LedgerSequence\":67850752," + @@ -78,4 +127,175 @@ public void testJsonWithUnknownFields() throws JsonProcessingException, JSONExce assertCanSerializeAndDeserialize(unlModify, json); } + + @Test + public void testJsonWithEmptyAccount() throws JsonProcessingException, JSONException { + UnlModify unlModify = UnlModify.builder() + .fee(XrpCurrencyAmount.ofDrops(12)) + .sequence(UnsignedInteger.valueOf(2470665)) + .ledgerSequence(LedgerIndex.of(UnsignedInteger.valueOf(67850752))) + .unlModifyValidator("EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539") + .unlModifyDisabling(UnsignedInteger.valueOf(1)) + .build(); + + // What we expect the ObjectMapper to Serialize (given the above object) + String expectedSerializedJson = + "{" + + "\"Account\":\"" + ACCOUNT_ZERO + "\"," + + "\"Fee\":\"12\"," + + "\"LedgerSequence\":67850752," + + "\"Sequence\":2470665," + + "\"SigningPubKey\":\"\"," + + "\"TransactionType\":\"UNLModify\"," + + "\"UNLModifyDisabling\":1," + + "\"UNLModifyValidator\":\"EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539\"" + + "}"; + + String serialized = objectMapper.writeValueAsString(unlModify); + JSONAssert.assertEquals(expectedSerializedJson, serialized, JSONCompareMode.STRICT); + + // What we provide the ObjectMapper to Deserialize + String jsonForDeserialization = "{" + + "\"Account\":\"\"," + // <-- The crux of the test! + "\"Fee\":\"12\"," + + "\"LedgerSequence\":67850752," + + "\"Sequence\":2470665," + + "\"SigningPubKey\":\"\"," + + "\"TransactionType\":\"UNLModify\"," + + "\"UNLModifyDisabling\":1," + + "\"UNLModifyValidator\":\"EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539\"" + + "}"; + + Transaction deserialized = objectMapper.readValue(jsonForDeserialization, Transaction.class); + assertThat(deserialized).isEqualTo(unlModify); + } + + @Test + public void testJsonWithEmptyAccountAndUnknownFields() throws JsonProcessingException, JSONException { + UnlModify unlModify = UnlModify.builder() + .putUnknownFields("Foo", "Bar") + .fee(XrpCurrencyAmount.ofDrops(12)) + .sequence(UnsignedInteger.valueOf(2470665)) + .ledgerSequence(LedgerIndex.of(UnsignedInteger.valueOf(67850752))) + .unlModifyValidator("EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539") + .unlModifyDisabling(UnsignedInteger.valueOf(1)) + .build(); + + // What we expect the ObjectMapper to Serialize (given the above object) + String expectedSerializedJson = "{" + + "\"Account\":\"" + ACCOUNT_ZERO + "\"," + + "\"Foo\" : \"Bar\",\n" + // <-- The crux of the test! + "\"Fee\":\"12\"," + + "\"LedgerSequence\":67850752," + + "\"Sequence\":2470665," + + "\"SigningPubKey\":\"\"," + + "\"TransactionType\":\"UNLModify\"," + + "\"UNLModifyDisabling\":1," + + "\"UNLModifyValidator\":\"EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539\"" + + "}"; + + String serialized = objectMapper.writeValueAsString(unlModify); + JSONAssert.assertEquals(expectedSerializedJson, serialized, JSONCompareMode.STRICT); + + // What we provide the ObjectMapper to Deserialize + String jsonForDeserialization = "{" + + "\"Foo\" : \"Bar\",\n" + // <-- The crux of the test! + "\"Account\":\"\"," + // <-- The crux of the test! + "\"Fee\":\"12\"," + + "\"LedgerSequence\":67850752," + + "\"Sequence\":2470665," + + "\"SigningPubKey\":\"\"," + + "\"TransactionType\":\"UNLModify\"," + + "\"UNLModifyDisabling\":1," + + "\"UNLModifyValidator\":\"EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539\"" + + "}"; + + Transaction deserialized = objectMapper.readValue(jsonForDeserialization, Transaction.class); + assertThat(deserialized).isEqualTo(unlModify); + } + + @Test + public void testJsonWithMissingAccount() throws JsonProcessingException, JSONException { + UnlModify unlModify = UnlModify.builder() + .fee(XrpCurrencyAmount.ofDrops(12)) + .sequence(UnsignedInteger.valueOf(2470665)) + .ledgerSequence(LedgerIndex.of(UnsignedInteger.valueOf(67850752))) + .unlModifyValidator("EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539") + .unlModifyDisabling(UnsignedInteger.valueOf(1)) + .build(); + + // What we expect the ObjectMapper to Serialize (given the above object) + String expectedSerializedJson = "{" + + "\"Account\":\"" + ACCOUNT_ZERO + "\"," + + "\"Fee\":\"12\"," + + "\"LedgerSequence\":67850752," + + "\"Sequence\":2470665," + + "\"SigningPubKey\":\"\"," + + "\"TransactionType\":\"UNLModify\"," + + "\"UNLModifyDisabling\":1," + + "\"UNLModifyValidator\":\"EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539\"}"; + + String serialized = objectMapper.writeValueAsString(unlModify); + JSONAssert.assertEquals(expectedSerializedJson, serialized, JSONCompareMode.STRICT); + + // What we provide the ObjectMapper to Deserialize + String jsonForDeserialization = "{" + // <-- The crux of the test (i.e., missing account) + "\"Fee\":\"12\"," + + "\"LedgerSequence\":67850752," + + "\"Sequence\":2470665," + + "\"SigningPubKey\":\"\"," + + "\"TransactionType\":\"UNLModify\"," + + "\"UNLModifyDisabling\":1," + + "\"UNLModifyValidator\":\"EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539\"}"; + + Transaction deserialized = objectMapper.readValue(jsonForDeserialization, Transaction.class); + assertThat(deserialized).isEqualTo(unlModify); + } + + @Test + public void testJsonWithMissingAccountAndUnknownFields() throws JsonProcessingException, JSONException { + UnlModify unlModify = UnlModify.builder() + .putUnknownFields("Foo", "Bar") + .fee(XrpCurrencyAmount.ofDrops(12)) + .sequence(UnsignedInteger.valueOf(2470665)) + .ledgerSequence(LedgerIndex.of(UnsignedInteger.valueOf(67850752))) + .unlModifyValidator("EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539") + .unlModifyDisabling(UnsignedInteger.valueOf(1)) + .build(); + + // What we expect the ObjectMapper to Serialize (given the above object) + String expectedSerializedJson = "{" + + "\"Account\":\"" + ACCOUNT_ZERO + "\"," + + "\"Foo\" : \"Bar\"," + // <-- The crux of the test! + "\"Fee\":\"12\"," + + "\"LedgerSequence\":67850752," + + "\"Sequence\":2470665," + + "\"SigningPubKey\":\"\"," + + "\"TransactionType\":\"UNLModify\"," + + "\"UNLModifyDisabling\":1," + + "\"UNLModifyValidator\":\"EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539\"" + + "}"; + + String serialized = objectMapper.writeValueAsString(unlModify); + JSONAssert.assertEquals(expectedSerializedJson, serialized, JSONCompareMode.STRICT); + + // What we provide the ObjectMapper to Deserialize + String jsonForDeserialization = "{" + // <-- The crux of the test (i.e., missing account) + "\"Foo\" : \"Bar\",\n" + // <-- The crux of the test! + "\"Fee\":\"12\"," + + "\"LedgerSequence\":67850752," + + "\"Sequence\":2470665," + + "\"SigningPubKey\":\"\"," + + "\"TransactionType\":\"UNLModify\"," + + "\"UNLModifyDisabling\":1," + + "\"UNLModifyValidator\":\"EDB6FC8E803EE8EDC2793F1EC917B2EE41D35255618DEB91D3F9B1FC89B75D4539\"" + + "}"; + + Transaction deserializedTransaction = objectMapper.readValue(jsonForDeserialization, Transaction.class); + assertThat(deserializedTransaction).isEqualTo(unlModify); + UnlModify deserializedInterface = objectMapper.readValue(jsonForDeserialization, UnlModify.class); + assertThat(deserializedInterface).isEqualTo(unlModify); + ImmutableUnlModify deserializedImmutable = objectMapper.readValue(jsonForDeserialization, ImmutableUnlModify.class); + assertThat(deserializedImmutable).isEqualTo(unlModify); + } }