import { assert } from "chai"; import { ValidationError } from "xrpl-local/common/errors"; import { PaymentTransactionFlagsEnum, verifyPaymentTransaction, } from "../../src/models/transactions/paymentTransaction"; /** * PaymentTransaction Verification Testing. * * Providing runtime verification testing for each specific transaction type. */ describe("Payment Transaction Verification", function () { let paymentTransaction; beforeEach(function () { paymentTransaction = { TransactionType: "Payment", Account: "rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo", Amount: "1234", Destination: "rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy", DestinationTag: 1, InvoiceID: "6F1DFD1D0FE8A32E40E1F2C05CF1C15545BAB56B617F9C6C2D63A6B704BEF59B", Paths: [ [{ account: "aw0efji", currency: "XRP", issuer: "apsoeijf90wp34fh" }], ], SendMax: "100000000", } as any; }); it(`verifies valid PaymentTransaction`, function () { assert.doesNotThrow(() => verifyPaymentTransaction(paymentTransaction)); }); it(`throws when Amount is missing`, function () { delete paymentTransaction.Amount; assert.throws( () => verifyPaymentTransaction(paymentTransaction), ValidationError, "PaymentTransaction: missing field Amount" ); }); it(`throws when Amount is invalid`, function () { paymentTransaction.Amount = 1234; assert.throws( () => verifyPaymentTransaction(paymentTransaction), ValidationError, "PaymentTransaction: invalid Amount" ); }); it(`throws when Destination is missing`, function () { delete paymentTransaction.Destination; assert.throws( () => verifyPaymentTransaction(paymentTransaction), ValidationError, "PaymentTransaction: missing field Destination" ); }); it(`throws when Destination is invalid`, function () { paymentTransaction.Destination = 7896214; assert.throws( () => verifyPaymentTransaction(paymentTransaction), ValidationError, "PaymentTransaction: invalid Destination" ); }); it(`throws when DestinationTag is not a number`, function () { paymentTransaction.DestinationTag = "1"; assert.throws( () => verifyPaymentTransaction(paymentTransaction), ValidationError, "PaymentTransaction: DestinationTag must be a number" ); }); it(`throws when InvoiceID is not a string`, function () { paymentTransaction.InvoiceID = 19832; assert.throws( () => verifyPaymentTransaction(paymentTransaction), ValidationError, "PaymentTransaction: InvoiceID must be a string" ); }); it(`throws when Paths is invalid`, function () { paymentTransaction.Paths = [[{ account: 123 }]]; assert.throws( () => verifyPaymentTransaction(paymentTransaction), ValidationError, "PaymentTransaction: invalid Paths" ); }); it(`throws when SendMax is invalid`, function () { paymentTransaction.SendMax = 100000000; assert.throws( () => verifyPaymentTransaction(paymentTransaction), ValidationError, "PaymentTransaction: invalid SendMax" ); }); it(`verifies valid DeliverMin with tfPartialPayment flag set as a number`, function () { paymentTransaction.DeliverMin = "10000"; (paymentTransaction.Flags = PaymentTransactionFlagsEnum.tfPartialPayment), assert.doesNotThrow(() => verifyPaymentTransaction(paymentTransaction)); }); it(`verifies valid DeliverMin with tfPartialPayment flag set as a boolean`, function () { paymentTransaction.DeliverMin = "10000"; paymentTransaction.Flags = { tfPartialPayment: true }; assert.doesNotThrow(() => verifyPaymentTransaction(paymentTransaction)); }); it(`throws when DeliverMin is invalid`, function () { paymentTransaction.DeliverMin = 10000; paymentTransaction.Flags = { tfPartialPayment: true }; assert.throws( () => verifyPaymentTransaction(paymentTransaction), ValidationError, "PaymentTransaction: invalid DeliverMin" ); }); it(`throws when tfPartialPayment flag is missing with valid DeliverMin`, function () { paymentTransaction.DeliverMin = "10000"; assert.throws( () => verifyPaymentTransaction(paymentTransaction), ValidationError, "PaymentTransaction: tfPartialPayment flag required with DeliverMin" ); }); });